GetDesktopWindow() im Usermode ??



  • Hallo,

    ich setze in einem Service ein GetDesktopWindow()
    zum verändern der Helligkeit ein. Leider funktioniert
    es nur unter Admin Rechten. Was mach ich falsch ?
    Gibt es ein GetDesktopWindow() für User Rechte ?

    BOOL WINAPI SetDeviceGammaRamp(
      HDC hDC, //hier mein GetDestopWIndow()
      LPVOID lpRamp
    );
    

    Zugabe:
    Ich habe jetzt herausgefunden, das GetDesktopWindow() immer für den ersten
    angemeldeten User gilt, also egal ob User oder Admin. Als ich mit dem User
    zuerst angemaldet war, ging es nur auf den User und nicht mehr beim Admin 😞
    Wie kann man den Desktop Handle des aktuellen Benutzers ermitteln ?

    Gruß
    thenoname



  • Wenn man Dienste Programmiert, sollte man sich mit den Grundlagen auseinandergesetzt haben.

    Ein Dienst läuft in einer anderen WindowsStation auf einem anderen Desktop. GetDesktopWindow liefert dir also in einem Dienst das Handle des Desktops in dem der Dienst läuft.

    Läuft der Dienst unter dem Administratorenkonto bekommst du mit GetDesktopWindow das Handle eines interaktiven Desktops. Wichtig: eines interaktiven Desktops. Denn es kann auch mehrere interaktive Desktops geben (FastUserSwitching, Terminals).



  • Ein Dienst läuft normalerweise mit Systemrechten, das sind weder
    Admin noch Userrechte. Die Frage war aber, wie man in diesem Fall
    auf das Desktop Handle (des gerade eingeloggten Useres) kommt.



  • thenoname schrieb:

    Die Frage war aber, wie man in diesem Fall
    auf das Desktop Handle (des gerade eingeloggten Useres) kommt.

    Die Frage ist falsch, da, wie "Luckie" schon gesagt hat, die ganze Vorgehensweise falsch ist.
    Mach zwei Programme: Ein Service und ein UI. Dann hast Du alle Probleme gelöst.



  • Nett Idee, will ich aber nicht.
    Denk mal an die ganzen Service Programme, die dir auf das Desktop
    ne Uhr malen, die machen nix anderes. Oder bewegte 3D Desktop Dienste.
    Es muss also eine Möglichkeit geben, das aktuelle Benutzerdesktop Handle zu bekommen. An das erste komme ich ja schon mal.



  • thenoname schrieb:

    Es muss also eine Möglichkeit geben, das aktuelle Benutzerdesktop Handle zu bekommen. An das erste komme ich ja schon mal.

    es gibt so funktionen wie diese da: http://windowssdk.msdn.microsoft.com/en-us/library/ms684309.aspx
    oder du suchst dir was anderes aus: http://windowssdk.msdn.microsoft.com/en-us/library/ms687107.aspx



  • thenoname schrieb:

    das aktuelle Benutzerdesktop Handle zu bekommen.

    Was ist denn der "aktuelle Benutzer"? Sowas gibt es nicht.



  • Gut, das es dich nicht gibt 🙂



  • thenoname schrieb:

    Ein Dienst läuft normalerweise mit Systemrechten, das sind weder Admin noch Userrechte.

    Korrekt, hat auch niemand etwas anderes behauptet.

    Die Frage war aber, wie man in diesem Fall auf das Desktop Handle (des gerade eingeloggten Useres) kommt.

    Frage: Welchen Desktop? Wie ich dir schon gesagt habe gibt es nicht den einen Benutzer-Desktop.

    thenoname schrieb:

    Denk mal an die ganzen Service Programme, die dir auf das Desktop ne Uhr malen, die machen nix anderes.

    Jupp, und die werden alle unter Vista nicht mehr funktionieren, da es unter Vista keine interaktiven Dienste mehr gibt.

    thenoname schrieb:

    Gut, das es dich nicht gibt 🙂

    gerade war der Admininstrator an meinem PC, weil er was machen musste. Um sich anzumelden hat er das FastUserSwitching benutzt. Frage: Wie viele interaktive Benutzer waren da am System angemeldet und wie viele interaktive Desktop gab es zu dem Zeitpunkt?


Anmelden zum Antworten