Как обеспечить, чтобы окно процесса, запущенное Process.Start (ProcessStartInfo), было в фокусе всех форм? - PullRequest
1 голос
/ 23 июня 2010

c #. Как обеспечить, чтобы окно процесса, запущенное Process.Start (ProcessStartInfo), имело фокус всех форм?Спасибо,

Ответы [ 2 ]

2 голосов
/ 23 июня 2010

Использование SetForegroundWindow и других способов настройки фокуса имеет множество ограничений.Если вы действительно хотите быть уверены, что запущенный процесс получит фокус, я рекомендую вам использовать следующие собственные (неуправляемые) функции

SystemParametersInfo (SPI_GETFOREGROUNDLOCKTIMEOUT, 0, (PVOID)&dwLockedTimeout, 0);
SystemParametersInfo (SPI_SETFOREGROUNDLOCKTIMEOUT, 0, (PVOID)0,
                      SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE);

перед запуском процесса и восстановить

SystemParametersInfo (SPI_SETFOREGROUNDLOCKTIMEOUT, 0, (PVOID)&dwLockedTimeout,
                      SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE);

приконец.Вызов типа

WaitForInputIdle (pi.hProcess, 5000);

после запуска программы и до восстановления SPI_SETFOREGROUNDLOCKTIMEOUT также может быть полезен, если у вас возникнут проблемы с немедленным

1 голос
/ 23 июня 2010

Process.Start возвращает объект Process.Чтобы сфокусироваться на процессе, сначала настройте следующий PInvoke:

[DllImport("user32.dll")] static extern bool SetForegroundWindow(IntPtr hWnd);

Затем используйте:

MyProcess = Process.Start(ProcessStartInfo);
SetForegroundWindow(MyProcess.MainWindowHandle);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...