Alle Anwendungen / Tasks verstecken



  • Hi,

    gibt es ein Möglichkeit von allen Tasks die im Windows Task-Manager angezeigt werden den Prozessnamen zu bekommen, um diese anschließend zu verstecken?

    Danke John



  • ja man bekommt die namen raus



  • und wie?



  • Kann mir denn keiner sagen wie das geht?
    ich kann mit system.diagnostics alle laufenden prozesse bekommen, aber wie kann ich dort zwischen tasks und nicht tasks differenzieren?



  • DaJohn schrieb:

    Kann mir denn keiner sagen wie das geht?
    ich kann mit system.diagnostics alle laufenden prozesse bekommen, aber wie kann ich dort zwischen tasks und nicht tasks differenzieren?

    Tasks? Es gibt Prozesse und Threads. System Diagnostics liefert Dir eine Liste von Prozessen.



  • Ev. sind die "Tasks" gemeint, die im Taskmanager erscheinen (nicht im Processes Tab).

    Simon



  • ja genau es geht um die Tasks die man im Taskmanager sieht nicht die threads und auch nicht die prozesse
    allerdings hat jeder task einen prozess aber nicht jeder prozess einen task



  • Die "Tasks" sind nichts anderes als Prozesse mit einem Mainwindow.

    Versuch mal das:

    foreach (Process p in proc)
    {
        if (p.MainWindowHandle != IntPtr.Zero)
        {
            string name = p.MainWindowTitle;
        }
        else
        {
        }
    }
    


  • Damit bekommt er zwar die Prozesse, aber aus dem Task Manager verstecken kann man sie in C# AFAIK nicht. In C++ gibt es dazu bestimmte "Hooks" aber C# ist nicht Systemnah genug.


  • Administrator

    Mich würde eher mal interessieren, wieso jemand sowas überhaupt machen möchte 😉

    Grüssli



  • Die Prozesse sollen nicht versteckt werden sondern die Tasks und das ist mit c# und System.Diagnostics möglich.
    Wozu ich das brauche?

    Ganz einfach die Tasks sollen versteckt werden weil manche Installationsprogramme vor der Installation auffordern alle Programme zu schließen. Das möchte ich umgehen in dem ich die Tasks für 10 sekunden verstecken lasse und dann die Installation starte und anschließend können sie wieder auftauchen.



  • Und das funcktioniert tatsächlich?

    Simon



  • lol so ein blödsinn! Wenn das mit System.Diagnostics funktioniert dann zeig doch mal den Code 😃



  • es funktioniert nicht 100 % sauber aber hier mal der code für die die es interessiert

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Diagnostics;
    using System.Runtime.InteropServices;
    using System.Threading;
    
    namespace WindowsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            [DllImport("User32")]
            private static extern int ShowWindow(int hwnd, int nCmdShow);
    
            private void button1_Click(object sender, EventArgs e)
            {
                Process[] pp;
                List<Process> pAll = new List<Process>();
                foreach (String test in checkedListBox1.CheckedItems)
                {
                    pp = Process.GetProcessesByName(test);
                    foreach (Process p in pp)
                    {
                        pAll.Add(p);
                    }
                }
                foreach (Process p in pAll)
                {
                    ShowWindow(p.MainWindowHandle.ToInt32(), 0);
                }
                Thread.Sleep(10000);
                foreach (Process p in pAll)
                {
                    ShowWindow(p.MainWindowHandle.ToInt32(), 2);
                }
            }
    
            private void button2_Click_1(object sender, EventArgs e)
            {
                checkedListBox1.CheckOnClick = true;
                checkedListBox1.Items.Clear();
                Process[] pp;
                pp = Process.GetProcesses();
                foreach (Process p in pp)
                {
                    if (p.MainWindowHandle != IntPtr.Zero && p.MainWindowTitle != "")
                    {
                        checkedListBox1.Items.Add(p.ProcessName);
                    }
                }
            }
        }
    }
    


  • Wenn ein Prozess mehrere Fenster hat wird nur eines unsichtbar gemacht.

    Du müsstest dann schon über alle Fenster gehen. Da ergibt sich dann das Problem das Du nicht weißt welches Fenster überhaupt angezeigt werden darf und welches nicht. Du kannst Dir noch den aktuellen Status holen, aber innerhalb der "Wartezeit" kann sich vieles ändern. Eine solche "Lösung" bedeutet für jedes verstecke Programm undefiniertes verhalten.

    Ganz abgesehen davon, das es einen Grund hat warum ein Setup das schließen bestimmter "Tasks" erwartet, gibt es auch Setups die auf Prozesse prüfen.

    Das ganze vorgehen riecht irgendwie nach pfusch - es endet in undefiniertem Verhalten. Man kann nicht mal mehr davon ausgehen das die Installation sauber durchlief.



  • Nur blöd das die Tasks im Task manager mit Fenster nix zutun haben und damit icht unsichtbar werden^^



  • wtfrofl schrieb:

    Nur blöd das die Tasks im Task manager mit Fenster nix zutun haben und damit icht unsichtbar werden^^

    dann lass uns doch mal an deiner so erhabenen Weisheit teilhaben und erklär und was einen Task denn ausmacht.

    Fucking Trolls...


Anmelden zum Antworten