Как мне преодолеть «фокус-воровство» в Windows 7? - PullRequest
1 голос
/ 19 ноября 2011

Функция ShowWindow больше не работает так, как было объявлено, и, скорее всего, это связано с ограничениями "кражи фокуса", которые я обошел стороной после того, как изменил параметр реестра ForegroundLockTimeout. Несмотря на то, что я установил его на 0 везде в Реестре, мои звонки все равно не выполняются.

Я пытаюсь использовать ShowWindow, чтобы вытащить некоторые программы из SysTray, скрывающиеся с помощью сочетаний клавиш. Я связал некоторые приложения на C # с этими горячими клавишами. Например, я использую это, чтобы вытащить Total Commander (поскольку его стандартная функциональность нарушена):

//Win32API.ShowWindow((IntPtr)hwndTC, Win32API.ShowWindowCommand.ShowDefault);
Win32API.ShowWindow((IntPtr)hwndTC, Win32API.ShowWindowCommand.ShowMaximized);
//Win32API.ShowWindow((IntPtr)hwndTC, Win32API.ShowWindowCommand.Maximize);
//Win32API.SetWindowPos(hwndTC, Win32API.HWND_TOPMOST, 0, 0, 0, 0, 
//    Win32API.SWP_NOSIZE | Win32API.SWP_NOMOVE);
//Win32API.SetWindowPos(hwndTC, Win32API.HWND_NOTOPMOST, 0, 0, 0, 0, 
//    Win32API.SWP_NOSIZE | Win32API.SWP_NOMOVE);
Win32API.SetWindowPos(hwndTC, Win32API.HWND_TOP, 0, 0, 0, 0, 
    Win32API.SWP_NOSIZE | Win32API.SWP_NOMOVE | Win32API.SWP_SHOWWINDOW);
Win32API.SetForegroundWindow(hwndTC);

Там много комментированного кода, потому что я все перепробовал. В Windows XP это прекрасно работало с простым вызовом ShowWindow. На Windows 7 это беспорядок. Он ведет себя хаотично и редко работает.

При работе от имени администратора, он вроде работает. За исключением того, что окно, которое я пытаюсь показать, начнет мигать на панели задач вместо того, чтобы отображаться. Полная тайна.

...