Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
C ++ SetWindowsHook (Hook klawiatury)
#1
Od dłuższego czasu podpinam klawiaturę przy użyciu C #, ale teraz, gdy robię to w C ++, nie działa. SetWindowsHookEx powiedzie się (lub przynajmniej jeden uchwyt haka nie jest pusty), ale HookProc nigdy nie zostanie wywołany.   Czy jest to problem z identyfikatorem wątku?     Kod:   HHOOK hHook = NULL; BOOL WINAPI DllMain (HANDLE hModule, DWORD dwReason, LPVOID lpvReserved) {przełącznik (dwReason) {case DLL_PROCESS_ATTACH: hHook = SetWindowsHookExW (WH_KEYBOARD_LL, (HOOKPROC) HookProc, (HINSTANCE) hModule, NULL); if (hHook) {MessageBoxA (0, "SetWindowsHook OK", "", MB_OK); // otrzymuję to} break; case DLL_PROCESS_DETACH: break; } return TRUE; } LRESULT CALLBACK HookProc (UINT nCode, WPARAM wParam, LPARAM lParam) {if (nCode == HC_ACTION) {MessageBoxA (0, "In HookProc", "", MB_OK); // never shown} return CallNextHookEx (hHook, nCode, wParam, lParam); }
Reply
#2
Miałem ten problem z BF2, myślę, że to przesłoniło hak klawiaturowy Przy wspólnych operacjach hak klawiatury działał dobrze!
Reply
#3
Dziwne, ale dlaczego miałoby działać w BF2 przy użyciu C # i VB.Net? Mam nadzieję, że zostanie wywołany z niewłaściwej nici i / lub Im używającego niewłaściwego ThreadIDa podczas wywoływania go.
Reply
#4
Zacytować: Napisał Revolty Dziwne, ale dlaczego miałoby działać w BF2 przy użyciu C # i VB.Net? Mam nadzieję, że zostanie wywołany z niewłaściwej nici i / lub Im używającego niewłaściwego ThreadIDa podczas wywoływania go. Kiedy go wypróbowałem, ustawiłem system haczyków na klawiaturze z zewnętrznego programu i kiedy okno BF2 nie było aktywne, działało dobrze, ale gdy było aktywne, nie otrzymałem nic. Przy wspólnych operacjach i innych grach działało dobrze, gdy okno gry było aktywne !!!
Reply
#5
nie jestem pewien, czy to ci pomoże, ale może spróbuj użyć getForegroundWindow () lub FindWindow () również spróbuj zadeklarować zmienną taką jak ta, może nie mieć znaczenia, nie wiesz: static HHOOK hHook = NULL;
Reply
#6
Mogłem z powodzeniem ustawić systemowy hak na klawiaturę, który użyłem dla moich skrótów klawiszowych i działały w większości gier, ale gdy tylko okno BF2 było aktywne, hak został nadpisany lub coś! Myślałem, że powiedziałeś, że to nie działa dla ciebie, dlatego wspominałem o moim problemie z BF2, na wypadek gdyby problem z BF2 był twój. Zestaw haczyków na klawiaturę był systemowy, a nie szeroki jak twój!
Reply
#7
Zacytować: Originally Posted by doobie Myślałem, że powiedziałeś, że to nie działa dla ciebie, dlatego wspominałem o moim problemie z BF2, na wypadek gdyby problem z BF2 był twój. Zestaw haczyków na klawiaturę był systemowy, a nie szeroki jak twój! Działa w C #, ale nie działa w C ++ i tak, to jest dla BF2. Myślałem, że globalny hak został dokonany na poziomie kierowcy, a wszystkie wywołania zwrotne są wywoływane za pomocą klawiatury. Ale jeśli dobrze cię rozumiem, może być tylko jeden haczyk na proces? i mój hak w C # działa, ponieważ jest to oddzielny proces?
Reply
#8
prawdopodobnie wstrzykujesz to koryto kremyremotrzymane? z msdn: Ten haczyk jest wywoływany w kontekście wątku, który go zainstalował. Połączenie jest nawiązywane poprzez wysłanie wiadomości do wątku, który zainstalował hak. Dlatego wątek, który zainstalował hak musi mieć pętlę komunikatów.
Reply
#9
Zacytować: Napisał Revolty Myślałem, że globalny hak został dokonany na poziomie kierowcy, a wszystkie wywołania zwrotne są wywoływane za pomocą klawiatury. Ale jeśli dobrze cię rozumiem, może być tylko jeden haczyk na proces? i mój hak w C # działa, ponieważ jest to oddzielny proces? Mój hak został ustawiony z oddzielnego procesu, dlatego musiałem stworzyć system haczyków szeroki / globalny. Najpierw próbowałem dodawać globalne skróty klawiszem RegisterHotKey, aby system obsługiwał skróty klawiaturowe i powiadamiał mój proces, jeśli naciśnięto klawisz skrótu, który działał dobrze, nie tylko z BF2. Potem próbowałem z hakiem na klawiaturę, a także z hakiem JournalRecordProc (który również się nie powiódł) -> http://www.swissdelphicenter.ch/torr...de.php?id=1729
Reply




Users browsing this thread: 1 Guest(s)