ďťż

Ładny brzuch

Chciałbym napisać taki program. Po kliknieciu na przycisk wybierz okno należy kliknąć w wybrane okno a program miałby pobrać jego Handle (dobrze mówie?). Następnie po kliknięciu w przycisk Nadaj wiadomość miałby wysłać do niego wiadomość. Powiedzmy że wskazane okno to okno rozmowy z Gadu-Gadu, a program miałby wysłać do niego słowo Siemka. Jak takie coś zrobić? Prosiłbym krok po kroku

//Update//
Z tym pobraniem handlu to może inaczej zrobie, ale teraz chciałbym się skupić nad tym jak przesłać do niego te słowo Siemka. Chciałbym aby nie trzebabyło tego enterem popychać. Niestety wogóle niewiem jak to zrobić.

Proszę o pomoc

Oczywiście w temacie chodzi o wersję 2005 :)
Użytkownik ::: edytował ten post 26 wrzesień 2006, 18:17


Do programu słowa siemka to raczej nie wyślesz, tak mi się wydaje. Ale możesz je wysłać do kontrolki i to chyba by było rozsądniej, no bo jak program ma kilka pól do edycji, to skąd miałby wiedzieć do której?
Otóż zakładająć, że masz już handle okna programu (a to ponoc wiesz jak zrobić) to musiałbyś jeszcze mieć handle konkretnej kontrolki. I wtedy do tej kontrolki możesz wysłać komunikat WM_SETTEXT (o ile się nie mylę, ale na pewno jakoś tak).
Jest jeszcze inny sposób, możesz tekst przesyłać przez schowek. Wtedy też musisz mieć handle kontrolki, żeby go wkleić za pomocą WM_PASTE, ale możesz też zrobić emulację wciśnięcia ctrl-v, a wtedy system sam znajdzie aktywne okno i odpowiednią kontrolkę i wstawi tekst.


Chciałbym napisać taki program. Po kliknieciu na przycisk wybierz okno należy kliknąć w wybrane okno a program miałby pobrać jego Handle (dobrze mówie?). Następnie po kliknięciu w przycisk Nadaj wiadomość miałby wysłać do niego wiadomość. Powiedzmy że wskazane okno to okno rozmowy z Gadu-Gadu, a program miałby wysłać do niego słowo Siemka. Jak takie coś zrobić? Prosiłbym krok po kroku

//Update//
Z tym pobraniem handlu to może inaczej zrobie, ale teraz chciałbym się skupić nad tym jak przesłać do niego te słowo Siemka. Chciałbym aby nie trzebabyło tego enterem popychać. Niestety wogóle niewiem jak to zrobić.

Proszę o pomoc

Można przesłać co się chce. Najłatwiej przy pomocy Indy http://4programmers....INDY-w-praktyce


Można przesłać co się chce. Najłatwiej przy pomocy Indy http://4programmers....INDY-w-praktyce
co ma wspolnego Indy i komunikaty windows? :|



Tak jak zasugerował chodnik, wysyłaj WM_SETTEXT do danego okna; w obrębie jednej aplikacji prościej jest wywołać SetWindowText(), ale jeśli chcesz zmienić tekst w oknie innej aplikacji, to musisz posłużyć się tym sposobem.

Może takie dwa przydatne linki:
http://msdn.microsof...twindowtext.asp
http://msdn.microsof.../wm_settext.asp

Zaznaczam od razu, że taka zmiana tekstu okna obejmuje pasek tytułowy na oknach 'zwykłych' oraz jakąś specyficzną, widoczną zawartość w przypakdu kontrolek. Innego tekstu w oknie nie ruszysz (na przykład rysowanego za pomocą GDI w obszarze roboczym).

Pozdrawiam,
TeMPOraL.


Do programu słowa siemka to raczej nie wyślesz, tak mi się wydaje. Ale możesz je wysłać do kontrolki i to chyba by było rozsądniej, no bo jak program ma kilka pól do edycji, to skąd miałby wiedzieć do której?

