Anfänger- c++ -frage zu DLL und Tastatureingabe abprüfen...
-
Hallo.
Ich mache eigentlich alles in Java, aber für manche Dinge muss man halt dann doch auf was natives zurückgreifen, so mein jetziges Problem.
Ich möchte für mein Java Programm eine Funktion haben, die mir sagt welche Taste der Benutzer gedrückt hat (systemweit). Das geht aber nicht mit Java (nur lokal), deshalb muss ich das jetzt mit c++ machen und in eine DLL packen. Wie das mit der DLL geht weiß ich schon, nur wie kann ich einfach Tastatureingaben abprüfen? D.h. die DLL soll meinem Java programm einfach immer sagen, wenn eine Taste gedrückt wurde (natürlich auch welche).
Ich kenne mich in c eigentlich fast garnicht aus. Habe jetzt einiges mit kbhit() gelesen und getchar(), weiß aber nicht wie ich das verwende.Muss ich eine Endlosschleife bauen, die mit kbhit() immer abfrägt welche taste gedrückt wurde? Aber aus der Endlosschleife kann ich dann schlecht das Ergebnis an mein Java Programm schicken. ALso Endlosschleife wäre nicht gut.
Dann hab ich noch von KEyboardhooks gelesen... muss ich dann das komplette Keyboard als Hook registrieren? geht es nicht einfacher?
Und muss ich was besondere beachten, welch ich es in eine DLL machen möchte?Danke für die Hilfe!
-
es gibt die winapi-funktion GetAsyncKeyState, musst ma in der MSDN danach gucken.
-
Na damit wirst aber nicht wirklich weit kommen...
Musst dich mit Api-Hooks beschäftigen.
Guckstu: http://msdn2.microsoft.com/en-us/library/ms644990.aspx
Und in der Forensuche findest dazu garantiert tonnenweise
-
ich habe jetzt das beispiel mit der funktion gefunden:
http://www.online-tutorials.net/system/keylogger-tastatur-abfragen/sourcecodes-t-19-270.htmlalso das funktioniert schonmal wenn ich es kompiliere

Problem ist aber dass das auch mit einer Endlosschleife läuft, ich weiß nicht wie ich das Ergebnis dann zurück an Java liefern soll, da man eine DLL Funktion zwar aufrufen kann, man aber als Ergebnis den Rückgabewert der Funktion benutzen muss.
zum thema hooks hab ich das hier gefunden:
http://www.codeproject.com/dll/keyboardhook.aspdas scheint das richtige zu sein, verstehe da aber nur Bahnhof.
Da sind jetzt 2 Funktionen gegeben, die in eine DLL exportiert werden. aber schleierhaft ist mir, wie ich das Java DLL fähig mache..
weil dort brauch ich sowas wie z.B. in der FormJNIEXPORT void JNICALL Java_NewJFrame_SetCursor(JNIEnv *env, jobject obj, jint x, jint y) { SetCursorPos(x,y); }und in dem Tutorial steht sowas:
LRESULT __declspec(dllexport)__stdcall CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)ich sollte wirklich maln c++ kurs machen

-
also mit einem rückgabewert wird das wirklich nichts, weil du eine CALLBACK funktion implementierst. D.h. diese wird nur aufgerufen wenn eine Taste gedrückt wird.
Auf dem gleichen Weg musst du die Schnittstelle nach Java gestalten. Eine statische Methode, die dann optimalerweise von der dll aufgerufen wird.
Aber weiter kann ich dir da nicht helfen, weil ich mich mit dem jni noch nicht beschäftigt hab. Und langsam tendiert das Thema in die falsche Richtung des Forums
Wohl eher WinAPI solange es um die hooks geht 
lg
-
ok hat sich erledigt, habe ein implementation gefunden, daraus bin ich jetzt schlau geworden
für alle die es interessiert:
http://www.velocityreviews.com/forums/t360927-setwindowshookex-not-notifing-me-on-key-pressed-using-jni-and-c-dll.html