Keyboard-Hook funktioniert nur wenn Fenster im Vordergrund
-
Ok: @WebFritzi: *frag*
cya
-
hmmmmm.... ich sehe keinen fehler... aber hier ein bsp. von mir dass auf jeden fall funzt...
//hookdll.h #ifdef __cplusplus #define EXPORT extern "C" __declspec (dllexport) #else #define EXPORT __declspec (dllexport) #endif EXPORT BOOL CALLBACK SetupHook (HWND) ; EXPORT BOOL CALLBACK UninstallHook (void) ; //hookdll.c #include <windows.h> #include "hookdll.h" #pragma data_seg ("Shared") HWND hWindow = 0 ; #pragma data_seg () #pragma comment (linker, "/section:Shared,RWS") LRESULT CALLBACK KeyboardHookProc (int, WPARAM, LPARAM) ; HHOOK hhkHook ; HINSTANCE hDllInstance ; int APIENTRY DllMain(HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved){ switch (fdwReason){ case DLL_PROCESS_ATTACH : hDllInstance = hInstance ; break ; } return TRUE ; } EXPORT BOOL CALLBACK SetupHook (HWND hParent){ hWindow = hParent ; hhkHook = SetWindowsHookEx (WH_KEYBOARD, KeyboardHookProc, hDllInstance, NULL) ; return TRUE ; } LRESULT CALLBACK KeyboardHookProc (int nCode, WPARAM wParam, LPARAM lParam){ if (nCode == HC_ACTION){ if ((lParam & 1073741824) != 1073741824){ SendMessage ((HWND) hWindow, (WM_USER + 2), (WPARAM) wParam, (LPARAM) lParam) ; } } return CallNextHookEx (hhkHook, nCode, wParam, lParam) ; } EXPORT BOOL CALLBACK UninstallHook (void){ UnhookWindowsHookEx (hhkHook) ; return TRUE ; }
in deinem prog rufst du die dll ueber SetupHook (hParent) (nicht fergessen am ende deines programms UninstallHook () aufzurufen...) und uebergibst dabei das handle zu deinem Hauptfenster....
-
versuch bei deinem code das EXPORT wegzunehmen...
-
Ohne EXPORT funktioniert's leider auch nicht, aber ich schau mir deinen Code gleich mal an, danke!
thx & cya
-
Nochmal danke, funktioniert super!
cya
-
das ist doch was fuer die FAQ's.... oder?
-
ich beschreibe die funktionen und oeffne neuen thred, dann kann man das in die FAQ's uebernehmen
-
Ja, find' ich auch, ist super für die FAQ!
cya
-
*räusper* Und woran lag es nun?
-
Ich hab nCode anders behandelt, dadurch hat es irgendwie nicht funktioniert. Hab aber einfach den Code von toom genommen, ihn auf meine Bedürfnisse zugeschnitten und schon hat's gefunzt :).
cya
-
Hi,
hattest du in deiner ersten Version diesen Code ?#pragma data_seg ("Shared") HWND hWindow = 0 ; #pragma data_seg () #pragma comment (linker, "/section:Shared,RWS")
Wenn die DLL in den Adressraum einer anderen Anwendung gemappt wird,"vergisst" sie die Werte ihrer globalen Variablen,ausser du legst nen Datensegment an das für alle gültig ist(wie oben)
MfG Spacelord
-
Nein, hatte ich nicht, aber jetzt funktioniert's irgendwie auch ohne ;). Aber gut zu wissen :).
cya
-
wie es funzt auch ohne??? das kann nicht gehen... "ohne" bleibt die variable in dem adresssspeicher des aufrufendes processes... (jedes process hat eigene kopie von der Variable und die ist von anderen processen unzugänglich...)
-
Ich schreib's vorsichtshalber mal rein, man kann ja nie wissen ;).
cya
-
Hallo??? Wenn ihr mal genau schaut, dann verwendet MagicCreator in seiner Callback garkein WindowHandle. Er gibt lediglich eine MessageBox aus.
-
das wollte er aber bestimt noch tun...
-
Ja, das hab ich jetzt eingebaut :). Weil wer will schon, dass für jede Taste die er drückt, eine MessageBox ausgegeben wird ;).
cya
-
vieleicht WebFritzi
-
ist nicht boese gemeint
-
Wisst ihr, was cool ist :D? Macht mal nen CBT-Hook und lasst wenn ein neues Fenster erstellt wird per MessageBox den Fenstertitel ausgeben ;). Das gibt ne wunderbar Endlosschleife :D.
cya