Autor Beitrag
tortom1000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 175

Win XP, Win Server 2003 - 2012, Win 7
Delphi 7
BeitragVerfasst: Do 15.11.07 10:59 
Hallo,
ich habe ein kleines Programm in Arbeit, welches in der Systray
"abgelegt" ist und von dort aus via Timer-Routine zyklisch
prüft, wo sich der Mauszeiger befindet.
-> if ((Mouse.CursorPos.x=0) and (Mouse.CursorPos.y=0)) then .....
Drücke ich nun STRG,Alt und Entf, um in den Taskmanager zu
gehen, hängt sich das Programm auf.
Fehlermeldung:
1. Systemfehler Code 5 Zugriff verweigert
2. Systemfehler Code 1813 Der angegebene Resourcentyp wurde nicht
in der Image-Datei gefunden.
3. Ein Aufruf einer Betreibsystemsfunktion ist fehlgeschlagen.
Zur Verifikation des Fehler habe ich eine Mini-Anwendung gebaut.
Nur ein Formular mit einem Button für 'ne Showmessage und ein
Timer mit der "if ((Mouse.CursorPos.x=0) and (Mouse.CursorPos.y=0)) then"
Anweisung, die dann den Fehler auslöst.

Wodurch kommt der Fehler? Kann man den elegant lösen oder besser die
Anweisung mit try.... ausführen?

Fragen über Fragen...

Vieleicht kann mir ja jemand auf die Sprünge helfen.
Gruß
Tortom
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Do 15.11.07 14:02 
Der Fehler entsteht dadurch, dass die Arbeitsstation gesperrt wird. Da Windows teilweise wohl auch mit einer Art Terminal Session arbeitet (die dann geschlossen/gesperrt ist) darfst du nicht mehr auf den Mauszeiger zugreifen. Unter XP könntest du dich ja als jemand anderes anmelden und das Programm von XY hat nichts bei Benutzer YZ zu suchen. Somit ist das Verhalten vollkommen legal und eigentlich auch gut so.

Es gibt einen sauberen Weg zu überprüfen ob du darauf zugreifen darfst. Allerdings muss man dafür diverse Sicherheitsstrukturen von Windows abfragen etc. Das ist schon ewig her deswegen weiß ich davon so gut wie nichts mehr. Wesentlich schneller kannst du es lösen in dem eben einfach den Fehler ignorierst.

Oder wenn es anders geht wäre es imho das Eleganteste wenn man die Position gar nicht erst zyklisch überprüfen muss. Es gibt ja auch so etwas wie Hooks und die kann man auch global setzen. Das aber nur so als Anregung. Ich weiß ja nicht was du genau machen willst.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.