Win32 SetForegroundWindow non fiable

J'ai une assez complexe série d'applications qui dépendent de la capacité de basculer entre les applications en arrière-plan.

Mon problème est que, tous les 5 ou 6 fois de la commutation des applications au premier plan, tout simplement, il ne parvient pas à apporter de l'application de l'avant. GetLastError ne pas signaler les problèmes éventuels. Bien souvent, je vois le bon flash application au premier plan, pour un moment, puis la demande antérieure est visible.

J'ai une application de gestion que j'ai de la source, qu'elle engendre et des contrôles sur les 4 applications dont je n'ai pas de source pour. l'une des applications qu'elle engendre/commandes est également un gestionnaire, qui engendre le/les contrôles sur 5 applications.

C'est une sorte de kiosque de conception de sorte que l'utilisateur l'habitude même avoir un clavier ou une souris, il suffit d'un écran tactile.

J'ai essayé toutes les combinaisons des appels Win32 pour contrôler eux, je me suis juste des idées.

Ma première tentative a été:

SetWindowPos(hApp, HWND_TOPMOST, NULL, NULL, NULL, NULL, SWP_NOMOVE | SWP_NOSIZE);
SetWindowPos(hApp, HWND_NOTOPMOST, NULL, NULL, NULL, NULL, SWP_NOMOVE | SWP_NOSIZE);

Ma deuxième tentative:

SetForegroundWindow(hApp);
SetActiveWindow(hApp);
SetFocus(hApp);

ma troisième tentative:
DWORD dwThreadID = GetWindowThreadProcessId(hApp, NULL);
AttachThreadInput( dwThreadID, GetCurrentThreadId(), true);

SetForegroundWindow(hApp);
SetActiveWindow(hApp);
SetFocus(hApp);

AttachThreadInput( dwThreadID, GetCurrentThreadId(), false);

ma de suite la tentative:

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);

Je me sens comme je suis en manque d'un important gotcha quand il s'agit de la fenêtre de commutation. Je sais que seul le processus d'arrière-plan peut changer de fenêtres autour de lui, mais comme mon Gestionnaire principal du programme est de frai et de départ tous les autres processus que j'ai besoin de contrôler, j'ai l'impression que ça devrait être capable de déplacer ces fenêtres tout autour. Des suggestions ou des conseils est apprécié.

source d'informationauteur micheal blunning