Dystans myszy - błąd podczas przelogowania

Dystans myszy - błąd podczas przelogowania
LE
  • Rejestracja:ponad 16 lat
  • Ostatnio:prawie 4 lata
  • Postów:232
0

Witajcie :)

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

Kopiuj
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!

KA
  • Rejestracja:prawie 20 lat
  • Ostatnio:2 minuty
  • Lokalizacja:Gorlice
2

Zamiast Mouse.CursorPos użyj:

Kopiuj
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
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:32 minuty
  • Lokalizacja:Tuchów
  • Postów:12171
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).


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: flowCRANE
LE
  • Rejestracja:ponad 16 lat
  • Ostatnio:prawie 4 lata
  • Postów:232
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.