javaprogger1987
Erfahrenes Mitglied
Hallo!
Ich bin sonst eher im Java-Forum hab aber mal nen Problem mit C-C++ was mich verzweifeln lässt :/
Also die Grundidee ist, in Java mit Keyboard-Hooks arbeiten zu können, um (systemweite) Hotkeys benutzen zu können..
Daher hab ich mich mal ein bischen mit der Sache beschäftigt, es scheitert aber schon am arbeiten mit den DLL's.. Dazu vllt ein paar Code Auschnitte:
Das ist die Funktion von Java aus aufgerufen wird.. Das klappt auch schon, allerdings stürtzt alles ab sobald ich die markierte Zeite reinschreibe.. Da ich dachte es läge an den Hooks habe ich extra schon mal die Testfunktion Out geschrieben, das geht aber trotzdem nicht.
Wenn ich den Funktionsaufruf von Out rausstreiche läuft die Methode ohne Probleme ab, es true zurückgegeben und es erscheint 6-Mal (?) ein Dialog der in untenstehender DllMain erzeugt wird..
Header:
Und dann die andere Dll (jnikeyhook.dll):
Header:
Wär echt super wenn hier jemand Rat wüsste
Danke schonmal
Gruß
Tobias
Ich bin sonst eher im Java-Forum hab aber mal nen Problem mit C-C++ was mich verzweifeln lässt :/
Also die Grundidee ist, in Java mit Keyboard-Hooks arbeiten zu können, um (systemweite) Hotkeys benutzen zu können..
Daher hab ich mich mal ein bischen mit der Sache beschäftigt, es scheitert aber schon am arbeiten mit den DLL's.. Dazu vllt ein paar Code Auschnitte:
Code:
JNIEXPORT jboolean JNICALL Java_keyhook_KeyHookMain_loadHooks
(JNIEnv *env, jobject clazz)
{
InstallHook = NULL;
UninstallHook = NULL;
HINSTANCE hDll = LoadLibrary("jnikeyhook.dll");
if ( hDll = NULL )
return (jboolean)FALSE;
InstallHook = (MYFUNC) GetProcAddress( hDll, "InstallHook" );
if ( InstallHook = NULL )
return (jboolean)FALSE;
UninstallHook = (MYFUNC) GetProcAddress( hDll, "UninstallHook" );
if ( UninstallHook = NULL )
(jboolean)FALSE;
Out = (MYFUNC) GetProcAddress( hDll, "Out" );
//Out(); <- Geht nicht
FreeLibrary( hDll );
return (jboolean)TRUE;
}
Das ist die Funktion von Java aus aufgerufen wird.. Das klappt auch schon, allerdings stürtzt alles ab sobald ich die markierte Zeite reinschreibe.. Da ich dachte es läge an den Hooks habe ich extra schon mal die Testfunktion Out geschrieben, das geht aber trotzdem nicht.
Wenn ich den Funktionsaufruf von Out rausstreiche läuft die Methode ohne Probleme ab, es true zurückgegeben und es erscheint 6-Mal (?) ein Dialog der in untenstehender DllMain erzeugt wird..
Header:
Code:
typedef BOOL (*MYFUNC)(void);
MYFUNC InstallHook;
MYFUNC UninstallHook;
MYFUNC Out;
Und dann die andere Dll (jnikeyhook.dll):
Code:
// Globale Variablen
HHOOK g_hKeyHook SHARED = NULL; // Handle unseres Hooks (als "shared" Deklariert)
HINSTANCE g_hInst SHARED = NULL; // Handle der DLL selbst
BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ ,
DWORD reason /* Reason this function is being called. */ ,
LPVOID reserved /* Not used. */ )
{
MessageBox(NULL, "Entry!", "Out", MB_OK);
g_hInst = hInst;
return TRUE;
}
.
.
.
DLLIMPORT BOOL Out()
{
MessageBox(NULL, "TEST", "TEST", MB_OK);
return TRUE;
}
Code:
#ifndef _DLL_H_
#define _DLL_H_
#include <windows.h>
#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */
// zur Deklaration von Variablen innerhalb eines "shared data segment"
#define SHARED __attribute__((section(".shr"), shared))
DLLIMPORT BOOL Out();
DLLIMPORT BOOL InstallHook();
DLLIMPORT BOOL UninstallHook();
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);
#endif /* _DLL_H_ */
Wär echt super wenn hier jemand Rat wüsste
Danke schonmal
Gruß
Tobias
Zuletzt bearbeitet: