Wysyłanie/SendMessage do kontrolek bez uchwytu

0

Czy da radę wysłać np.

SendMessage(h, WM_LBUTTONDOWN, 0, MakeLParam(111, 111)); //i później LBUTTONUP

do kontrolki, która niby nie ma uchwytu?

Przykładowo w panelu: Vidalia (od TORa), buttony nie mają swoich uchwytów itd (przynajmniej programy tego nie wykrywają akurat tam). W google znalazłem tylko info, że ten progs jest napisany w QT.

Jakieś pomysły? (Nie chcę brać okna programu na wierzch i korzystać z GetWindowRect + ustawiać kursor i klikać i następnie stare okno przywracać, bo ten sposób znam. Po prostu chcę wiedzieć (tylko cele edukacyjne), czy można wysłać komunikat do buttona i tyle. Jeśli to niemożliwe, to wystarczy tylko odpowiedź "nie" (a jak ktoś ma czas, to proszę by wyjaśnił jeszcze, co to QT w dwóch słowach i czemu buttony są bez uchwytów). Będę bardzo wdzięczny.

0

Każde okno w systemie posiada uchwyt. Jeżeli jakaś kontrolka takowego nie posiada, to znaczy, że nie istnieje na poziomie systemowym, to tylko rysowanie i logika na poziomie biblioteki. Z tego co się Vidalii przyjrzałem to całość kontrolek jest realizowana na poziomie Qt, 'fizycznie' nie istnieją. O tyle zabawne, że Qt zazwyczaj stara się używać natywnych klamotów.

Znajdź główne okno i wyślij odpowiednie komunikaty do niego, podając odpowiednie koordynaty (tam, gdzie powinna się znajdować kontrolka). Innej prostej metody nie ma.

0

nie da rady raczej, polecenia kliknięcia nie działają, a koordynaty dobre podałem, uchwyt też dobry, bo celowo WM_Close wysłałem i upewnił mnie, że jest niby ok

0

Prześledź jakimś Spy'em dokąd i w jakiej postaci trafia kliknięcie myszki.

0
_13th_Dragon napisał(a)

Prześledź jakimś Spy'em dokąd i w jakiej postaci trafia kliknięcie myszki.

nie używałem nigdy takich aplikacji, podasz tytuł jednej z nich? ;)
chodzi ci np. o ollydbg?

//edit
ten winspy++ nie wykrywa nic na oknie, za wyjątkiem samego okna
Lepszy program to WinID, ale on tak samo nie wykrywa nic poza oknem

1

pan_smierci: są różne Spy'e, ale nie pamiętam nazw, bo ja korzystam ze starego topornego i banalnego tdwininfo.exe ściągniętego z torry'ego. Najszybciej pokazuje mi jaką klasę ma okno i wspołrzędne kursora na ekranie. Pisany program w Delphi. Jednak może spróbuj taki http://www.catch22.net/software/winspy i inne programu są pewnie do wygooglowania. Natomiast rozumiem, że to okno gry ma uchwyt? Czasami faktycznie jest tak jak na przykład w Operze, że całe okno przeglądarki jest pod jednym uchwytem i klasą, no i nie da się rozpoznać poszczegółnych przycisków czy paska adresu albo statusu na tym oknie. Jendak ja bym dla tego okna po pobraniu jego uchwytu wykonał EnumChildWindows i w procedurze pobierania kontrolek potomków wylistował sobie do Memo ich uchwyty, nazwy klasy oraz ewentualnie tekst z kontrolki o ile da się wczytać. Przykłady użycia EnumChildWindows w różnych językach znajdziesz oczywiście w google, a opis na msdn. A Ollym to bardziej możesz prześledzić działanie aplikacji.

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