jak w lParam wsadzić współrzędne X i Y

dział ogólny

jak w lParam wsadzić współrzędne X i Y

Nowy postprzez zeno32167 » niedziela, 31 sierpnia 2008, 20:18

SendMessage(h,WM_LBUTTONDOWN,0,lParam)
jak w lParam wsadzić X i Y kliknięcia myszką?
Avatar użytkownika
zeno32167
Bladawiec
Bladawiec
 
Posty: 23
Dołączył(a): sobota, 30 sierpnia 2008, 17:15
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: jak w lParam wsadzić współrzędne X i Y

Nowy postprzez Cyfrowy Baron » niedziela, 31 sierpnia 2008, 21:02

Spróbuj tak:

Kod: Zaznacz cały
  int X = 100, Y = 100;
  SendMessage(h,WM_LBUTTONDOWN,0, MAKELPARAM(X, Y));


lub tak (mało prawdopodobne by zadziałało:

Kod: Zaznacz cały
  POINT p;
  p.X = 100;
  p.Y = 100;
  SendMessage(h,WM_LBUTTONDOWN,0, p);





MAKELPARAM Macro

--------------------------------------------------------------------------------

The MAKELPARAM macro creates a value for use as an lParam parameter in a message. The macro concatenates the specified values.

Syntax

LPARAM MAKELPARAM(
WORD wLow,
WORD wHigh
);

Parameters

wLow
Specifies the low-order word of the new value.
wHigh
Specifies the high-order word of the new value.
Return Value

The return value is an LPARAM value.


Macro Information

Header Declared in Winuser.h, include Windows.h
Minimum operating systems Windows 95, Windows NT 3.1


Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: jak w lParam wsadzić współrzędne X i Y

Nowy postprzez zeno32167 » poniedziaÅ‚ek, 1 wrzeÅ›nia 2008, 09:37

dziękuję bardzo, działa ok,
jeszcze jedno pytanie
Kod: Zaznacz cały
void __fastcall TForm6::Button1Click(TObject *Sender)
{
SendMessage(HWND,WM_CHAR,VK_RETURN,0);

}



komunikat jest wysyłany tylko przez 3 kliknięcia buttonem, potem klikam na przycisk i komunikat jakby nie docierał, może robię gdzieś błąd?
Avatar użytkownika
zeno32167
Bladawiec
Bladawiec
 
Posty: 23
Dołączył(a): sobota, 30 sierpnia 2008, 17:15
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: jak w lParam wsadzić współrzędne X i Y

Nowy postprzez Cyfrowy Baron » poniedziaÅ‚ek, 1 wrzeÅ›nia 2008, 13:32

Nie robisz błędu, inaczej nie można tego wysłać. Być może obiekt do którego wysyłasz komunikat przestaje z jakiegoś powodu na niego reagować, być może zbyt często klikasz na raz, w zbyt krótkich odstępach czasu.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: jak w lParam wsadzić współrzędne X i Y

Nowy postprzez Koziol » piÄ…tek, 26 wrzeÅ›nia 2008, 16:01

odświeże nieco temat czy istnieje możliwość kliknięcia przycisku (poprzez wysłanie wiadomości) na oknie które nie jest aktywne, a wręcz jest przykryte przez inne okno?
Avatar użytkownika
Koziol
Intelektryk
Intelektryk
 
Posty: 144
Dołączył(a): niedziela, 13 lipca 2008, 17:36
PodziÄ™kowaÅ‚ : 8
OtrzymaÅ‚ podziÄ™kowaÅ„: 2
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
    NieznanyNieznana

Re: jak w lParam wsadzić współrzędne X i Y

Nowy postprzez Cyfrowy Baron » piÄ…tek, 26 wrzeÅ›nia 2008, 16:06

Oczywiście że tak, przecież wystarczy pobrać uchwyt do tegoż okna:

SendMessage(HWND,WM_CHAR,VK_RETURN,0);

gdzie HWND to uchwyt do okna, do którego chcemy wysłać komunikat.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: jak w lParam wsadzić współrzędne X i Y

Nowy postprzez Koziol » piÄ…tek, 26 wrzeÅ›nia 2008, 18:12

aha.
A jeżeli mam np. 2 okna o tej samej nazwie ? jest sposob zeby je rozróżnić?
Bo ztego co widze HWND pobiera siÄ™ przez podanie nazwy okna.


i druga sprawa wspolrzędne x i y są względem ekranu czy okna programu ?
Avatar użytkownika
Koziol
Intelektryk
Intelektryk
 
Posty: 144
Dołączył(a): niedziela, 13 lipca 2008, 17:36
PodziÄ™kowaÅ‚ : 8
OtrzymaÅ‚ podziÄ™kowaÅ„: 2
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
    NieznanyNieznana

Re: jak w lParam wsadzić współrzędne X i Y

Nowy postprzez Cyfrowy Baron » piÄ…tek, 26 wrzeÅ›nia 2008, 18:26

Zalecam przeczytanie porady w serwisie Cyfrowy Baron w dziale: teoria -> sterowanie obcym programem poprzez wysyłanie komunikatów.

Uchwyt do okna pobierasz za pomocą funkcji FindWindow gdzie jako pierwszy argumnet podajesz nazwę klasy okna, jeżeli jej nie znasz podajesz wartość NULL, jako drugi argument podajesz nazwę okna, jeżeli jej nie znasz podajesz wartość NULL. Musisz jednak podać jeden z dwóch argumentów, nie może być dwa razy NULL.

Tak więc jeżeli masz dwa okna z tego samego programu, ale o różnych nazwach to w ten sposób możesz je rozróżnić. Jeżeli jednak okna mają tą samą nazwę okna i taką samą nazwę klasy no to funkcje FindWindows i SendMessage ich nie rozróżnią. Różnią się oczywiście tym, że mają inny PID procesu. Trzrba by tutaj jednak pokombinować tak, żeby pobrać uchwyt do konkretnego okna w oparciu o numer jego procesu. Jednakże jak sądzę w Twoim przypadku mamy do czynienia z jakimś programem np. przeglądarką, która tworzy sobie własne okna, więc nie mają one własnych nazw klasy, lecz dziedziczą po klasie przeglądarki, no i własnego PID procesu tez nie mają, gdyż nie są odrębnymi procesami.

Wszystko da się zrobić, ale ja nigdy aż tak się w to nie zagłębiałem, wiec nie pomogę, ale być może ktoś już rozwiązał ten problem.


Współrzędne XY są względem pulpitu.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: jak w lParam wsadzić współrzędne X i Y

Nowy postprzez Koziol » sobota, 27 wrzeÅ›nia 2008, 14:59

Są to okna gry (Lineage II) próbuje dla kumpla zrobić tak zwanego bot'a który będzie klikał odpowiednie miejsca gdy on w drugim oknie gry będzie grał ;)

Zastanawiałem się czy rozwiązaniem by nie było wyliczenie wszystkich otwartych okien a nastepnie wrzucenie ich do ListBox i po wybraniu programu (nie wiem czy tak się da) wysłanie jakiejś komendy aby na pasku wybrane okno zaczęło migać na pomarańczowo (nie wiem czy w miarę jasno wyjaśniłem mój pomysł i czy jest to możliwe).
Avatar użytkownika
Koziol
Intelektryk
Intelektryk
 
Posty: 144
Dołączył(a): niedziela, 13 lipca 2008, 17:36
PodziÄ™kowaÅ‚ : 8
OtrzymaÅ‚ podziÄ™kowaÅ„: 2
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
    NieznanyNieznana

Re: jak w lParam wsadzić współrzędne X i Y

Nowy postprzez Cyfrowy Baron » sobota, 27 wrzeÅ›nia 2008, 16:07

Wyliczenie nic tutaj nie da skoro obydwa okna mają tą samą nazwę klasy, takie same nazwy okien i ten sam PID procesu, problem z brakiem rozróżnienia.
Pewnym rozwiązaniem może być wskazanie kursorem myszy o które okno nam chodzi, czyli pobranie uchwytu do okna wskazywanego przez kursor. Taka porada znalazła się w ostatniej aktualizacji serwisu Cyfrowy Baron -> Pobieranie tytułu i uchwytu do okna lub obiektu w oknie wskazywanego przez kursor.
Trzeba by oczywiście nieco przerobić tą poradę, tak by uchwyt został pobrany dopiero po kliknięciu w okno, czyli program powinien przechwytywać haki systemowe.
Takie przechwytywanie haków systemowych zostało zrealizowane w poradzie: API -> Keyloger, czyli przechwytywanie wciśnięcia klawiszy we wszystkich programach.
Po przerobieniu i połączeniu tych dwóch porad, uzyskasz program, który będzie pobierał uchwyty do "klikniętych okien", pozostanie jeszcze problem odsiewania tego co zbędne od tego co potrzebne, ale to można zrealizować w ten sposób, ze sprawdzasz czy tytuł klikniętego okna pasuje do schematu i jeżeli tak, to pobierasz do niego uchwyt.
Nie da się tego zrobić w kilka minut, trzeba posiedzieć nad tym kilka godzin, dlatego tylko wskazuję możliwy sposób realizacji tego zadania, gdyż nie chce mi się siedzieć kilku godzin nad kodem i podać gotowe rozwiązanie, gdyż mi nie jest to do niczego potrzebne.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: jak w lParam wsadzić współrzędne X i Y

Nowy postprzez Koziol » sobota, 27 wrzeÅ›nia 2008, 22:18

Zrozumiała sprawa ;)
Poprostu jak napotkam na jakąś trudność, której na google nie można znaleźć to się odezwę dzięki za podpowiedź ;)
Avatar użytkownika
Koziol
Intelektryk
Intelektryk
 
Posty: 144
Dołączył(a): niedziela, 13 lipca 2008, 17:36
PodziÄ™kowaÅ‚ : 8
OtrzymaÅ‚ podziÄ™kowaÅ„: 2
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
    NieznanyNieznana

Re: jak w lParam wsadzić współrzędne X i Y

Nowy postprzez zeno32167 » Å›roda, 8 października 2008, 22:31

Koziol napisał(a):Są to okna gry (Lineage II) próbuje dla kumpla zrobić tak zwanego bot'a który będzie klikał odpowiednie miejsca gdy on w drugim oknie gry będzie grał ;)

...


no widzisz mi też to było potrzebne do sterowania tylko że Silkroad Online. Ja musialem rozróżnić 9 okien które byłby o tej samej nazwie, i znalazłem do tego programik który działa tylko na silkroadach że zmienia ich nazwy okna. W ogóle to musiałbym nauczyć się czytać pamięci ram, to wtedy łatwiej byłoby je rozróżnić na podstawie nicku postaci która jest odpalona w danym oknie
Avatar użytkownika
zeno32167
Bladawiec
Bladawiec
 
Posty: 23
Dołączył(a): sobota, 30 sierpnia 2008, 17:15
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana


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 7 gości