Bekomm das Tut zum Hooken nicht hin



  • also:
    ich habe den code aus der FAQ kopiert und bei mir eingefügt.
    Ich habe die *.lib Datei der DLL eingebunden (Projekt|Dem Projekt hinzufügen)
    Ich habe die DLL als fertige version compiiert.
    und hier ist mein quellcode (1 zu 1 aus der FAQ, meine heißt keydll.dll)

    //DLL CPP-Datei
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #include <windows.h>
    #pragma hdrstop
    //---------------------------------------------------------------------------
    
    #define WM_KEYHOOK WM_USER+100
    HHOOK ghhookKB;
    HINSTANCE ghInst;
    #pragma argsused
    //---------------------------------------------------------------------------
    
    int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
    {
      ghInst = hinst;
      return (1);
    }
    //---------------------------------------------------------------------------
    
    extern "C" __declspec(dllexport) __stdcall void SetHook(void);
    extern "C" __declspec(dllexport) __stdcall void RemoveHook(void);
    extern "C" __declspec(dllexport) __stdcall DWORD CheckKey(int, WORD,LONG);
    //---------------------------------------------------------------------------
    
    void __stdcall SetHook(void)
    {
      HOOKPROC lpfnHookProc = NULL;
      lpfnHookProc = GetProcAddress(GetModuleHandle("keydll.dll"),"CheckKey");
      ghhookKB = SetWindowsHookEx(WH_KEYBOARD, lpfnHookProc, ghInst, NULL);
    }
    //---------------------------------------------------------------------------
    
    void __stdcall RemoveHook(void)
    {
      UnhookWindowsHookEx(ghhookKB);
    }
    //---------------------------------------------------------------------------
    
    DWORD __stdcall CheckKey(int nCode, WORD wParam, LONG lParam)
    {
      HWND ghAppWnd = FindWindow("TKeyHookForm", 0);
      if((nCode < 0) || nCode == HC_NOREMOVE)
        return CallNextHookEx(ghhookKB, nCode, wParam, lParam);
    
      // Skip if it's a repeat
      if(lParam & 0x40000000)
        return CallNextHookEx(ghhookKB, nCode, wParam, lParam);
    
      // Send key information to the main window
      SendMessage(ghAppWnd, WM_KEYHOOK, 0, lParam);
    
      return CallNextHookEx(ghhookKB, nCode, wParam, lParam);
    }
    
    //Header des Projektes
    //---------------------------------------------------------------------------
    
    #ifndef Unit1H
    #define Unit1H
    #define WM_KEYHOOK WM_USER+100
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    //---------------------------------------------------------------------------
    class TKeyHookForm : public TForm
    {
    __published:    // Von der IDE verwaltete Komponenten
            TListBox *ListBox1;
            void __fastcall FormCreate(TObject *Sender);
            void __fastcall FormDestroy(TObject *Sender);
    private: // User declarations
      MESSAGE void __fastcall KeyHook(TMessage &Message);
        BEGIN_MESSAGE_MAP
          MESSAGE_HANDLER(WM_KEYHOOK, TMessage, KeyHook);
        END_MESSAGE_MAP(TForm);
    public:     // Anwender-Deklarationen
            __fastcall TKeyHookForm(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TKeyHookForm *KeyHookForm;
    //---------------------------------------------------------------------------
    #endif
    
    //Und die cpp-datei
    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TKeyHookForm *KeyHookForm;
    
    extern "C" __declspec(dllexport) __stdcall void SetHook(void);
    extern "C" __declspec(dllexport) __stdcall void RemoveHook(void);
    extern "C" __declspec(dllexport) __stdcall DWORD CheckKey(int, WORD,LONG);
    
    //---------------------------------------------------------------------------
    __fastcall TKeyHookForm::TKeyHookForm(TComponent* Owner)
      : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TKeyHookForm::KeyHook(TMessage &Message)
    {
      char Key[80];
      GetKeyNameText(Message.LParam, Key, 80);
      ListBox1->Items->Add(Key);
    }
    //---------------------------------------------------------------------------
    void __fastcall TKeyHookForm::FormCreate(TObject *Sender)
    {
      SetHook();
    }
    //---------------------------------------------------------------------------
    void __fastcall TKeyHookForm::FormDestroy(TObject *Sender)
    {
      RemoveHook();
    }
    //---------------------------------------------------------------------------
    

    Ich habe irgendwo gelesen, man sollte auch die header Datei der DLL includen,
    aber bei mir hat die DLL keinen header (zumindest nicht .h)
    Ich tippe mal es ist nur ein ganz kleiner Fehler,
    Schonmal Dank im Voraus,
    J0



  • was genau geht den nicht ??



  • kann dir ein Hookbeispiel mailen, wenn Du mir Deine Mail Adresse schickst.

    epidemic 😉



  • Agh mist, hab voll vergessen das Problem zu sagen *peinlich*
    Das Problem ist, dass nicht passiert.
    Wnn ich compiliere geht das, die Anwendung wird gestartet, aber wenn ich eine Taste drücke passiert nichts.

    @epedemic: vielen Dank für das Angebot, aber ich würde gerne das Problem verstehen. Vielleicht greife ich später auf das Angebot zurück. Meine e-mailadresse ist joachimrothkegel@gmx.de

    Greez J0



  • Bei mir leif das Programm unter Win2000 und unter Win98 nicht... Weis nicht ob das immer so ist, wäre ja ne Möglichkeit.



  • Du musst deinem Projekt die LIB beifügen (Projekt->Dem Projekt hinzufügen im Menu). Weiterhin MUSS deine DLL (und die LIB) den Namen "KeyDll.dll" bzw. "KeyDll.lib" haben. Sonst klappt das von vornherein nicht. Das der Name so sein MUSS, kann man vermeiden. Das habe ich auch schonmal angemeckert, aber die Mods haben nicht darauf reagiert. 😞



  • Hab alles nochmal so gemacht wie du es gesagt hast (so hatte ich es aber auch schon vorher gemacht) es geht aber immer noch nicht.
    Ich teste das Programm heute mal auf einem XP rechner, vielleicht geht´da 😞
    Sonst nehme ich das Oben genannte Angebot an.

    Greez, J0



  • Original erstellt von WebFritzi:
    Du musst deinem Projekt die LIB beifügen (Projekt->Dem Projekt hinzufügen im Menu). Weiterhin MUSS deine DLL (und die LIB) den Namen "KeyDll.dll" bzw. "KeyDll.lib" haben. Sonst klappt das von vornherein nicht. Das der Name so sein MUSS, kann man vermeiden. Das habe ich auch schonmal angemeckert, aber die Mods haben nicht darauf reagiert. 😞

    Das steht doch in der FAQ. 🙄



  • läuft auch aufm XP-Rechner nicht, muss ich wohl irgendwas falsch geemacht haben.
    Ich finde meinen Fehler nicht.
    @epidemic: kannst du mir das Beispiel mailen?
    eine Adresse ist: joachimrothkegel@gmx.de
    Thx & Greez,
    J0


Anmelden zum Antworten