Autor |
Beitrag |
pHaRyNx
      
Beiträge: 94
win 95, win 2000, win xp, VISTA, Ubuntu 8.04
Delphi 7 PE
|
Verfasst: Mo 08.09.08 14:29
hallo.
im rahmen einer kindersicherung habe ich eien knopf eingerichtet, der das system via "LockWorkStation;" sperrt und aufhört, die zeit zu messen.
wie kann jetzt abfragen, ob das system noch immer gesperrt ist oder bereits wieder entsperrt wurde ? (weil die zeit, die vergeht, wärend das system gesperrt ist, soll nicht gezählt werden...)
mfg pHaRyNx
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mo 08.09.08 15:10
IsWorkstationLocked, gibt's ne Funktion hier im Forum dazu. Funktioniert im Wesentlichen damit, dass man prüft, ob man den Tesktop wechseln kann.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
pHaRyNx 
      
Beiträge: 94
win 95, win 2000, win xp, VISTA, Ubuntu 8.04
Delphi 7 PE
|
Verfasst: Mo 08.09.08 17:29
ich habe mal gesucht, aber unter IsWorkStationLocked nix gefunden außer diesen beitrag und einen anderen, in dem du auch schreibst, dass es eine solche funktion hier im forum gibt...
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Mo 08.09.08 17:36
Keine Minute googeln:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| function IsWorkstationLocked: Boolean; var hDesktop: HDESK; begin Result := False; hDesktop := OpenDesktop('default', 0, False, DESKTOP_SWITCHDESKTOP); if hDesktop <> 0 then begin Result := not SwitchDesktop(hDesktop); CloseDesktop(hDesktop); end; end; |
cu,
Marc
|
|
pHaRyNx 
      
Beiträge: 94
win 95, win 2000, win xp, VISTA, Ubuntu 8.04
Delphi 7 PE
|
Verfasst: Di 09.09.08 18:19
vielen dank für die funktion. funktioniert eins A.
mfg pHaRyNx
edit
ich habe jetzt unter vista damit nur ein problem: wenn ich z.b. die lan-verbindung deaktivieren will, dann kommt stadardmäßig das fenster: "Benutzerkontensteuerung: Zur Fortsetzung des Vorgangs ist Ihre Zustimmung erforderlich..."
und wenn ich mit IsWorkstationLocked teste, dann wird mir gemeldet, dass das System gerade gesperrt ist. was kann ich dagegen tun ?
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Di 09.09.08 18:55
Ich denk mal, damit das unter AstaLa Vista klappt, musst Du dir VOR der Prüfung über das UAC die nötigen Rechte bestätigen lassen, bzw. dein Programm über ein Manifest bereits mit höheren Rechten starten lassen. Das Tauschen des Desktops ist nicht um sonst eine privilegierte Aktion, da man das auch sehr nett missbrauchen kann ...
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
pHaRyNx 
      
Beiträge: 94
win 95, win 2000, win xp, VISTA, Ubuntu 8.04
Delphi 7 PE
|
Verfasst: Di 09.09.08 19:16
nee, denke nicht. das abfragen via IsWorkstationLocked klappt ja an sich, nur wird bei vista anscheinend auch das system gesperrt, wenn diese doofe benutzerkontenmeldung ("Benutzerkontensteuerung: Zur Fortsetzung des Vorgangs ist Ihre Zustimmung erforderlich..." ) kommt...naja, es klappt an sich, nur muss ich jetzt auf eine funktionalität des programms verzichten...aber das geht schon
danke nochmals.
mfg pHaRyNx
|
|
Dezipaitor
      
Beiträge: 220
|
Verfasst: Di 09.09.08 19:26
Nutzt IsWorkstationLocked nur nicht im SYSTEM Kontext! Sonst schaltet es den Desktop um. Richtig wäre es wohl imho, den InputDesktop zu ermitteln und mit dem "default"-Desktop zu vergleichen (müsste man mal ausprobieren). Kommt man schon an den Inputdesktop nicht ran, dann ist der normale Desktop gesperrt.
PS. UAC läuft auf dem Winlogon Destkop. Das ist so gut wie ein gesperrtes SYSTEM.
_________________ Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: blog.delphi-jedi.net = JEDI API LIB & Windows Security Code Library (JWSCL)
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Di 09.09.08 19:56
Dezipaitor hat folgendes geschrieben: | Nutzt IsWorkstationLocked nur nicht im SYSTEM Kontext! Sonst schaltet es den Desktop um. Richtig wäre es wohl imho, den InputDesktop zu ermitteln und mit dem "default"-Desktop zu vergleichen (müsste man mal ausprobieren). Kommt man schon an den Inputdesktop nicht ran, dann ist der normale Desktop gesperrt. |
Der Desktop 'default' ist der Standard-Desktop, auf dem man Arbeitet. OK, wenn man sich mit CreateDesktop noch paar andre anlegt gerät die Funktion aus'm Tritt, das tut sie aber immer, wenn sie das Recht zum Wechseln des Desktops hat.
Schreib sie dann doch halt mal richtig, mit Abfrage des Input-Desktops und allen weiteren Vergleichen ...
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Dezipaitor
      
Beiträge: 220
|
Verfasst: Di 09.09.08 23:00
In PseudoCode aus SuRun. (thx Kay)
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| function IsLocked : boolean; var Desk : HDESK; Name : Array[0..4095] of AnsiChar; len : Cardinal; begin result := true; Desk := OpenInputDesktop(0, false, DESKTOP_SWITCHDESKTOP); if Desk = 0 then exit;
len := sizeof(Name); if not GetUserObjectInformationA(Desk, UOI_NAME, @Name, len, len) then exit;
if (CompareText(Name,'Winlogon') = 0) or (CompareText(Name,'Disconnect') = 0) or (CompareText(Name,'Screen-Saver') = 0) then result := true else result := false; end; |
Geupdated und bei mir funkz es als normaler Benutzer, Administrator und SYSTEM. Nur mit dem Screensaver muss noch ein Test gemacht werden.
_________________ Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: blog.delphi-jedi.net = JEDI API LIB & Windows Security Code Library (JWSCL)
|
|
|