[#1] jak programowo zasymulować wciśnięcie LMB/RMB
Chciałbym zaprogramować prostego robota. Chodzi mi o to aby wskaźnik myszy pozostawiony w należnym miejscu klikał za mnie automatycznie z góry ustaloną ilość razy.
Przypuszczam, że pod AmigaOS 3.1 wystarczyła by krótka procedurka w asmie jadąca po rejestrze Pauli.
Jak ugryźć ten temat systemowo (pod MorphOS) ?

[#2] Re: jak programowo zasymulować wciśnięcie LMB/RMB

@ede, post #1

Wysylanie zdarzen (struct InputEvent) do input.device. InputEvent powinien zawierac na przyklad (LMB wcisniety):

ie_Class = IECLASS_RAWMOUSE,
ie_Code = IECODE_LBUTTON,
ie_Qualifier = IEQUALIFIER_RELATIVEMOUSE | (PeekQualifier() & ~(IEQUALIFIER_MIDBUTTON | IEQUALIFIER_RBUTTON | IEQUALIFIER_LEFTBUTTON)),
ie_SubClass = 0,
ie_X = 0,
ie_Y = 0

W struct IORequest:

io_Data = adres struct InputEvent
io_Length = sizeof(struct InputEvent)
io_Command =IND_ADDEVENT

wystarczy przykladu?



Ostatnia modyfikacja: 01.11.2010 15:01:01
[#3] Re: jak programowo zasymulować wciśnięcie LMB/RMB

@szuler, post #2

Ja proponuję funkcję AddIEvents z commodities.library.
Mniej pracy przy wysyłaniu InputEvent.
[#4] Re: jak programowo zasymulować wciśnięcie LMB/RMB

@qwerty40001, post #3

Dziękuję Wam za szybką odpowiedź :P.
Z radością i ku mojemu zdziwieniu muszę stwierdzić, że przykładu wystarczyło ale dopiero dzisiaj ;) - musiałem trochę pokminić tu i ówdzie. Skleciłem programik w C (mój pierwszy pod OS) i klika ! . Na razie tylko wciska LMB. W tej chwili nie wiem jeszcze co zrobić żeby również odpusczał LMB i klikał z automatu w różnych miejscach ekranu ale bedę kombinować dalej (podpowiedzi mile widziane).

W każdym razie wpadłem póki jeszcze godzina w miarę przyzwoita aby zapytać z jakiej biblioteki i jaka funkcja może mi posłużyć do odczekania ustalonego okresu czasu (np. w sekundach).


PS. Fajnie byłoby gdyby taki robot znalazł się w MagicAction dla MorphOS, aby można było sobie zaprogramować akcje poprzez interfejs graficzny.



Ostatnia modyfikacja: 02.11.2010 21:07:23
[#5] Re: jak programowo zasymulować wciśnięcie LMB/RMB

@ede, post #4

Z radością i ku mojemu zdziwieniu muszę stwierdzić, że przykładu wystarczyło ale dopiero dzisiaj - musiałem trochę pokminić tu i ówdzie. Skleciłem programik w C (mój pierwszy pod OS) i klika !


Brawo!

Na razie tylko wciska LMB. W tej chwili nie wiem jeszcze co zrobić żeby również odpusczał LMB


zamienic

ie_Code = IECODE_LBUTTON;

na

ie_Code = IECODE_LBUTTON | IECODE_UP_PREFIX;

klikał z automatu w różnych miejscach ekranu


Poruszasz myszka tak samo jak wciskasz przyciski: ie_Code = IECODE_NOBUTTON, a ie_X i ie_Y zawieraja przesuniecia dX i dY wskaznika myszy. Mozesz tez przesuwac wskaznik myszy od razu w dowolne miejsce (nie ustawiajac bitu IEQUALIFIER_RELATIVEMOUSE), mozesz emulowac tablet (ie_SubClass = IESUBCLASS_NEWTABLET), do wyboru, do koloru.

W każdym razie wpadłem póki jeszcze godzina w miarę przyzwoita aby zapytać z jakiej biblioteki i jaka funkcja może mi posłużyć do odczekania ustalonego okresu czasu (np. w sekundach).


uzyc timer.device (komenda TR_ADDREQUEST)

[#6] Re: jak programowo zasymulować wciśnięcie LMB/RMB

@szuler, post #5

eee, a nie prosciej Delay()? jednostka to 1/50 sekundy

[#7] Re: jak programowo zasymulować wciśnięcie LMB/RMB

@kiero, post #6

prosciej szeroki uśmiech

[#8] Re: jak programowo zasymulować wciśnięcie LMB/RMB

@szuler, post #7

kiero: Dzięki.

szuler: Z braku czasu obsługę devices zostawiam sobie na później, aczkolwiek
dzięki podpowiedziom stosowny przykład dość szybko udało mi się znaleźć ;).

Programik na chwilę obecną robi właściwie to co chciałem, lecz mam problem ze zsynchronizowaniem go z aplikacją (aplikacja losowo raz na jakiś czas mieli dłużej), która jest przez niego obsługiwana. W przypadku odpowiednio dobranego Delay() jest dobrze, ale gdyby było synchro czasy Delay() mógłbym znacznie skrócić.

Jak ugryźć synchronizację ? Wiem, że są sygnały, komunikaty, porty, semafory . W Scout widzę tc_State, tc_SigWait
ale ni w ząb nie wiem jak ugryźć temat.

PS. Jeszcze dla portu obsługiwanej aplikacji w Scout widzę mp_SigBit 27.



Ostatnia modyfikacja: 08.11.2010 15:21:39
[#9] Re: jak programowo zasymulować wciśnięcie LMB/RMB

@ede, post #8

Na razie wykombinowałem, że mój programik powinien odczytywać tc_State obsługiwanej aplikacji i jeśli jest WAITING to uruchamiać procedurę.
I powinienem dla swojego programu utworzyć Task.
Tylko jak to zrobić i czy w ogóle jest to możliwe ?

:)

Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem