Kritik zu FAQ: Tasten systemweit abfangen
-
Ne, sehe ich nicht. OK, sagen wir, wir haben jetzt eine Exception benutzt, und zwei User benutzen die DLL. Der eine will die MessageBox, der andere nicht. Was haben jetzt beide zu tun?
-
Sag wir mal so: Der User kann selbst entscheiden wie der Fehler behandelt wird. Der eine gibt einfach ne MessageBox aus, der andere ignoriert (der Dumme :D) und noch ein anderer will ne Ausgabe in der Konsole machen.
-
WIE DENN, wenn die User NUR die DLL haben, also keinen Code?
-
hä??? sagen wir mal deine dll stellt die funktion SetHook bereit. dann kannst der benutzer dieser funktion die exception so abfangen wie es gerner bereits gesagt hat.
try { SetHook(); } catch(HookCreateException& hce) { // Hier entscheide ich was gemacht wird, und nicht du. :p }
-
Aber wie gesagt, wirf lieber ne Exception vom Typ Exception (oder nem Erben davon). Dann muss derjenige, der ne MessageBox haben will, garnix machen.
Derjenige, der keine haben will, fängt die Exception einfach selbst ab.
-
Das heißt, das Ganze müsste so aussehen??? :
void __stdcall SetHook() { if(!ghhookKB) { // Starten des Keyboard-Hooks ghhookKB = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)CheckKey, ghInst, 0); if(!ghhookKB) throw Exception; } else throw Exception; }
Aber beim Catchen weiß doch jetzt keiner, ob nun der Hook nicht erstellt werden konnte oder ob es ihn schon gibt.
[ Dieser Beitrag wurde am 15.01.2003 um 21:55 Uhr von WebFritzi editiert. ]
-
B
-
ja, deswegen mußt du entweder verschwiedene klassen schmeißen, oder z.B. einen string mitgeben
-
Also so:
void __stdcall SetHook() { if(!ghhookKB) { // Starten des Keyboard-Hooks ghhookKB = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)CheckKey, ghInst, 0); if(!ghhookKB) throw Exception("Der Hook konnte nicht erstellt werden"); } else throw Exception("Der Hook wurde bereits erstellt"); }
Und dann im Aufruf:
try { SetHook(); } catch(Exception &E) { ShowMessage(E.Message); }
Ich glaub, ich hab's gepeilt.
-
-
Original erstellt von <C/C++-Ecke>: