Dystans myszy - błąd podczas przelogowania

Odpowiedz Nowy wątek
2013-10-06 17:39
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!


repeat
showmessage(<font color="blue">'Szacunek Ludzi Ulicy'</font color=blue>);
until <font color="red"> Nie ma warunku zakończenia </font color = red>

Pozostało 580 znaków

2013-10-06 18:41

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.


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
edytowany 1x, ostatnio: kAzek, 2013-10-06 18:45

Pozostało 580 znaków

2013-10-06 20:25
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).


edytowany 1x, ostatnio: furious programming, 2013-10-06 20:28

Pozostało 580 znaków

2013-10-06 22:10
0

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


repeat
showmessage(<font color="blue">'Szacunek Ludzi Ulicy'</font color=blue>);
until <font color="red"> Nie ma warunku zakończenia </font color = red>

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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