Kritik zu FAQ: Tasten systemweit abfangen



  • Ich verstehe noch nicht so ganz den Sinn des Ganzen. Ich finde das mit den MessageBoxes OK. Wenn man nun abfangen will, dass durch 0 geteilt wurde oder so, dann sind Exceptions wohl unumgänglich. Aber hier...

    @<Der gute gerner>: Danke.



  • Es geht mir darum: Vielleicht will der Benutzer ja gar nicht, dass ne MessageBox ausgegeben wird.

    Und: Wenn du ne Exception vom Typ Exception wirfst, wird standardmäßig (vom BCB) ne MessageBox ausgegeben. Der Benutzer muss sich also um nix kümmern, wenn er nicht will. Ist also praktisch idiotensicher. 🙂

    Trotzdem mein Tipp: Setz dich mal mit Exceptions auseinander. Die können, wie du hier siehst manchmal ganz nützlich sein. 🙂



  • 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>:
    🙂

    🙂


Anmelden zum Antworten