-
25.07.2011, 03:18 #1
- Registriert seit
- 03.12.2012
- Beiträge
- 29
Thanked 1 Time in 1 PostGet WindowHandle (HWND) with Process ID
Hallo,
ich habe zur Zeit das Problem, das ich zwar die Process ID habe, aber nicht den WindowHandle.
Somit hab ich etwas gegoogelt und bin auf diese Funktion gestoßen:
Code:HWND h = ::GetTopWindow(0); while(h) { DWORD pid1; DWORD dwTheardId = ::GetWindowThreadProcessId( h,&pid1); if ( pid1 == PID ) { break; } h = ::GetNextWindow( h , GW_HWNDNEXT); }
h -> "2425638"
Aber eigentlich ist der WindowHandle "4391270"
-
25.07.2011, 03:24 #2
- Registriert seit
- 31.01.2011
- Beiträge
- 52
Thanked 106 Times in 41 PostsGet WindowHandle (HWND) with Process ID
Wie kommst du auf diese andere Zahl?
Also die 439..?
-
25.07.2011, 03:25 #3
- Registriert seit
- 03.12.2012
- Beiträge
- 29
Thanked 1 Time in 1 PostGet WindowHandle (HWND) with Process ID
Ich habe noch ein VB.net Programm, das auch so Funktioniert wie es soll.
Das versuche ich gerade nur in C++ umzuschreiben, bzw. benutze ich bei vb.net eine DLL die man bei C++ halt net benutzen kann.
-
25.07.2011, 03:30 #4
- Registriert seit
- 31.01.2011
- Beiträge
- 52
Thanked 106 Times in 41 PostsGet WindowHandle (HWND) with Process ID
Wie liest du es den in .net aus?
Hatte damit auch mal ein Problem, dass der Taskmanager ne andere HWND anzeigt als mir .net ausgibt.
-
25.07.2011, 03:35 #5
- Registriert seit
- 03.12.2012
- Beiträge
- 29
Thanked 1 Time in 1 PostGet WindowHandle (HWND) with Process ID
Dim wow As New BlackMagic
...
Dim pid As Integer = ComboBox1.Text
If wow.OpenProcessAndThread(pid) Then
GetBaseAddress(wow.ProcessId, "Wow")
End If
MsgBox(wow.WindowHandle)
das sind die Funktionen.
Der source der DLL:
http://www.shynd.com/public/BlackMagic.1.1.source.rar
-
25.07.2011, 03:36 #6
- Registriert seit
- 31.01.2011
- Beiträge
- 52
Thanked 106 Times in 41 PostsGet WindowHandle (HWND) with Process ID
Jo genau mit .windowhandle.
Das ist ein andere Handel ID als die, die du mit C++ ausliest.
Ich weis nicht mehr genau wie ich das gelöst hatte.. einfach mal googeln.
Man kann die HWND auch noch anderst auslesen.
-
25.07.2011, 03:51 #7
- Registriert seit
- 03.12.2012
- Beiträge
- 29
Thanked 1 Time in 1 PostGet WindowHandle (HWND) with Process ID
Code:HWND getCtrlHandle(LPSTR title, LPSTR sClass, int instanceNum) { HWND hWin = FindWindow(0,title); HWND hControl = FindWindowEx(hWin,0,sClass,0); for (int i = 1; i < instanceNum;i++) hControl = FindWindowEx(hWin,hControl,sClass,0); return hControl; }
-
25.07.2011, 03:52 #8
Get WindowHandle (HWND) with Process ID
Du kannst die ProcessID in EnumWindows Function (Windows) übergeben und im Callback einfach gucken, ob die HWND zu dem PID passt. Wenn erfolgreich, lässt du dir halt die HWND zurückgeben.
// Hab scheiße erzählt :p.
Du kannst die Funktion ausführen und im nachhinein die zurückbegebenden HWNDs (Callback der Funktion), mit deiner Pid vergleichen.
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.