Question

Je crée une application dont la fenêtre principale est masquée à l'aide du code suivant:

STARTUPINFO siStartupInfo;
PROCESS_INFORMATION piProcessInfo;

memset(&siStartupInfo, 0, sizeof(siStartupInfo));
memset(&piProcessInfo, 0, sizeof(piProcessInfo));

siStartupInfo.cb = sizeof(siStartupInfo);
siStartupInfo.dwFlags = STARTF_USESHOWWINDOW | STARTF_FORCEOFFFEEDBACK | STARTF_USESTDHANDLES;
siStartupInfo.wShowWindow = SW_HIDE;

if(CreateProcess(MyApplication, "", 0, 0, FALSE, 0, 0, 0, &siStartupInfo, &piProcessInfo) == FALSE)  
{
 // blah    
 return 0;
}

Tout fonctionne correctement, sauf la fenêtre de l'application principale (qui appelle ce code) perd le focus lorsque j'ouvre le nouveau programme. J'ai essayé de réduire la priorité du nouveau processus mais le problème de focalisation est toujours là.

Y a-t-il un moyen d'éviter cela? de plus, existe-t-il un moyen de créer un autre processus sans utiliser CreateProcess (ou l'une des API appelant CreateProcess comme ShellExecute)?

Je suppose que mon application perd le focus parce qu'elle a été attribuée au nouveau processus, même s'il est masqué.

Pour ceux d’entre vous qui sont curieux et qui vont certainement demander l’habituel "pourquoi voulez-vous le faire", ma réponse est parce que j’ai un processus de surveillance qui ne peut pas être un service et qui démarre chaque fois que j’ouvre ma page principale. application. Satisfait?

Merci pour l'aide. Le code sera apprécié. Jess.

Était-ce utile?

La solution

L'application que vous exécutez utilise le focus de la fenêtre.

Une façon de contourner ce problème consiste à démarrer votre nouveau processus dans un nouveau bureau. Cela empêcherait l'application de voler le focus de la fenêtre sur votre bureau.

Le code permettant d'exécuter un processus sur un nouveau bureau devrait ressembler à ceci:

HDESK hOld = GetThreadDesktop( GetCurrentThreadId() );
HDESK hNew = OpenDesktop( "name", 0, FALSE, GENERIC_ALL );
SetThreadDesktop( hNew );
CreateProcess( ... );
SetThreadDesktop( hOld );
CloseDesktop( hNew );

Autres conseils

Il est clair que l'application cible n'honore pas les drapeaux ShowWindow. Vous devez corriger l’application lancée pour qu’elle ne soit pas gourmande.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top