Komunikaty powiadamiające.

0

Witam!!!

Chciałbym, aby ktoś napisał mi procedurę przechwycenia komunikatu przez aplikację o kliknięciu na przycisku( bodajże komunikat powiadamiający o tym to BN_CLICKED). Taka procedura potrzebna mi, aby obsłużyć w nietypowy sposób przycisk Button, ale nie wiem jak się za to zabrać.

0

Na wstępie pamiętaj - nazwa środowiska / języka podajesz w >>>>>>TAGU<<<<<< - nie w temacie!!! Tym razem poprawiłem. Bo ktoś tam w komentarzach marudził, że rzekomo zwykli userzy nie mogą edytować swojego pierwszego posta w wątku. W co osobiście nie wierzę, ąle to się sprawdzi. Anyway, co do pytania to rozumiem, że chcesz obsłużyć kliknięcie na przycisk w programie, którego autorem nie jesteś i nie masz do niego kodu źródłowego? Jeżeli tak to zostaje Tobie próba injekcji dllki w proces tej aplikacji. Można do tego celu użyć modułu afxcodehook.pas do znalezienia w google. Nie raz to robiłem z powodzeniem. Ale musze dodać, że czasami udaje się takowej injekcji dokonać tylko podczas uruchomienia procesu, a nie kiedy on już działa. Czasami też jak na przykład w przypadku Total Commandera, injekcja na przykład w funkcję obsługi komunikatów kontrolki do wyświetlania katalogów oraz plików powoduje, że przechwycimy na przykład komunikat LB_ADDSTRING, jednak dane zawarte w LParam po rzutowaniu na PChar wcale nie będą dodawanym tekstem, tylko jakimiś "śmieciami" ASCII. Ale z takim przypadkiem do tej pory spotkałem się tylko raz. I winne właśnie było przechwytywanie funkcji obsługi komunikatów tej kontrolki. Zaś co do przechwycenia procedury komunikatów to po napisaniu sobie funkcji enumerującej oraz pobierającej HWND okna głownego na podstawie PID'u procesu (pobranego przez funkcję GetCurrentProcesId) wystarczy się "podpiąć" pod nią przez odpowiednie wywołąnie funckji SetWindowLong z parametrem GWL_WNDPROC w kodzie tej dllki, którą injectujesz. Bo zasada jest taka, że "podpiać" się mozemy tylko w funkcję obsługi komunikatów własnego procesu. Inne takie działanie na obcym procesie jest niedozwolone przez system, a przez wiele antywirusów słusznie wykrywane jako działanie malwareowe. Natomiast injektując dllkę w proces jakiegoś programu - nie wdawając się w szczegóły, po prostu jakby zmuszamy program "do myślenia", że to jego własny kod. Co do wyszukania HWND na podstawie PID'u to przerób sobie kod z mojego artykułu dostępnego pod tym adresem: Uchwyt na podstawie nazwy pliku exe programu - najlepiej na WinAPI. I dodam, że tak jak wspominam w artykule pewne zmienne, które tam są globalne - muszą takie być, bo inaczej kod będzie się "wykrzaczał". Natomiast co do przykładu przejmowania obsługi komunikatów kontrolek, to możesz się zapoznać ze źródłem Trainera do gry "Max Payne" na moim blogu (adres w sygnaturce). Jest pisany w WinAPI i wprawdzie przejmuje tam obsługę oczywiście kontrolek w ramach swojej własnej aplikacji, ale dzięki temu powinieneś zrozumieć ideę. Powodzenia. A jeżeli będziesz miał później konretne problemy i pokażesz kod z jakim działasz to wtedy pisz, ktoś - jeśli nie ja - za pewne Tobie pomoże.

0

Dzięki. Posprawdzam, a jak mi się nie uda, to podam kodzik swego programu.

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