1. #1

    Registriert seit
    03.12.2012
    Beiträge
    29
    Thanked 1 Time in 1 Post

    Standard Get 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);
    		}
    So, nach dieser Funktion sollte "h" den WindowHandle haben, nur ist der etwas Falsch:
    h -> "2425638"
    Aber eigentlich ist der WindowHandle "4391270"

  2. #2

    Registriert seit
    31.01.2011
    Beiträge
    52
    Thanked 106 Times in 41 Posts

    Standard Get WindowHandle (HWND) with Process ID

    Wie kommst du auf diese andere Zahl?
    Also die 439..?

  3. #3

    Registriert seit
    03.12.2012
    Beiträge
    29
    Thanked 1 Time in 1 Post

    Standard Get 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.

  4. #4

    Registriert seit
    31.01.2011
    Beiträge
    52
    Thanked 106 Times in 41 Posts

    Standard Get 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.

  5. #5

    Registriert seit
    03.12.2012
    Beiträge
    29
    Thanked 1 Time in 1 Post

    Standard Get 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

  6. #6

    Registriert seit
    31.01.2011
    Beiträge
    52
    Thanked 106 Times in 41 Posts

    Standard Get 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.

  7. #7

    Registriert seit
    03.12.2012
    Beiträge
    29
    Thanked 1 Time in 1 Post

    Standard Get 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;
    }
    Diesen hier hab ich auch versucht, nur Leider wieder das gleiche.

  8. #8
    Avatar von Ta1lor
    Registriert seit
    15.11.2011
    Beiträge
    767
    Thanked 833 Times in 435 Posts

    Standard 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.