Autor Beitrag
pHaRyNx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 94

win 95, win 2000, win xp, VISTA, Ubuntu 8.04
Delphi 7 PE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 94

win 95, win 2000, win xp, VISTA, Ubuntu 8.04
Delphi 7 PE
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Mo 08.09.08 17:36 
Keine Minute googeln:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 94

win 95, win 2000, win xp, VISTA, Ubuntu 8.04
Delphi 7 PE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 94

win 95, win 2000, win xp, VISTA, Ubuntu 8.04
Delphi 7 PE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 220



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Di 09.09.08 19:56 
user profile iconDezipaitor 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 220



BeitragVerfasst: Di 09.09.08 23:00 
In PseudoCode aus SuRun. (thx Kay)
ausblenden 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..4095of 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') = 0or
    (CompareText(Name,'Disconnect') = 0or
    (CompareText(Name,'Screen-Saver') = 0then
    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)