Kritik zu FAQ: Tasten systemweit abfangen
-
Hi, da ich mich jetzt mal ein wenig mitt Hooks und DLLs befasst habe, weiß ich jetzt ein bisschen mehr und muss leider Kritik an der FAQ üben. Da steht zunächst mal
void __stdcall SetHook(void) { HOOKPROC lpfnHookProc = NULL; lpfnHookProc = GetProcAddress(GetModuleHandle("keydll.dll"),"CheckKey"); ghhookKB = SetWindowsHookEx(WH_KEYBOARD, lpfnHookProc, ghInst, NULL); }
Wozu einen Pointer zu einer Funktion aus derselben DLL holen, in der man sich eh schon befindet?! Und Fehlerverhalten wurde auch nicht behandelt. Ich würde folgendes vorschlagen:
void __stdcall SetHook() { if(!ghhookKB) { // Starten des Keyboard-Hooks ghhookKB = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)CheckKey, ghInst, 0); if(!ghhookKB) MessageBox(NULL, "Hook kann nicht erstellt werden", "ERROR", MB_OK|MB_ICONERROR); } else MessageBox(NULL, "Hook ist bereits erstellt", "INFO", MB_OK|MB_ICONINFORMATION); }
Und das FindWindow() in CheckKey() finde ich auch nicht gut. Man sollte hier mit shared Memory arbeiten, d.h. mit Memory Mapped Files, weil's anders im BCB scheinbar nicht geht.
-
Dann aber lieber ne Exception werfen, anstatt ne MessageBox anzuzeigen.
MessageBoxes sind uncool.
-
Meinetwegen. Wäre besser, ja. Könntest du das schnell aufschreiben? Ich kenn mich da nicht so aus.
-
Und woher willst du wissen das es besser ist, wenn du dich garnicht damit auskennst? lol
-
Ich kenne mich mit Exceptions nicht so aus.
-
Jaja, hast falsch verstanden was ich meinte. War auch nicht so wichtig.
-
Ne, was? Wolltest nur wieder rumtrollen!
-
Jein!
Wäre besser, ja.
Ich meine woher willst du wissen das eine Exception besser wäre, als eine MessageBox, wenn du dich garnicht mit Exceptions auskennst?
-
Standardantwort: C++ Tut lesen.
Oder einfach mal in der Hilfe unter Exception, da is sogar ein Beispiel.
BTW: Hast du heute eigentlich auch noch andere Hobbies als das Forum? *g*
[ Dieser Beitrag wurde am 15.01.2003 um 19:06 Uhr von Eßer editiert. ]
-
Nö. Damit will ich mich garnicht auskennen!
-
Wobei... <Probenking> hat eigentlich recht. Eine Exception macht ja auch nix anderes als ne MessageBox auszugeben.
-
Nö. Das macht der BCB mit der Exception, wenn er sie abfängt. Wenn der Benutzer das jetzt nciht will, fängt er sie einfach selbst vorher ab. Mit deiner MessageBox-Version ist das so nicht möglich.
-
Original erstellt von Eßer:
Wenn der Benutzer das jetzt nciht will, fängt er sie einfach selbst vorher ab.Hä? Wie das? Benutzer == Programmierer oder Benutzer == DAU?
-
ACH, HIER IST JA ALLES TOTAL DURCHEINANDER!!!
-
Der Progger, der die Dll benutzt natürlich.
-
Wenn der Benutzer das jetzt nciht will, fängt er sie einfach selbst vorher ab.
Nochmal: wie?
-
Try/catch?!
-
Ja toll. Und was steht dann im catch-Block? Ich meine, was soll das? Der User muss ja irgendwie mitkriegen, dass das mit dem Hook nicht geklappt hat. Wenn man nun die MessageBox übergeht, was dann...?
-
class HookCreateException {}; if(!ghhookKB) throw HookCreateException; ... try { SetHook(); } catch(HookCreateException& hce) { MessageBox(NULL, "Hook kann nicht erstellt werden", "ERROR", MB_OK|MB_ICONERROR); }
-
Wenn der Benutzer (der Dll ;)) das so will lässt er z.B. nen Sound Abspeilen oder sonst was. Da muss der sich dann Gedanken drüber machen. Das Exception Handling ist IMHO jedenfalls keine Aufgabe des Entwicklers der Dll.