Alle Anwendungen / Tasks verstecken
-
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.
-
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...