AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Windows 10 - GetModuleHandle('USER32.DLL') & LockWorkStation funktioniert nicht
Thema durchsuchen
Ansicht
Themen-Optionen

Windows 10 - GetModuleHandle('USER32.DLL') & LockWorkStation funktioniert nicht

Ein Thema von 361 · begonnen am 7. Nov 2017 · letzter Beitrag vom 9. Nov 2017
Antwort Antwort
361

Registriert seit: 27. Okt 2005
Ort: Berlin und Brandenburg
93 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

Windows 10 - GetModuleHandle('USER32.DLL') & LockWorkStation funktioniert nicht

  Alt 7. Nov 2017, 19:01
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;
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai
Online

Registriert seit: 9. Apr 2006
1.683 Beiträge
 
Delphi 5 Professional
 
#2

AW: Windows 10 - GetModuleHandle('USER32.DLL') & LockWorkStation funktioniert nicht

  Alt 7. Nov 2017, 19:36
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
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Windows 10 - GetModuleHandle('USER32.DLL') & LockWorkStation funktioniert nicht

  Alt 7. Nov 2017, 19:49
Hallo,
gerade mal unter D10.2 (32 Bit) kompiliert, klappt.
Heiko
  Mit Zitat antworten Zitat
361

Registriert seit: 27. Okt 2005
Ort: Berlin und Brandenburg
93 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

AW: Windows 10 - GetModuleHandle('USER32.DLL') & LockWorkStation funktioniert nicht

  Alt 8. Nov 2017, 06:59
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.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.073 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Windows 10 - GetModuleHandle('USER32.DLL') & LockWorkStation funktioniert nicht

  Alt 8. Nov 2017, 08:25
@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.
Ich würde ja zuerst in Winapi.Windows gucken und wenn das nicht von Erfolg gekrönt ist dann in den anderen Winapi-Units in bspw. C:\Program Files (x86)\Embarcadero\Studio\19.0\source\rtl\win
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.909 Beiträge
 
Delphi 12 Athens
 
#6

AW: Windows 10 - GetModuleHandle('USER32.DLL') & LockWorkStation funktioniert nicht

  Alt 8. Nov 2017, 10:19
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
361

Registriert seit: 27. Okt 2005
Ort: Berlin und Brandenburg
93 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#7

AW: Windows 10 - GetModuleHandle('USER32.DLL') & LockWorkStation funktioniert nicht

  Alt 8. Nov 2017, 14:04
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?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:01 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