J'essaie de trouver si une fenêtre avec spécifique a été ouverte par un processus. Ce processus engendre plusieurs fenêtres, et je dois les vérifier toutes.Rechercher une fenêtre avec un texte spécifique pour un processus
J'ai aucun mal à trouver le processus, avec
foreach (Process p in Process.GetProcesses())
{
if (p.MainModule.FileName.ToLower().EndsWith("foo.exe"))
FindChildWindowWithText(p); //do work
le problème est de savoir quoi faire. Je ne peux pas utiliser le processus 'MainWindowText
, car il change avec n'importe quelle fenêtre est activée.
Puis j'ai essayé d'utiliser la fonction Windows EnumChildWindows
et GetWindowText
, mais je ne suis pas sûr si je passe une poignée correcte à EnumChildWindows. Le EnumChildWindows
fonctionne comme prévu lorsqu'il est passé MainWindowHandle, mais bien sûr MainWindowHandle change avec la fenêtre active. J'ai donc passé Process.Handle
, mais j'ai des poignées différentes et des résultats différents lors de la commutation des fenêtres de l'application. (Je comprends que EnumChildWindows retourne poignées pour non seulement fenêtres, mais contrôles en parler .net, c'est pas un problème si je pouvais obtenir la légende de la fenêtre trop)
Peut-être que je fais cela dans le mauvais sens et J'ai besoin d'une approche différente - encore une fois, mon problème est aussi simple que de trouver une fenêtre avec du texte qui correspond à une expression régulière spécifique. Donc, je aurais probablement besoin d'une fonction qui énumère toutes les fenêtres, qui sont visibles dans la barre des tâches ou plus.
Merci
réponse très élaborée, fonctionne comme un charme. – Axarydax
Dans FindChildWindow ... ne devrait-il pas être hChildWnd au lieu de hWnd après avoir vérifié le résultat de compareTitle? – seveves