Wieder mal Keyboard-Hooks



  • Ich weiß, dass dieses Thema schon 1000mal beantwortet worden ist, trotzdem krieg ichs einfach nicht hin:

    ich habe die drei quellcodes aus der FAQ zum thema kopiert und die dll "keydll.dll" und "keydll.lib" endgültig erstellt, aber kann das programm nicht starten:
    "Fehler im Modul Unit1: Deklaration der Klasse TForm1 fehlt oder ist fehlerhaft!"
    Ich weiß, dass ich die Form irgendwie umbenennen muss, aber wie???
    bei jedem bisherigen versuch kam schon beim umbenennen dieselbe meldung. 😕

    Wie krieg ich das hin??

    Chris_



  • Chris_ schrieb:

    "Fehler im Modul Unit1: Deklaration der Klasse TForm1 fehlt oder ist fehlerhaft!"

    Diese Fehlermeldung erscheint (selten) mal, wenn eine Komponente vom Formular gelöscht wurde und die IDE die Headerdatei editiert ( Bereich // Komponenten, die von der IDE verwaltet werden).
    Es kommt dann vor, dass eine Quelltextzeile und/oder ein Semikolon aus einer anderen Deklaration an eine falsche Stelle gesetzt wird.

    Beispiel:

    TMemo *Memo1;;void __fastcall ClientSocket1Read(TObject *Sender,  // Semikolon durch IDE verschoben
    

    Sieh dir also diesen Abschnitt genau auf so einen Fehler an und korrigiere per Hand.

    Es muss nicht die Ursache sein, aber ich vermute es stark.

    mfg
    kpeter



  • Hallo kpeter,

    danke für die schnelle hilfe, jedoch habe ich eine komplett neue anwendung erstellt, also keine komponente gelöscht.
    Ich kann nicht mal eine Komponente auf der Form erstellen => selbe Meldung

    Chris_



  • Wenns nicht zu umfangreich ist, poste einfach den Code.



  • Der code ist der aus der FAQ



  • 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 anzeigt 😞

    Weißt, du wo der Fehler evtl. sein könnte??
    Ich probiers jetzt mal mit dem Debugger

    Chris_



  • 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 verzweifeln 😕

    Chris_

    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. 😞


Anmelden zum Antworten