WM_LBUTTONDOWN

0

jak wywołać zdarzenie przyciśnięcia lewego przycisku myszy? nie chodzi mi o wyłapanie go tylko o wywołanie z poziomu programu...
próbowałem poprzez WM_LBUTTONDOWN przypisując to jako wartość do Msg.LParam/HParam a nastepnie wywołując WndProc(Msg); //Msg : TMessage

będę wdzięczny za wszelką pomoc :)

0
Gharlon napisał(a)

jak wywołać zdarzenie przyciśnięcia lewego przycisku myszy? nie chodzi mi o wyłapanie go tylko o wywołanie z poziomu programu...
próbowałem poprzez WM_LBUTTONDOWN przypisując to jako wartość do Msg.LParam/HParam a nastepnie wywołując WndProc(Msg); //Msg : TMessage

będę wdzięczny za wszelką pomoc :)

Jeżeli chcesz to robić komunikatem to tak.

{hWnd to uchwyt (Handle) okna lub kontrolki np . Buttona (które też są oknami tyle że potomnymi (Child))
x, y to współrzędne gdzie ma nastąpić symulacja naciśnięcia lewego przycisku myszy}
SendMessage(hWnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(x, y));
0

Prawie działa... symulacja kliknięcia LPM jest wykonywana jakby połowicznie - Button wygląda na wciśnięty ale funkcja Button.OnClick nie jest wykonywana :/
Ale dzięki za odzew kAzek

Pytanie dodatkowe: Jest możliwość alby kliknięcia myszą były wykonywane poza oknem aplikacji?
Np. Mysz jedzie na pulpit -> wykonuje kliknięcie PPM -> następnie najeżdża na jedno z pól menu kontekstowego -> kliknięcie LPM -> etc.
nie chodzi mi tu o kod czy coordy tylko o samą metodę jaka umożliwia takie operacje :)

0
Gharlon napisał(a)

Prawie działa... symulacja kliknięcia LPM jest wykonywana jakby połowicznie - Button wygląda na wciśnięty ale funkcja Button.OnClick nie jest wykonywana :/
Ale dzięki za odzew kAzek

A jak miała działac skoro tylko wysłałeś komunikat o wciśnięciu myszki. W ten sposob to jedynie wykona sie zdarzenie OnMouseDown.
Jak chcesz OnClick to:

  SendMessage(Handle, WM_COMMAND, MAKEWPARAM(GetDlgCtrlID(Button1.Handle),
      BN_CLICKED), Button1.Handle);

a czy nie mozesz wykonać z kodu Button.OnClick ?

Gharlon napisał(a)

Pytanie dodatkowe: Jest możliwość alby kliknięcia myszą były wykonywane poza oknem aplikacji?
Np. Mysz jedzie na pulpit -> wykonuje kliknięcie PPM -> następnie najeżdża na jedno z pól menu kontekstowego -> kliknięcie LPM -> etc.
nie chodzi mi tu o kod czy coordy tylko o samą metodę jaka umożliwia takie operacje :)

Tak, jednak odrazałbym tu zabawę w wysyłanie komunikatów lepiej użyć: SendInput

0
kAzek napisał(a)
  SendMessage(Handle, WM_COMMAND, MAKEWPARAM(GetDlgCtrlID(Button1.Handle),
      BN_CLICKED), Button1.Handle);

Wszystko ładnie pięknie działa :) Dzięki wielkie

kAzek napisał(a)

a czy nie mozesz wykonać z kodu Button.OnClick ?

Gdyby to było do konkretnego programu to wwyoływałbym właśnie Button.OnClick :) ale ja po prostu staram się poznać zasadę działania i message :) a że nie znalazłem konkretnego wytłumaczenia w helpie i na forum internetowych to zapytałem :)

kAzek napisał(a)

(...) jednak odrazałbym tu zabawę w wysyłanie komunikatów lepiej użyć: SendInput

Już zabieram się za lekturę :)
Poprzez SendInput można obsługiwać jedynie Winde czy wszystkie aktualnie uruchomione aplikacje? Tzn. czy w wypadku kiedy mam uruchomiony jakikolwiek program to czy mogę "kazać" myszy kliknąć np na "X" (WM_CLOSE | WM_QUIT) poprzez podanie coordów przycisku na ekranie?
Dzięki raz jeszcze :)

0
Gharlon napisał(a)

Poprzez SendInput można obsługiwać jedynie Winde czy wszystkie aktualnie uruchomione aplikacje? Tzn. czy w wypadku kiedy mam uruchomiony jakikolwiek program to czy mogę "kazać" myszy kliknąć np na "X" (WM_CLOSE | WM_QUIT) poprzez podanie coordów przycisku na ekranie?
Dzięki raz jeszcze :)

Komunikaty można wysyłac do dowolnych okien tylko oczywiście musisz nać uchwyt okna.

0
kAzek napisał(a)

Komunikaty można wysyłac do dowolnych okien tylko oczywiście musisz nać uchwyt okna.

Czyli wystarczy jeśli aplikacja w trakcie uruchomienia utworzy sobie liste uchwytów aktualnie uruchomionych okien? I do tego update co np. 30 sec?

Pytanie dodatkowe bo już szukam jakieś pół godziny :

  • windows zapamiętuje uchwyt okna. które jest na spodzie? pod jaką nazwą go zapamiętuje?
0
Gharlon napisał(a)

Czyli wystarczy jeśli aplikacja w trakcie uruchomienia utworzy sobie liste uchwytów aktualnie uruchomionych okien? I do tego update co np. 30 sec?

Okno "dostaje" uchwyt w momencie jego utworzenia, wiec to zalerzy co chcesz zrobić.

Gharlon napisał(a)

Pytanie dodatkowe bo już szukam jakieś pół godziny :

  • windows zapamiętuje uchwyt okna. które jest na spodzie? pod jaką nazwą go zapamiętuje?

Niestety tego nie wiem, ciężko o tym coś znaleźć (też było mi to kiedyś do czegos potrzebne). Żadna ze znanych mi funkcji nie zwraca uchwytu tego okna.

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