Dystans myszy - błąd podczas przelogowania

0

Witajcie :)

Mam sobie taka funkcję do monitorowania dystansu myszki w systemie, wrzuconą w TIMER:

var
 Q:TPoint;
begin
  Q:=Mouse.CursorPos; // pierwsza linijka 
  Distance:= Distance + Round( sqrt(sqr(P.X-Q.X)+sqr(P.Y-Q.Y)));
  Caption := 'Dystans myszki: ' + inttostr(Distance) + 'px';
  Monitor.P:=Q; 

Wszystko chodzi dobrze, jednak jeżeli użyję WIN + L lub zablokuję system opcją ALT + CTRL + DEL itp to program wyrzuca ogólny wyjątek code 5 error nie wskazując linijki w kodzie. Po analizie okazało się zę winą jest pierwsza linijka. Pobieranie pozycji kursora.
Jako że to musi działać (nie musi zliczać podczas blokady) jednak nie może wywalać błędów.
Wzięcie tego kodu z timera w try..except nie rozwiązuje problemu.

Czy jest jakiś inny sposób by zliczać ruch myszki w całym systemie? Być może system nie udostępnia takich danych kiedy użytkownik jest zablokowany/przelogowany, jest jakaś metoda by to wykryć/sprawdzic?

Pozdrawiam!

2

Zamiast Mouse.CursorPos użyj:

if GetCursorPos(Q) then 
begin
//obliczenia czy co tam chcesz
end;

Ta funkcja WinApi działa tylko gdy użytkownik jest zalogowany i pulpit nie jest zablokowany (być może zwraca błąd tylko gdy włączony jest UAC nie chce mi się sprawdzać) w każdym razie tu normalnie ifem sprawdzasz czy wywołanie funkcji się powiodło i tylko wtedy robisz swoje obliczenia bez żadnego komunikatu błędu.

0

http://www.delphipages.com/forum/showthread.php?t=199502 - dokładnie ten sam problem znaleziony w Google w 10 sekund;

kAzek napisał(a)

być może zwraca błąd tylko gdy włączony jest UAC nie chce mi się sprawdzać

Z tego co można wyczytać w sieci może być problem na nowszych systemach niż WinXP jeśli aplikacja nie jest uruchomiona na prawach administratora; Nie mam niestety jak sprawdzić (mam WinXP); Dodatkowo można skorzystać z funkcji GetLastError by dowiedzieć się dlaczego nie można pobrać pozycji kursora; Więcej informacji jak zwykle na MSDN (z przykładem jak klawiaturą zmieniać pozycję kursora).

0

Super kAzek, działa jak należy, wielkie dzięki :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1