Ho una serie piuttosto complessa di applicazioni che dipendono dalla possibilità di passare le applicazioni in primo piano.Win32 SetForegroundWindow non affidabile
Il mio problema è, ogni 5 o 6 volte di passare le applicazioni in primo piano, semplicemente non riesce a portare avanti l'applicazione. GetLastError non segnala alcun problema. Spesso vedo l'applicazione corretta lampeggiare in primo piano per un momento, quindi l'applicazione precedente è visibile.
Possiedo un'applicazione Manager di cui dispongo, genera e controlla circa 4 applicazioni per le quali non dispongo di origine. una delle applicazioni che genera/controlla è anche un manager che genera/controlla circa 5 applicazioni.
Questa è una sorta di struttura del chiosco in modo che l'utente non abbia nemmeno una tastiera o un mouse, solo un touch screen.
Ho provato tutte le combinazioni delle chiamate Win32 per controllarle. Sono appena uscito dalle idee.
Il mio primo tentativo è stato:
SetWindowPos(hApp, HWND_TOPMOST, NULL, NULL, NULL, NULL, SWP_NOMOVE | SWP_NOSIZE);
SetWindowPos(hApp, HWND_NOTOPMOST, NULL, NULL, NULL, NULL, SWP_NOMOVE | SWP_NOSIZE);
Il mio secondo tentativo è stato:
SetForegroundWindow(hApp);
SetActiveWindow(hApp);
SetFocus(hApp);
mio terzo tentativo: DWORD dwThreadID = GetWindowThreadProcessId (Happ, NULL); AttachThreadInput (dwThreadID, GetCurrentThreadId(), true);
SetForegroundWindow(hApp);
SetActiveWindow(hApp);
SetFocus(hApp);
AttachThreadInput(dwThreadID, GetCurrentThreadId(), false);
mio tentativo indietro:
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);
Mi sento come se mi manca un Gotcha importante quando si tratta di commutazione finestra. So che solo il processo in primo piano può cambiare finestra, ma mentre il mio programma Manager principale si avvia e tutti gli altri processi che devo controllare, ho la sensazione che dovrebbe essere in grado di spostare queste finestre. Qualsiasi suggerimento o consiglio è apprezzato.
First passo, leggi e capisci questo: http://blogs.msdn.com/b/oldnewthing/archive/2009/02/20/9435239.aspx –
Inoltre: http://blogs.msdn.com/b/oldnewthing/archive /2008/08/01/8795860.aspx –
Prova a ridurre a icona seguito da ripristino. –