FindWindow anwenden auf bestimmten Desktop



  • Hallo,

    ich erzeuge mit CreateDesktop einen neuen Desktop.
    In diesem Desktop wird mit CreateProcessAsUser ein Programm (als Admin) gestartet.(Zuvor wird noch LogonUser ausgeführt)

    Wie kann ich nun mit FindWindow in diesem neuen Desktop eine Fenster finden.
    Will damit an die Hwnd rankommen und an die gestartete Anwendung mit PostMessage paar Nachrichten schicken.

    Es soll nicht zu diesem neuen Desktop geswitched werden!
    Der User soll vom zweiten Desktop nichts mitbekommen.

    Ich habe vorher EnumDesktopWindows verwendet um an die Fenster ranzukommen.
    Seitdem ich aber die Applikation auf dem zweiten Desktop mit Admin-Rechten starte bekomm ich mit EnumDesktopWindows kein Hwnd.

    Jetzt wollte ich es nun mit FindWindow probieren.

    Hier mal paar Codeabschnitte:

    hdesk = CreateDesktopW(desktop,NULL,NULL,DF_ALLOWOTHERACCOUNTHOOK,GENERIC_ALL,&secDesk);
    
    ...
    
    LogonUser(L"Administrator",L".",L"password",LOGON32_LOGON_INTERACTIVE,
    		LOGON32_PROVIDER_DEFAULT,&hToken)
    
    ...
    
    CreateProcessAsUser(hToken,NULL,file,&securProc,NULL,TRUE,0,NULL,dir,&si,&piProc)
    
    ....
    

    Würde mich freuen wenn ihr mir etwas helefn könntet.
    Sitze schon seit tagen dran, bin kein Schritt voran gekommen.

    Vielen Dank.



  • Fenster Handles sind an den Desktop gebunden. Das heißt von einem Desktop wirst du nicht an das Fensterhandle eines anderen Fenster kommen, wenn dieses auf einen anderen Desktop liegt.



  • wieso geht das denn mit EnumDesktopWindows ?

    Der findet doch die windows eines bestimmten Desktops.

    Edit:

    Hier noch der Code für EnumDesktopWindows

    EnumDesktopWindows(hdesk,EnumWindowsProc,(LPARAM) &wi);
    
    BOOL CALLBACK MyProg::EnumWindowsProc(HWND hwnd, LPARAM lParam)
    {
      WNDINFO*    pWndInfo = (WNDINFO*)(lParam);
      DWORD       dwProcessID;
    
      ::GetWindowThreadProcessId(hwnd, &dwProcessID);
    
      if (dwProcessID == pWndInfo->dwProcessID)
      {
        pWndInfo->hWnd = hwnd;
        return false;
      }
      return true;
    }
    


  • Na dann sag mir mal, wo du bei FindWindow das Desktophandle angeben willst? FindWindow kan eben nur Fenster finden, die sih auf dem gleichen Deskop befinden, wie der aufrufende Thread.



  • ich red ja auch von EnumDesktopWindows + die CallBack Funktion.

    Da klappt es.


Log in to reply