Kennst du dich mit Zeigern aus?
Geht so
Ist fast genauso, wie mit Handles (HDESK). Du vergleichst Speicheraddressen, um zu prüfen, ob der Inhalt derselbe ist.
Delphi-Quellcode:
var P1, P2 : PINTEGER;
begin
..
P1^ := 1234;
P2^ := 1234;
if P1 = P2 then OK;
Das Beispiel verstehe ich nicht so recht. Korrigier' mich wenn ich mich täusche aber ein
Handle ist doch kein Zeiger auf irgendetwas sondern eher eine Id für Windows um ein Objekt zu identifizieren. Also einfach eine Ganzzahl. Da kann ich doch nichts dereferenzieren?!
Die Handles zu vergleichen habe ich ja schon in meinem Beispiel bei der Threaderöffnung versucht.
Result := hProcDesktop = hInputDesktop;
Ich habe da mal ein Update:
OpenInputDesktop funktioniert beim Login tatsächlich. In diesen Fall liefert mir die Methode 0 zurück.
Wenn allerdings der Bildschirmschoner (mit Kennwortabfrage beim der Reaktivierung!) gestartet wird gibt die Funktion weiterhin einen Wert <> 0 zurück. Mouse.CursorPos liefert aber trotzdem eine
Exception.
Nein, tut sie nicht.
Such mal die Funktion in der
MSDN, da steht:
Zitat:
If the function fails, the return value is NULL (0). To get extended error information, call GetLastError.
Ich will nicht bestreiten das das dort steht aber ich habe es ausprobiert und während der Bildschirmschoner läuft schlägt die Funktion nicht fehl und es wird ein Wert <> 0 zurückgegeben. Erst wenn ich die Mouse bewege und somit auf den Anmeldeschirm lande gibt die Funktion 0 zurück.
Ich habe das getestet indem ich in meinem Programm einfach alle 5 Sek. die Funktion und die Cursorposition abgefragt und das Ergebnis in eine Logdatei geschrieben habe. Dann habe ich gewartet bis der Bildschirmschoner startet. Während der Bildschirmschoner läuft bekomme ich - wie oben beschrieben - einen Wert <> 0 zurück. Die Abfrage der CursorPosition liefert jedoch schon eine
Exception.