Was ist der Willkommensbildschirm für dich?
Der Desktop mit dem LoginDialog ist ein anderer als der normale Desktop für die Anwendungen.
Ich nehme an, du willst den Anmeldebildschirm-Desktop oder? Dieser Desktop heißt "winlogon". Er ist von normalen Benutzerprogrammen nicht erreichbar. Man müsste ein Program durch einen Dienst in die Session des Benutzers starten (mit SYSTEM Rechten). Dieses programm könnte ein kleines Fenster mit dem Text in den Winlogonbildschirm einblenden. Ohne Fensterrand und mit Hintergrundfarbe (oder Transparenz) sieht das so aus, als ob da ein Text auf dem Desktop steht.
Wenn du auf den normalen Desktop einfach so - und nur einmal - einen Text zeichnest, dann wird dieser Text gelöscht, sobald der Desktop sich neumalt, z.B. weil ein Fenster darüber bewegt wird.
Wen dein Code als Systembenutzer ausgeführt wird, dann kannst du mit OpenDesktop('winlogon',...) und SetThreadDesktop sowie GetDesktopWindow den winlogon Desktop möglicherweise auch bekommen.
Die
JWSCL kann das in
OOP. Ich vermute mal, es sieht etwa so aus, wie im Quelltext. Aber ich kann nicht versprechen, dass es funkz:
Delphi-Quellcode:
uses Windows, JwsclDesktops;
var
Desktop: TJwSecurityDesktop;
begin
Desktop:=TJwSecurityDesktop.OpenDesktop('winlogon', [], false, GENERIC_ALL);
Desktop.SetThreadDesktop;
try
DrawPicture('MG.bmp', 0, 0, 0, 0);
finally
Desktop.Free;
end;
end;
Der Code muss als SYSTEM Benutzer ausgeführt werden. Zudem muss die SessionID des Prozesses, die Session des jeweiligen angemeldeten Benutzers sein.
Z.B.
Windows XP
- Ein Benutzer angemeldet. Session ID muss 0 sein. Das kann noch ein Dienst machen.
- Zwei Benutzer angemeldet. Session ID muss 0 und 1 sein. Also hier brauchen wir zwei Prozesse in Session 0 (erster Benutzer) und Session 1 (zweiter Benutzer). Session 0 kann noch ein Dienst machen. Session 1 nicht mehr. Hier muss der Dienst ein Programm in diese Session starten.
Windows Vista.
-Ein Benutzer angeldet. Session ID muss 1 sein. Ein Dienst kann hier nichts machen. Hier muss der Dienst ein Programm in diese Session starten.
-weitere Benutzer, wie in XP