![]() |
Windows 10 - GetModuleHandle('USER32.DLL') & LockWorkStation funktioniert nicht
Guten Abend Euch,
ich habe heute leider feststellen müssen, dass folgender Code zum Sperren einer Windows-Maschine nicht mehr unter Windows 10 zum gewünschten Erfolg - nämlich das Sperren der Maschine - führt. Ich bekomme leider auch keine Fehlermeldung, alles scheint in Ordnung aber die Maschine sperrt sich nicht. Mit XP funktioniert der Code. Nun habe ich im Internet gesucht, aber keine Lösung dazu gefunden. Hat jemand von Euch vielleicht eine Idee, was ich falsch machen oder sich geändert haben könnte? Vielen Dank und liebe Grüße :)
Code:
class function TWindows.Windows_Lock : Boolean;
type TLockWorkStation = function : Boolean; var hL_User32 : HMODULE; LockWorkStation : TLockWorkStation; begin Result := (False); hL_User32 := (GetModuleHandle('USER32.DLL')); if (hL_User32 <> 0) then begin @LockWorkStation := (GetProcAddress(hL_User32, 'LockWorkStation')); if (@LockWorkStation <> NIL) then begin LockWorkStation; Result := True; end; end; end; |
AW: Windows 10 - GetModuleHandle('USER32.DLL') & LockWorkStation funktioniert nicht
Gibt es einen Grund, warum du das Rad neu erfindest? Selbst Delphi 5 hat diese Funktion bereits deklariert. Und warum nutzt du nicht direkt die Rückgabe der Funktion LockWorkstation für das Result deiner Funktion Windows_Lock? GetLastError bei LockWorkstation=False kann zudem auch nicht schaden, um herauszufinden, warum es nicht geht.
Übrigns gibt es einen Unterschied zwischen BOOL und Boolean: BOOL = 4 Byte, Boolean = 1 Byte. Bin mir nicht sicher, ob das hier eine Rolle spielt. Grüße Dalai |
AW: Windows 10 - GetModuleHandle('USER32.DLL') & LockWorkStation funktioniert nicht
Hallo,
gerade mal unter D10.2 (32 Bit) kompiliert, klappt. |
AW: Windows 10 - GetModuleHandle('USER32.DLL') & LockWorkStation funktioniert nicht
Guten Morgen,
ich bedanke mich für die Antworten. @Dalei: Wo ist diese Funktion denn zu finden und wie heißt sie? Ich habe diesen Code seit irgendwann Anfang 2000 und das mit dem Rückgabewert ist mir auch gerade aufgefallen und korrigiert worden. @Heiko: Hast Du meinen Code dazu verwendet oder die von Dalei vorgeschlagene mir noch unbekannte native Delphi-Implementierung? Unter Windows 10 (1703) habe ich lediglich das Problem, Standardinstallation mit Standardeinstellungen. |
AW: Windows 10 - GetModuleHandle('USER32.DLL') & LockWorkStation funktioniert nicht
Zitat:
|
AW: Windows 10 - GetModuleHandle('USER32.DLL') & LockWorkStation funktioniert nicht
Die Funktion liegt schon ganz normal in der Unit Winapi.Windows bzw. früher nur Windows.
Du hast bei deiner eigenen Deklaration das stdcall vergessen und wie schon erwähnt wurde den falschen Rückgabewert benutzt. |
AW: Windows 10 - GetModuleHandle('USER32.DLL') & LockWorkStation funktioniert nicht
Vielen Dank für die Antworten. Ich konnte mein Problem näher einkreisen: der Code ist korrekt (auch wenn optimierungsbedürftig), das Problem ist, dass dieser in einem Service ausgeführt wird. Unter Windows XP klappt das noch, aber ab Windows 7 läuft das nicht mehr. Hat jemand eine Idee, wie man das lösen könnte?
|
AW: Windows 10 - GetModuleHandle('USER32.DLL') & LockWorkStation funktioniert nicht
Zitat:
Inzwischen laufen standardmäßig die meisten Services getrennt vom "Desktop". Standardmäßig hat ein Service keinen Zugriff auf den Desktop des aktiven Benutzers. Er kann also selbstständig auch keinerlei Programmfenster anzeigen. Das kann man ändern > Interactive Services |
AW: Windows 10 - GetModuleHandle('USER32.DLL') & LockWorkStation funktioniert nicht
Hallo Himitsu,
ich habe mit dem Haken (Zugriff auf Desktop) schon gespielt, aber es ändert nichts daran. Nun habe ich bei meiner Recherche Code im StackOverflow zur Lösung gefunden. Ich weiß nicht, ob es gestattet ist, dazu zu verlinken (wenn nicht bitte kurz mitteilen, dann entferne ich den Link, jedoch weiß ich nicht wie das mit dem Urheberrecht beim Kopieren wäre, daher der Link): ![]() Dort steht bei der ersten Antwort die dritte Lösung ohne Batch-Datei. Beherrscht irgendjemand VB um das nach Delphi zu übersetzen? EDIT: Ich versuche es aktuell zu übersetzen, jedoch bisher nicht erfolgversprechend, da ich mit VB schon sehr lange nicht mehr zu tun hatte. |
AW: Windows 10 - GetModuleHandle('USER32.DLL') & LockWorkStation funktioniert nicht
Zitat:
![]() Zitat:
Im Dienst funktioniert das nicht, weil es auch mehrere interaktive Desktops parallel geben könnte. Das System wüsste also nicht welche es sperren sollte. // EDIT: CreateProcessAsUser kannst du in Delphi einfach aufrufen, das gibt es in der Unit Windows schon. Alternativ kannst du evtl. auch alle Sessions enumerieren (WTSEnumerateSessions) und trennen (WTSDisconnectSession), aber ich weiß nicht, ob das auch ohne RDP funktioniert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz