Symulacja kliknięcia LPM

dział ogólny

Symulacja kliknięcia LPM

Nowy postprzez simekone » niedziela, 1 listopada 2009, 20:31

Walczę już trochę z tym zadaniem i po lekturze MSDN stwierdziłem, że najwygodniej było by używać PostMessage() w połączeniu z WM_LBUTTONDOWN oraz WM_LBUTTONUP. Niestety nie mogę sprawić aby to działało, niby kompilacja przebiega bez problemu, ale niestety kod nie działa lub nie działa jak powinien. Chciałbym aby klikanie odbywała się poza obszarem okna programu. Wcześniej próbowałem z SetCursorPosition(), ale nie znalazłem funkcji odpowiedzialnej za klikanie, która by ciekawie z tym współgrała. Liczę na waszą pomoc! Poniżej kod, który nie działa:

Kod: Zaznacz cały
PostMessage (HWND_BROADCAST, WM_LBUTTONDOWN, 0, (376, 210));
PostMessage (HWND_BROADCAST, WM_LBUTTONUP, 0, (376, 210));
Avatar użytkownika
simekone
Bladawiec
Bladawiec
 
Posty: 31
Dołączył(a): środa, 25 marca 2009, 13:27
Podziękował : 1
Otrzymał podziękowań: 0
Kompilator: CodeGear C++ Builder 2009
    NieznanyNieznana

Re: Symulacja kliknięcia LPM

Nowy postprzez Cyfrowy Baron » niedziela, 1 listopada 2009, 20:38

To czy programowe kliknięcie zadziała czy nie zależy w dużej mierze od programu w którym chcesz to za-symulować. Z doświadczenia wiem, że w większości przypadków kliknięcie nie zadziała, trzeba raczej wysłać konkretny komunikat, a to już problem bo jak dopasować komunikat.

Ty chyba raczej potrzebujesz czegoś takiego:

Kursor myszki przesuwamy przy użyciu funkcji SetCursorPos. Natomiast symulację naciśnięcia klawisza wykonujemy funkcją mouse_event.

Kod: Zaznacz cały
//przesuwamy kursor do punktu o współrzędnych x=100, y=200
SetCursorPos(100, 200);

//symulujemy kliknięcie lewym przyciskiem
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);

//symulujemy kliknięcie środkowym przyciskiem
mouse_event(MOUSEEVENTF_MIDDLEDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_MIDDLEUP, 0, 0, 0, 0);

//symulujemy kliknięcie prawym przyciskiem
mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4731
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 445
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Symulacja kliknięcia LPM

Nowy postprzez simekone » niedziela, 1 listopada 2009, 20:44

Wielkie dzięki. Pomyśle jeszcze nad przechwytywaniem aplikacji zgodnie z tym co napisałeś Cyfrowy Baron, ale póki co wystarczy podane w temacie rozwiązanie. Musze się przyznać, że z funkcją mouse_event także kombinowałem, ale jak widać przekombinowałem. Próbowałem upchnąć tam gdzieś współrzędne.

Kod: Zaznacz cały
mouse_event(MOUSEEVENTF_LEFTDOWN, 376, 210, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 376, 210, 0, 0);


Tak czy inaczej dziękuję, za szybką odpowiedź!
Avatar użytkownika
simekone
Bladawiec
Bladawiec
 
Posty: 31
Dołączył(a): środa, 25 marca 2009, 13:27
Podziękował : 1
Otrzymał podziękowań: 0
Kompilator: CodeGear C++ Builder 2009
    NieznanyNieznana


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 17 gości

cron