Wieder mal Keyboard-Hooks
-
Chris_ schrieb:
Der code ist der aus der FAQ
Soll ich jetzt suchen ??
-
Entschuldigung, ich wollte natürlich noch einen link einfügen:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39145-and-highlight-is-hooks.html
Chris_
-
habs jetzt schon soweit, dass es sich kompilieren lässt, aber keine spur von Keys in der ListBox
Chris_
-
Eventuell mit dem Debugger den Programmverlauf verfolgen.
Chris_ schrieb:
habs jetzt schon soweit, dass es sich kompilieren lässt...
Wo war denn der Fehler ( die anderen wollens vielleicht wissen ).
-
ehrlich gesagt:
keine ahnung wo der Fehler lag, ich hab alles nochmal genauso gemacht...
dann gings, bis auf die tatsache, dass die listbox nichts anzeigtWeißt, du wo der Fehler evtl. sein könnte??
Ich probiers jetzt mal mit dem DebuggerChris_
-
das programm läuft ohne mir im debugger ersichtlichen Fehler...
nur dass es eben keine keys ausgibt
Hat jemand noch ne Idee?
Chris_
-
Der Code aus der FAQ ist fehlerlos (natürlich
).
Nun kannst du versuchen herauszubekommen, ob die dll aufgerufen wird.
Setze mal die ShowMessage in SetHook der DLL:
void __stdcall SetHook(void) { HOOKPROC lpfnHookProc = NULL; lpfnHookProc = GetProcAddress(GetModuleHandle("keydll.dll"),"CheckKey"); ghhookKB = SetWindowsHookEx(WH_KEYBOARD, lpfnHookProc, ghInst, NULL); //----------- TEST ----------- ShowMessage("ProcAddress: " + IntToStr(int(lpfnHookProc))); } //---------------------------------------------------------------------------
Was wird ausgegeben ?
-
Jetzt geht nichtmal mehr das Programm:
Wenn ich es starten will, kommt die Meldung, dass Project1.dll nicht gefunden wurde, obwohl ich keydll.dll hinzugefügt habe..
bin gerade echt am verzweifelnChris_
Edit: Wenn ich die DLL kopiere und sie als Project1.dll wieder einfüge, startet zwar das Programm, aber die listbox macht natürlich wieder gar nichts
Edit: Jetzt hab ich deine Frage ganz vergessen:
Ausgegeben wird gar nichts, d. h. das programm wird gestartet, man sieht die Form mit der ListBox, aber sonst tut sich nichts...
-
Wie hast du die keydll zum Projekt hinzugefügt?
In deiner Projektdatei müsste stehen
USELIB("keydll.lib");
-
-beide(dll&lib) liegen im gleichen verzeichnis wie das projekt
-beide habe ich per Projekt -> Dem Projekt hinzufügen einbezogen
ist das falsch?
wenn ja, wie muss ich es sonst machen?Chris_
-
Dem (Formular-)Projekt fügst du nur die keydll.lib hinzu. Keine keydll.cpp.
-
Was muss ich jetzt wo genau hinzufügen?
-
Nicht, dass wir aneinander vorbeireden.
Unter Projekt/Dem Projekt hinzufügen wird die keydll.lib hinzugefügt. Möglicherweise hast du das gemacht,
deshalb schrieb ich weiter oben, was im Projekt-Quelltext stehen sollte.Wenns immer noch nicht funktioniert, poste mal diesen Code (Ansicht/Projekt-Quelltext).
mfg
kpeter
-
Projekt-Code:
#include <vcl.h> #pragma hdrstop //--------------------------------------------------------------------------- USEFORM("Unit1.cpp", Form1); USELIB("keydll.lib"); //<- Hab ich jetzt per Hand eingefügt, obwohl ich die // Lib-Datei dem Projekt hinzugefügt habe(Projekt->dem.. //--------------------------------------------------------------------------- WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } catch (...) { try { throw Exception(""); } catch (Exception &exception) { Application->ShowException(&exception); } } return 0; }
-
Chris_ schrieb:
Projekt-Code: (Auszug, edit kpeter)
USELIB("keydll.lib"); //<- Hab ich jetzt per Hand eingefügt, obwohl ich die // Lib-Datei dem Projekt hinzugefügt habe(Projekt->dem.. //---------------------------------------------------------------------------
Diesen Eintrag sollte die IDE selbst vornehmen, wenn man zum Projekt die Lib hinzufügt.
Aber noch mal zu deinem Eingangspost. Wie ist das zu verstehen:
Chris_ schrieb:
ich habe die drei quellcodes aus der FAQ zum thema kopiert und die dll "keydll.dll" und "keydll.lib" endgültig erstellt...
Hast du das jeweils komplett in einem Stück in die Dateien kopiert?
Dann wäre die erste Fehlermeldung zu verstehen, denn das Original-Form aus der FAQ nennt sich TKeyHookForm und nicht TForm1.Dann wette ich beinahe 1000:1, dass im Objektinspektor die Ereignisse deines Formulares leer sind.
-
kpeter schrieb:
Diesen Eintrag sollte die IDE selbst vornehmen, wenn man zum Projekt die Lib hinzufügt.
Ich weiß, dass sie das tun sollte, tut sie aber nicht...
Mit dem "kopiert" meinte ich natürlich nicht den kompletten quellcode kopiert und den ausgangsquellcode komplett überschrieben...
Auch die Ereignise im Objektinspekter meiner Form sind natürlich nicht leer
Chris_
Edit: Habs nochmal komplett neu gemacht: Jetzt kommt beim starten des Programmes die Meldung "ProcAddress:0",(um auf deine vorherige Frage zurückzukommen), aber ein Tastendruck wird immer noch nicht aufgenommen
-
Sorry, wäre auch zu arg gewesen
-
ja schon...
Sonst noch ne Idee???
-
Noch ein möglicher Test (selbe Stelle wie zuvor)
//----------- TEST ----------- HMODULE kdll = GetModuleHandle("keydll.dll"); ShowMessage("ModuleHandle: " + IntToStr(int(kdll)));
Wert grösser Null muss angezeigt werden, wenn DLL gefunden.
Edit: ProcAddress muss auch grösser Null sein.
-
ProcAddress: 137720
ModuleHandle: 131072Von Tastendruck immer noch keine Spur...
Chris_