Ĺadny brzuch
Witam,
Pisze program do rejestrowania ruchów myszki. Wszystko działa bardzo dobrze dopóki obszarem roboczym są âźnormalneâ programy. Jednak gdy aktywnym oknem staje się gra funkcja GetCursorPos przestaje działać i pokazuje cały czas stałe wartości (403,312). Próbowałem użyć funkcji ScreenToClient, ClientToScreen ale bez skutku.
Przerobiłem program żeby używał hooka na myszkę (wh_mouse_ll, wh_journalrecord) jednak w komunikatach WM_LBUTTONDOWN są te same stałe wartości (403,312). Przy ruchu myszki w niektórych komunikatach WM_MOUSEMOVE są inne wartości ale gdy wolno poruszam kursorem wracają do tych stałych.
Dodam że cały program (z GetCursorPos i z hookiem) działa dla normalnych programów.
Czy jest jakiś inny sposób na pobranie współrzędnych kursora z gry?
wg mnie tego się nie da zrobić. ale może się mylę. wydaje mi się, że pozycja kursora nie we wszystkich grach będzie stała. ale w większości owszem. to prawdopodobnie dlatego, że w grze korzystającej z directx najczęściej ładowany jest kursor, którego właściwości są inne niż tego systemowego. czyli taka "podmiana".
ale powtarzam: jest duże prawdopodobieństwo, że się mylę...
Próbowałeś np.
Memo.Lines.Add('L '+IntToStr(Mouse.CursorPos.X)); Memo.Lines.Add('L '+IntToStr(Mouse.CursorPos.Y));
?
Użytkownik Imi edytował ten post 20 luty 2010, 23:05
Memo.Lines.Add('L '+IntToStr(Mouse.CursorPos.X)); Memo.Lines.Add('L '+IntToStr(Mouse.CursorPos.Y));
Mouse.CursorPos działa tak samo jak GetCursorPos.
Więc tutaj nie pójdzie, z powodu wymienionego mniej wiecej przez @exevol.
O jakie gry chodzi? Każde, czy np. tylko fpp/tpp?
Właściwie każde... Szczególnie te które korzystają z DirectX, OpenGL :(
PS: Miałem ten sam problem, niestety nie udało mi się go również rozwiązać.
Czytałem, że na jakimś forum udało się jednemu użytkownikowi za pomocą DelphiX
Jeszcze nie udało mi się rozwiązać tego problemu, ale wiem już jak to zrobić. Gry korzystające z DirectX tworzą obiekt do obsługi myszki. Wystarczy założyć hooka na funkcje tworzącą ten obiekt i pozmieniać adresy kilku metod obiektu m.in. GetDeviceState. Więcej informacji tutaj
http://msdn.microsof...28VS.85%29.aspx
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Pisze program do rejestrowania ruchów myszki. Wszystko działa bardzo dobrze dopóki obszarem roboczym są âźnormalneâ programy. Jednak gdy aktywnym oknem staje się gra funkcja GetCursorPos przestaje działać i pokazuje cały czas stałe wartości (403,312). Próbowałem użyć funkcji ScreenToClient, ClientToScreen ale bez skutku.
Przerobiłem program żeby używał hooka na myszkę (wh_mouse_ll, wh_journalrecord) jednak w komunikatach WM_LBUTTONDOWN są te same stałe wartości (403,312). Przy ruchu myszki w niektórych komunikatach WM_MOUSEMOVE są inne wartości ale gdy wolno poruszam kursorem wracają do tych stałych.
Dodam że cały program (z GetCursorPos i z hookiem) działa dla normalnych programów.
Czy jest jakiś inny sposób na pobranie współrzędnych kursora z gry?
wg mnie tego się nie da zrobić. ale może się mylę. wydaje mi się, że pozycja kursora nie we wszystkich grach będzie stała. ale w większości owszem. to prawdopodobnie dlatego, że w grze korzystającej z directx najczęściej ładowany jest kursor, którego właściwości są inne niż tego systemowego. czyli taka "podmiana".
ale powtarzam: jest duże prawdopodobieństwo, że się mylę...
Próbowałeś np.
Memo.Lines.Add('L '+IntToStr(Mouse.CursorPos.X)); Memo.Lines.Add('L '+IntToStr(Mouse.CursorPos.Y));
?
Użytkownik Imi edytował ten post 20 luty 2010, 23:05
Memo.Lines.Add('L '+IntToStr(Mouse.CursorPos.X)); Memo.Lines.Add('L '+IntToStr(Mouse.CursorPos.Y));
Mouse.CursorPos działa tak samo jak GetCursorPos.
Więc tutaj nie pójdzie, z powodu wymienionego mniej wiecej przez @exevol.
O jakie gry chodzi? Każde, czy np. tylko fpp/tpp?
Właściwie każde... Szczególnie te które korzystają z DirectX, OpenGL :(
PS: Miałem ten sam problem, niestety nie udało mi się go również rozwiązać.
Czytałem, że na jakimś forum udało się jednemu użytkownikowi za pomocą DelphiX
Jeszcze nie udało mi się rozwiązać tego problemu, ale wiem już jak to zrobić. Gry korzystające z DirectX tworzą obiekt do obsługi myszki. Wystarczy założyć hooka na funkcje tworzącą ten obiekt i pozmieniać adresy kilku metod obiektu m.in. GetDeviceState. Więcej informacji tutaj
http://msdn.microsof...28VS.85%29.aspx