У меня довольно сложная серия приложений, которые зависят от возможности переключения приложений на передний план.
Моя проблема заключается в том, что каждые 5 или 6 раз при переключении приложений на передний план просто не удается отправить приложение вперед. GetLastError не сообщает о каких-либо проблемах. Часто я вижу правильное приложение на переднем плане, а затем отображается предыдущее приложение.
У меня есть приложение-менеджер, для которого у меня есть источник, он порождает и контролирует около 4 приложений, для которых у меня нет источника. одно из приложений, которое оно порождает/контролирует, также является менеджером, который запускает/контролирует около 5 приложений.
Это своего рода дизайн киоска, поэтому у пользователя даже нет клавиатуры или мыши, просто сенсорного экрана.
Я пробовал каждую комбинацию вызовов Win32 для управления ими. Я просто из идей.
Моя первая попытка:
SetWindowPos(hApp, HWND_TOPMOST, NULL, NULL, NULL, NULL, SWP_NOMOVE | SWP_NOSIZE);
SetWindowPos(hApp, HWND_NOTOPMOST, NULL, NULL, NULL, NULL, SWP_NOMOVE | SWP_NOSIZE);
Моя вторая попытка:
SetForegroundWindow(hApp);
SetActiveWindow(hApp);
SetFocus(hApp);
моя третья попытка: DWORD dwThreadID = GetWindowThreadProcessId (hApp, NULL); AttachThreadInput (dwThreadID, GetCurrentThreadId(), true);
SetForegroundWindow(hApp);
SetActiveWindow(hApp);
SetFocus(hApp);
AttachThreadInput( dwThreadID, GetCurrentThreadId(), false);
моя четвертая попытка:
DWORD dwThreadID = GetWindowThreadProcessId(hApp, NULL);
AttachThreadInput( dwThreadID, GetCurrentThreadId(), true);
SetWindowPos(hApp, HWND_TOPMOST, NULL, NULL, NULL, NULL, SWP_NOMOVE | SWP_NOSIZE);
SetWindowPos(hApp, HWND_NOTOPMOST, NULL, NULL, NULL, NULL, SWP_NOMOVE | SWP_NOSIZE);
SetForegroundWindow(hApp);
SetActiveWindow(hApp);
SetFocus(hApp);
AttachThreadInput( dwThreadID, GetCurrentThreadId(), false);
Я чувствую, что мне не хватает важной информации, когда дело доходит до переключения окон. Я знаю, что только процесс переднего плана может переключать окна, но по мере того, как моя основная программа диспетчера запускается и запускает все остальные процессы, которые мне нужно контролировать, я чувствую, что она должна быть способна перемещать эти окна. Любые предложения или советы приветствуются.