[ROZWIĄZANE] Wyłapywanie zmiany wyglądu my...
Best Answer MarWit 27.11.2013 15:32
#include <Windows.h> #include <stdio.h> HHOOK hMouseHook; LRESULT CALLBACK mouseProc ( int nCode, WPARAM wParam, LPARAM lParam ) { if( ( ( CWPRETSTRUCT * ) lParam ) -> message == WM_SETCURSOR ) { printf( "WAT" ); } return CallNextHookEx( hMouseHook, nCode, wParam, lParam ); } int main(int argc, char** argv) { hMouseHook = SetWindowsHookEx( WH_CALLWNDPROCRET, mouseProc, NULL, GetCurrentThreadId( ) ); if( hMouseHook == NULL ) return 0; MSG msg; while ( GetMessage( & msg, NULL, 0, 0 ) ) { TranslateMessage( & msg ); DispatchMessage( & msg ); } UnhookWindowsHookEx( hMouseHook ); return 0; }W teorii powinno smigac, w praktyce nie musi ( tzw. wydaje mi sie ze globalnego hooka mozna zrobic tylko uzywajac DLL ) Go to the full post
Pan PrO
24.11.2013
Witam. Jaka funkcja służy do wychwytywania zmiany animacji myszki ??. Dokładnie to chcę zrobić program, który po zmianie strzałki w "rękę" automatycznie wykonuje kliknięcie LPM. Będę wdzięczny za każdą pomoc.
MarWit
24.11.2013
Pan PrO
24.11.2013
Wzorowałem się innym kodem, bo nie znam za bardzo C/C++, ale udało mi się stworzyć takie coś tylko nie wiem czy dobrze zrobiłem
#include <Windows.h> #include <stdio.h> HHOOK hMouseHook; int main(int argc, char** argv) { HANDLE hThread; DWORD dwThread; hThread = CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)MyMouseLogger, (LPVOID) argv[0], NULL, &dwThread); if (hThread) return WaitForSingleObject(hThread,INFINITE); else return 1; } LRESULT CALLBACK mouseProc (int nCode, WPARAM wParam, LPARAM lParam) { if(pMouseStruct != NULL) { if(wParam == WM_SETCURSOR) { printf("clicked"); } } return CallNextHookEx(hMouseHook, nCode, wParam, lParam); } DWORD WINAPI MyMouseLogger(LPVOID lpParm) { HINSTANCE hInstance = GetModuleHandle(NULL); hMouseHook = SetWindowsHookEx(WH_CALLWNDPROCRET, mouseProc, hInstance, NULL); UnhookWindowsHookEx(hMouseHook); return 0; }
MarWit
25.11.2013
HINSTANCE hInst = GetWindowLong( FindWindow( "", "Nazwa Okna" ), GWL_HINSTANCE )No i de facto tworzenie nowego wątku też jest tutaj zbędne wiec mozesz wszystko przenieść normalnie do main'a
Pan PrO
27.11.2013
Nie zależy mi, aby klikało w wybranym oknie. Mam natomiast innym problem. Ten kod, który wysłałem nie da sie skompilować, błąd jest w 11 linijce. Pomożesz go naprawić będę bardzo wdzięczny.
Best Answer
MarWit
27.11.2013
#include <Windows.h> #include <stdio.h> HHOOK hMouseHook; LRESULT CALLBACK mouseProc ( int nCode, WPARAM wParam, LPARAM lParam ) { if( ( ( CWPRETSTRUCT * ) lParam ) -> message == WM_SETCURSOR ) { printf( "WAT" ); } return CallNextHookEx( hMouseHook, nCode, wParam, lParam ); } int main(int argc, char** argv) { hMouseHook = SetWindowsHookEx( WH_CALLWNDPROCRET, mouseProc, NULL, GetCurrentThreadId( ) ); if( hMouseHook == NULL ) return 0; MSG msg; while ( GetMessage( & msg, NULL, 0, 0 ) ) { TranslateMessage( & msg ); DispatchMessage( & msg ); } UnhookWindowsHookEx( hMouseHook ); return 0; }W teorii powinno smigac, w praktyce nie musi ( tzw. wydaje mi sie ze globalnego hooka mozna zrobic tylko uzywajac DLL )
Pan PrO
28.11.2013
Skompilowałem kod. Po uruchomieniu otwiera sie czarna konsola. Gdy strzałka zmienia się w "rękę" niestety nie wykonuje kliknięcia
MarWit Bardzo dziękuję ci za zainteresowanie się moim problemem. Jeśli uważasz, że w C++ nie ma możliwości tego wykonać, to poproszę o zamknięcie tematu. Poczekam jeszcze na twoją odpowiedź.