Мне нужно показать приложение Task Manager программно, развернуть его и свернуть как любое другое окно, но есть проблема, и оно просто не отвечает на ShowWindow (int hWnd, int nCmdShow).
Iя уверен, что использую правильный дескриптор, потому что перечислил все окна с помощью EnumWindows (обратный вызов PCallBack, int lParam), и единственным окном, которое не ответило, было окно диспетчера задач с заголовком process.MainWindowTitle = "Диспетчер задач", ядаже вручную нашел свой дескриптор, используя spy ++, но он по-прежнему не отвечает на SW_SHOWNORMAL или любой другой параметр nCmdShow.Я пытался запускать приложения в качестве администратора, чтобы увидеть, связано ли это с проблемой, но они продолжали вести себя как обычно, когда была дана правильная ручка функции ShowWindow;
private delegate bool PCallBack(int hWnd, int lParam);
private static void ShowWindows()
{
EnumWindows(new PCallBack(FindWindows), 0);
}
private bool FindWindows(int handle, int lparam)
{
Console.WriteLine("showing");
ShowWindow(handle, (int)SW.SHOWMINIMIZED);
ShowWindow(handle, (int)SW.SHOWNORMAL);
Thread.Sleep(3000);
return true;
}
static void Main(string[] args)
{
ShowWindows();
}
Этот код буквально показывает каждое окно, которое EnumWindows может найтидаже если они не видны, а диспетчер задач никогда не показывался, что доказало мне, что проблема не имеет ничего общего с неправильной обработкой.Кстати, вот как я нахожу это.
// the correct handle of Task Manager window
var handle = (int)Process.GetProcessesByName("taskmgr").FirstOrDefault().MainWindowHandle;
По сути, это моя проблема.Нужна помощь.