Tengo una serie bastante compleja de aplicaciones que dependen de la capacidad de cambiar aplicaciones en primer plano.Win32 SetForegroundWindow no fiable
Mi problema es que cada 5 o 6 veces de cambiar las aplicaciones en primer plano, simplemente no logra llevar la aplicación hacia adelante. GetLastError no informa ningún problema. Muchas veces veo la aplicación correcta destellar en primer plano por un momento, luego la aplicación anterior es visible.
Tengo una aplicación de administrador que tengo como fuente, genera y controla aproximadamente 4 aplicaciones para las que no tengo fuente. una de las aplicaciones que genera/controla también es un administrador que engendra/controla alrededor de 5 aplicaciones.
Este es un tipo de diseño de quiosco por lo que el usuario ni siquiera tendrá un teclado o mouse, solo una pantalla táctil.
He intentado cada combinación de las llamadas de Win32 para controlarlas. Me acabo de ir de las ideas.
Mi primer intento fue:
SetWindowPos(hApp, HWND_TOPMOST, NULL, NULL, NULL, NULL, SWP_NOMOVE | SWP_NOSIZE);
SetWindowPos(hApp, HWND_NOTOPMOST, NULL, NULL, NULL, NULL, SWP_NOMOVE | SWP_NOSIZE);
Mi segundo intento fue:
SetForegroundWindow(hApp);
SetActiveWindow(hApp);
SetFocus(hApp);
mi tercer intento: DWORD dwThreadId = GetWindowThreadProcessId (Happ, NULL); AttachThreadInput (dwThreadID, GetCurrentThreadId(), verdadero);
SetForegroundWindow(hApp);
SetActiveWindow(hApp);
SetFocus(hApp);
AttachThreadInput(dwThreadID, GetCurrentThreadId(), false);
mi vuelta intento:
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);
siento que me falta un Gotcha importante cuando se trata de la ventana de cambio. Sé que solo el proceso en primer plano puede cambiar las ventanas, pero como mi programa principal de Gerente está generando y comenzando todos los otros procesos que necesito controlar, siento que debería ser capaz de mover estas ventanas. Cualquier sugerencia o consejo es apreciado.
Primera paso, lea y comprenda esto: http://blogs.msdn.com/b/oldnewthing/archive/2009/02/20/9435239.aspx –
También: http://blogs.msdn.com/b/oldnewthing/archive /2008/08/01/8795860.aspx –
Intenta minimizar seguido de restauración. –