W tym przypadku posiada on tylko jedno pole edycji, bo gg było przykładowo, a chodzi mi o inny program, np. pola edycji czatu które jest w internet explorerze.


musiałbyś jeszcze mieć handle konkretnej kontrolki. I wtedy do tej kontrolki możesz wysłać komunikat WM_SETTEXT (o ile się nie mylę, ale na pewno jakoś tak

Do znalezienia handle kontrolki użyłem
h:= FindWindowEx(h, 0, 'Edit', 0);
Gdzie h to handl okna.


Jest jeszcze inny sposób, możesz tekst przesyłać przez schowek. Wtedy też musisz mieć handle kontrolki, żeby go wkleić za pomocą WM_PASTE, ale możesz też zrobić emulację wciśnięcia ctrl-v, a wtedy system sam znajdzie aktywne okno i odpowiednią kontrolkę i wstawi tekst.

//Update//
Udało mi się wysłać już ten tekst :)

SendMessage(H, WM_SETTEXT, 0, Longint(PChar('Nowy tekst\n')));
Ale mam dwa problemy.
1. Jak zrobić aby coś poszło o linijke niżej ??
2. Odnosnie pierwszego w sumie, jak zrobic zeby tekstu nie trzeba bylo popychac?
3. Jak namierzyć pole tekstowe jeśli jest ono częścią kontrolki Active X?
Użytkownik ::: edytował ten post 26 wrzesień 2006, 18:34
Akurat z czatem, to może być problem. Ten czat, który ja znam nie obsługuje zdarzenia wciśnięcia ctrl-v i nie pozwala nic wkleić w ten sposób. Ponadto jest napisany jako applet javy i jest wykonywany przez przeglądarkę. Ogólnie rzecz biorąc nie mam pomysłu jak się do tego dobrać. Co innego z GG, który jest na platformie Windows, to co napisałem wyżej dotyczy tylko takich programów. Więc na konkrety dotyczące wklejania do okna czata z mojej strony nie licz.
A do okna Windowsa, to np. tak:klik klik
//Update//
1. Dać na początku tekstu '\nNowy tekst\n' albo przestawić karetkę w okienku funkcją SetCaretPos.
2. Ale o co chodzi?
Użytkownik chodnik edytował ten post 26 wrzesień 2006, 18:37
No żeby sam przechodził do nowej lini, dzięki temu wiadomość sama się wyśle. Tutaj myślałem o czacie z gier online :) www.gryonline.wp.pl jak sie np w bilard wejdzie tam jest na dole taki maly czat pokoju, bo chcialem napisac program do turnieji który by wysylal wyniki na ten wlasnie czat, wszystko bylo pieknie do czasu gdy zorientowalem sie ze nie moge namierzyc pola pisania moim kodem :(

Można przez funkcję keybd_event z VK_RETURN. Może to mało eleganckie, ale zadziała, jeżeli okno jest aktywne.

No być może, ale okno jak może być aktywne? Przecież po włączeniu mojego programu który ma wysyłać do okna dane, to program jest jako aktywny. Tamten natomiast w tle jest :(

Racja, więc tak się nie da. Powiem ci jak ja to rozwiązałem: mój program rejestrował HotKey dla klawiszy ctrl_v. Jeżeli nacisnąłem ctrl-v na oknie programu docelowego (czyli u ciebie tego czata), to wtedy mój program przechwytywał zdarzenie, wykonywał operację wstawienia do schowka, następnie wyrejestrowywał HotKey i robił emulację, że zostało wciśnięte ctrl-v. Tym razem po wyrejestrowaniu HotKeya komunikat trafiał do okna docelowego, ale w schowku już był ten tekst, który powinien. I na tej koncepcji mój program działa już prawie 3 miesiące i parę osób z niego korzysta.

Użyczysz mi kodu tego programu? Może by mi się udało zrobić coś podobnego.

Tzn interesuje mnie tylko te wysyłanie.
Użytkownik ::: edytował ten post 26 wrzesień 2006, 19:08
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •