2017-01-20 4 views
1

Je peux utiliser FindWindow, mais le nom de la fenêtre change chaque fois que je l'ouvre. Donc, ma question est, comment puis-je soit:Comment trouver PID de fenêtre contenant X

A) Trouver le PID d'une fenêtre contenant « x »

B) Trouver le PID une fenêtre avec le nom du fichier exe? Désolé, si la question est évidente, nouvelle pour C++. Merci d'avance!

Répondre

3
  1. Essayez d'utiliser EnumWindows pour obtenir toutes les fenêtres poignées
  2. Vérifier l'état des fenêtres poignée par IsWindowVisible. Because some invisible windows can hang the call to GetWindowText
  3. Obtenez le titre de chaque fenêtre par GetWindowText. Ensuite, vérifiez le titre contient «X» quels caractères ou chaîne vous voulez.
  4. salpingite de par GetWindowThreadProcessId

A propos de B /, vous pouvez obtenir le nom du fichier exécutable par GetWindowModuleFileName via ses fenêtres poignée.

+0

L'étape 2 ('IsWindow()') n'est pas nécessaire dans le rappel d'énumération. Peut-être que vous pensez à 'IsWindowVisible()' à la place? –

+2

Votre mise à jour est [citant le commentaire de quelqu'un d'autre] (http://stackoverflow.com/questions/797967/how-to-stop-enumwindows-running-infinitely-win32/798003#comment14193164_798003) sans fondement. La visibilité d'une fenêtre n'affecte pas 'GetWindowText()'. Et en fait, si une fenêtre appartient à un autre processus, ['GetWindowText()' ** ne peut pas se bloquer] (https://blogs.msdn.microsoft.com/oldnewthing/20030821-00/?p=42833), intentionnellement. La seule façon de le bloquer est si la fenêtre appartient à votre propre processus et que la file d'attente des messages de la fenêtre n'est pas traitée. Ce serait un bug dans votre propre code. –