2017-01-20 6 views
1

Ich kann FindWindow verwenden, aber der Name des Fensters ändert sich jedes Mal, wenn ich es öffne. Also meine Frage ist, wie kann ich entweder:So finden Sie die PID des Fensters mit X

A) Finden Sie die PID eines Fensters, das ‚x‘

B) Finden Sie die PID ein Fenster mit dem Namen der EXE-Datei enthält?

Sorry, wenn die Frage offensichtlich ist, neu in C++. Danke im Voraus!

Antwort

3
  1. Try EnumWindows zu verwenden, um alle Fenster zu bekommen Griffe
  2. Überprüfen Sie den Zustand der Fenster durch IsWindowVisible behandeln. Because some invisible windows can hang the call to GetWindowText
  3. Holen Sie sich den Titel der einzelnen Fenster von GetWindowText. Dann überprüfen Sie, ob der Titel "X" enthält, welche Zeichen oder Zeichenfolge Sie möchten.
  4. Get pid davon durch GetWindowThreadProcessId

Über B/können Sie ausführbare Dateinamen von GetWindowModuleFileName erhalten über die Fenster handhaben.

+0

Schritt 2 ('IsWindow()') ist im Aufzählungsrückruf nicht erforderlich. Vielleicht denken Sie stattdessen an 'IsWindowVisible()'? –

+2

Ihr Update ist [Zitat jemand anderen Kommentar] (http://stackoverflow.com/questions/797967/how-to-stop-enumwindows-running-infinitely-win32/798003#comment14193164_798003) ohne Grundlage dahinter. Die Sichtbarkeit eines Fensters hat keinen Einfluss auf GetWindowText() '. Und in der Tat, wenn ein Fenster zu einem anderen Prozess gehört, kann ['GetWindowText()' ** nicht hängen] (https://blogs.msdn.microsoft.com/oldnewthing/20030821-00/?p=42833), von Entwurf. Die einzige Möglichkeit, die es hängen kann, ist, wenn das Fenster zu Ihrem eigenen Prozess gehört und die Nachrichtenwarteschlange des Fensters nicht verarbeitet wird. Das wäre ein Fehler in deinem eigenen Code. –

Verwandte Themen