Interakcja między programami

0

Załóżmy, że mamy 2 programy, na jednym tylko button, na drugim pole edit. Czy da się zrobić tak, aby wciskając button w pierwszym programie pojawiał się określony tekst w polu edit w programie drugim?
Pomijając oczywiście ruszanie kursorem i używanie ctrl+v.

0

Rozumiem, że musiałbym zastosować funkcję Sendmessage w pierwszym programie oraz zmienić kod drugiego programu na okoliczność przyjęcia wiadomości z tekstem do wpisania w pole edit, tyle że zmienić kodu drugiego programu nie mogę.

0

wystarczy jeden kod który zakłada hoka na drugie okno programu i go zmienia to jest tu opisane Rozdział 5

0

FindWindow + EnumChildWindows + WM_SETTEXT

0

Ja to bym wysłał komunikat. Najprościej.

0

Do komunikacji między programami można wykorzystać mechanizm DDE, bo do tego został on stworzony, ale czasem prościej faktycznie wysłać komunikaty i je odebrać. Można to zrobić tak jak pokazałem w kodzie dołączonym do tego posta (pan t.r. niech nie pobiera żeby mi nie sapał na pw później, że dołaczyłem exeki - kod nie dla ciebie - sio! :P). Tam wykrywa konkretne okno po nazwie klasy, ale można posłać komunikat do wszystkich okien podając zamiast uchwytu stałą HWND_BROADCAST, a do przesyłania stringów lub bardziej skompilkowanych struktur służy komunikat WM_COPYDATA. Więcej zrozumiesz analizując kod programów, które dołączyłem.

EDIT: a wątek uznałem za dotyczący raczej podstaw więc przenoszę do Newbie, a madmike będzie tymrazem ze mnie dumny, bo nie zapomniałem otagować tematu ;)

0

Odświeżam, bo teraz doczytałem to co Misiekd napisał w komentarzu, cytując pytającego, że nie ma dostępu do drugiego programu, ale można spróbować się do niego "dostać się" na przykład przez injekcje dllki w jego proces, a później można mieć dowolną kontrolę nad kontrolkami tego procesu. Dołączam do przeanalizowania kolejny kod programu, który steruje kalkulatorem z pod XP oraz Windows 7 - 64 bit, oba dołaczone. Jak wiadomo kodu źródlowego Kalkolutorów Windowsowych nie posiadam, a mimo to rejestruje zmiany w ich uruchomionych oknach i mogę nimi sterować. Całośc napisana w WinAPI pod Delphi 7 Personal z użyciem tych modułów: http://kolmck.net/sys/SysDcu7.zip zoptymalizowanych pod kątem uzyskania jeszcze mniejszego exeka. Poleciłmi je właśnie Misiekd. Mam nadzieję, że kod coś Tobie wyjaśni. Co do okienka postępu pokazującego się na około sekundę to w przypadku nowego Kalkulatora dla Windows 7 jest to konieczne, bo inaczej program się wykrzeczy, bo trwa animacja okna głownego Kalkulatora. Poza tym injekcja ma jedną wadę - często jak w przypadku Kalkulatora dla Windows 7 lub innego procesu konieczna może być injekcja w momencie uruchomienia, a nie kiedy proces już działa. Ale to zależy pewnie od programów i od użytej metody, ja skorzystałem z modułu afxcodehook napisanego przez niejakiego Apexa. Chce Ci sie pokombinowac trochę samodzielnie to poszukaj innych rozwiązań. Ja to zrobiłem, w taki sposób, jak widać. Najważniejsze, że jakoś działa. I przede wszystkim wstrzyknięcie się w proces pozwala nam reagować na funkcje obsługi komunikatów kontrolek, co nie było by możłiwe przez zwykłe SendMessage dla obcego procesu, a co nawet niektóre antywirusy jak Kaspersky Anti Virus słusznie odnotowują jako działanie oprogramowania typu malware, bo z MSDN wiadomo, że ustawianie WNDPROC może nastąpić tylko dla kontrolek danego procesu przez sam proces, a dzięki injeckji dllki w dany proces taką możliwośc uzyskujemy stając się jakby częścią procesu.

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