Question

J'écris un framework de test Web pour Windows qui utilise plusieurs navigateurs pour les applications Web de test. Je veux lancer les navigateurs cachés, mais il ne fonctionne pas.

J'utilise CreateProcess pour démarrer les navigateurs avec le drapeau SW_HIDE

STARTUPINFO si;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
PROCESS_INFORMATION pi;
ZeroMemory(&pi, sizeof(pi));
CreateProcess(NULL, const_cast<char*> (cmd.c_str()) , NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);

Il fonctionne très bien pour Internet Explorer et d'autres applications, mais échoue avec Firefox et les autres navigateurs. Je suis conscient qu'un processus est en mesure de choisir ou de ne pas suivre les drapeaux passés. Est-il possible que je peux forcer à Cachés?

Je peux probablement attendre jusqu'à ce que l'fenêtre vers le haut puis le cacher en obtenant une poignée de la fenêtre ouverte. Mais je suis à la recherche de solution de nettoyage.

Était-ce utile?

La solution

Le problème est que la valeur de wShowWindow est utilisée que lorsque la fonction ShowWindow est appelée avec la commande SW_SHOWDEFAULT, en plus comme FastAl dit le navigateur créer un processus supplémentaire pour effectuer des tâches supplémentaires.
Sur la base vous idée et la réponse de FastAl, vous pouvez le faire pour cacher les fenêtres créées par le processus que vous avez créé:
1.- Créer une liste de processus avec: CreateToolhelp32Snapshot, Process32First, Process32Next et CloseHandle; ne prenant que le processus qui a été créé par le processus que vous avez créé. est un demostration de comment utiliser cette fonction, il fonctionne avec toutes les versions de windows, sauf windows NT.
Utilisez EnumWindows 2.- Enumérer les fenêtres à l'écran et avec contrôle de GetWindowThreadProcessId si les fenêtres a été créé par l'un des processus récupéré à l'étape précédente.
3.- Si les fenêtres a été créé par un des procédés définis dans l'étape 1; masquer les fenêtres à l'aide de la fonction ShowWindow.
Vous pouvez suivre le processus créé par vous et vérifier si le nouveau processus / fenêtres sont créées.

Autres conseils

Vous pourriez lancer les processus d'un service (en cours d'exécution en tant qu'utilisateur NETWORK SERVICE, par exemple). Cela leur évitera de montrer une interface utilisateur. Il sera toutefois vous empêcher d'être en mesure de regarder l'interface du tout, même si vous voulez plus tard.

Une autre option serait de faire quelque chose avec les stations de fenêtre et de bureau, jetez un oeil à la page section sur les stations fenêtre et postes de travail sur MSDN . Une idée serait d'utiliser CreateDesktop et puis en spécifiant ce bureau comme paramètre lpDesktop dans la structure STARTUPINFO donnée à CreateProcess. Si vous plus tard souhaitez afficher l'interface utilisateur, utilisez

essayer si.wShowWindow = 0; drôle cela a fonctionné pour moi, pas SW_HIDE qui devrait porter la même valeur que.

Selon MSDN , Il semble que vous devez passer ce drapeau dans dwFlags.

STARTF_USESHOWWINDOW 0x00000001 - The wShowWindow member contains additional information.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top