javaprogger1987
Erfahrenes Mitglied
Also ich weiß selber nicht genau wo das Problem liegt..
Die Registrierung des Hooks klappt halt ohne Fehler, allerdings wird die Callback Methode nicht aufgerufen...
Ich vermute nun, dass es an der Art liegt, wie ich den Hook registriere
Ich glaube halt das
nicht richtig funktioniert, ich würde auch als 3.ten Parameter den Habdle nehmen der der DLLMain übergeben wird, die wird aber gar nicht erst aufgerufen..
Was hast du denn als 3.ten Parameter?
Wäre echt gut wenn du mir mal deine Klassen zeigen könntest..
Wenn du das nicht posten möchtest: tobias.viehweger@gmx.de
Gruß
Tobias
Die Registrierung des Hooks klappt halt ohne Fehler, allerdings wird die Callback Methode nicht aufgerufen...
Ich vermute nun, dass es an der Art liegt, wie ich den Hook registriere
C++:
#include "dll.h"
#include "keyhook_HotKeyManager.h"
//HINSTANCE hDll = NULL;
HHOOK g_hKeyHook SHARED = NULL; // Handle unseres Hooks (als "shared" Deklariert)
HINSTANCE g_hInst SHARED = NULL; // Handle der DLL selbst
JavaVM *javavm = NULL;
JNIEnv *jniEnv = NULL;
int hotkeyCount = 0;
jobject globClass;
jmethodID action;
BOOL APIENTRY DllMain( HINSTANCE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
g_hInst = hModule;
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
BOOL InstallHook( int nrOfHotkeys, JavaVM *vm, jobject clazz )
{
//Werte sichern
hotkeyCount = nrOfHotkeys;
//MessageBox(NULL, "Install!", "Out", MB_OK);
if(g_hKeyHook != NULL)
return TRUE;
g_hKeyHook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, GetModuleHandle(NULL), 0);
if(g_hKeyHook == NULL)
return FALSE;
return TRUE;
}
BOOL UninstallHook()
{
if(g_hKeyHook != NULL)
{
UnhookWindowsHookEx(g_hKeyHook);
g_hKeyHook = NULL;
}
return TRUE;
}
BOOL IsModifier ( WPARAM wParam )
{
switch ( (WORD) wParam )
{
case VK_RETURN: return TRUE;
case VK_CONTROL: return TRUE;
case VK_SHIFT: return TRUE;
case VK_MENU: return TRUE;
case VK_LCONTROL: return TRUE;
case VK_RCONTROL: return TRUE;
case VK_LSHIFT: return TRUE;
case VK_RSHIFT: return TRUE;
case VK_TAB: return TRUE;
case VK_LWIN: return TRUE;
case VK_RWIN: return TRUE;
}
return FALSE;
}
JNIEXPORT jboolean JNICALL Java_keyhook_HotKeyManager_installHook
(JNIEnv *env, jobject clazz, jint nrOfHooks)
{
globClass = env->NewGlobalRef( clazz );
action = env->GetMethodID( env->GetObjectClass( clazz ), "jniActionPerformed", "(III)V" );
return (jboolean) InstallHook( (int)nrOfHooks, javavm, globClass );
}
JNIEXPORT jboolean JNICALL Java_keyhook_HotKeyManager_uninstallHook
(JNIEnv *env, jobject clazz)
{
bool ret = UninstallHook();
return (jboolean) ret;
}
jint JNI_OnLoad
(JavaVM *vm, void *reserved)
{
javavm = vm;
return JNI_VERSION_1_4;
}
Ich glaube halt das
C++:
g_hKeyHook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, GetModuleHandle(NULL), 0);
Was hast du denn als 3.ten Parameter?
Wäre echt gut wenn du mir mal deine Klassen zeigen könntest..
Wenn du das nicht posten möchtest: tobias.viehweger@gmx.de
Gruß
Tobias
Zuletzt bearbeitet: