Programm ausführen nach beenden des Internet Explorers



  • Danke, aber:
    Das sind meine ersten Kontakte mit VC++. Kannst du mir das mal bitte näher erklären (wie ich ein Dll-Projekt erstelle)???
    Nixwisser



  • Wenn es deine ersten Kontakte mit VC++ sind, würd' ich einfach mal etwas rumprobieren ;). Kann nie schaden. Ein Dll-Projekt erstellt man wie jedes andere Projekt auch: Datei->Neu..., dann "Win32 Dynamic Linked Library" auswählen (oder so, hab die engliche Version ;)). Dem ganzen noch nen Namen geben und du hast dein Dll-Projekt :).

    cya 🙂



  • Ja,
    dass hab ich schon probiert->gleicher Fehler
    Nixwisser



  • Komisch... bei mir hat das funktioniert (ist aber schon etwas länger her), toom hat mir damals meine Frage beantwortet zum Thema Hooks... und da hat er dann auch den Code da geschrieben für die FAQ. Hast du den Code wirklich 100%ig übernommen?

    cya 🙂



  • Habs gefunden.
    Ich hab versehentlich die hookdll.c mit der Dateiendung cpp versehen *blöd*.
    Kann ja net gehen.
    Meine Frage is jetzt nur noch, wie ich die entstandene Bibliothek benutzen kann.
    Nixwisser



  • Mit LoadLibrary kannst du die Dll laden, mit GetProcAddress die Adressen der exportierten Funktionen rausbekommen und mit FreeLibrary die Dll schließlich wieder freigeben. Ich poste auch gleich noch'n Beispiel-Code, muss ihn aber erst finden ;).

    cya 🙂

    EDIT:

    Die Hook-Dll dürft eigentlich die gleiche sein wie deine, also auch von toom.
    Hier der Code zum Laden:

    // ...
    
    typedef BOOL (* PINSTALLHOOK) (HWND);
    typedef BOOL (* PUNINSTALLHOOK) (void);
    
    // ...
    
    HINSTANCE       hDll;
    PINSTALLHOOK    pInstall;
    PUNINSTALLHOOK  pUninstall;
    
    // ...
    
    hDll = LoadLibrary(TEXT("Loggy_Dll.dll"));
    pInstall = (PINSTALLHOOK) GetProcAddress(hDll, "InstallHook");
    pUninstall = (PUNINSTALLHOOK) GetProcAddress(hDll, "UninstallHook");
    
    pInstall(hWnd);
    
    pUninstall();
    FreeLibrary(hDll);
    
    // ...
    

    So oder so ähnlich ;).

    [ Dieser Beitrag wurde am 11.03.2003 um 19:27 Uhr von MagiC Creator editiert. ]



  • Ja,
    das versteh ich.
    Da ich aber noch nicht genau weiß, wie ich dann z.B. Die Tastatureingabe auf dem Bildschirm ausgeben kann, wäre es schön, wenn du mir mal deinen kompletten Code mailen könntest.
    stark.sebastian@gmx.de



  • Hi,

    im Zweifelsfall kannst Du die DLL auch erst mal statisch zu Deiner Anwendung dazulinken. Das geht einfach indem Du die zu exportierenden Funktionen auf folgende Art und Weise in der DLL deklarierst:

    extern "C" __declspec(dllexport) HHOOK installHook();
    

    und in der Anwendung schreibst Du dann

    extern "C" __declspec(dllimport) HHOOK installHook();
    

    Dann fügst Du noch die beim Compilieren Deiner DLL entstandene LIB-Datei zu Deinem Anwendungs-Projekt hinzu, und fertig 🙂



  • Ja,

    aber mein derzeitiges Problem ist, dass ich einfach keine Ahnung habe, wie ich mit Hilfe von Tooms "Hookdll" zum Beispiel die Tastatureingaben in eine Datei speichern kann.
    Ich hab ja wie schon gesagt noch nix mit WinApi gemacht. Nur jetzt brauch ich halt sone "Hook"-Funktion dringend.
    Wär schön, wenn jemand mal den Code für ein Programm schickt, was Tooms "Hookdll" benutzt.

    Danke Nixwisser



  • Ich hab mir jetzt mal noch ein paar Beispiele angesehen.
    Dort hab ich gesehen, dass die Funktionen aus den Dlls irgendwie "geladen" werden. Ungefähr so:

    #define IMPORT extern "C" __declspec (dllimport)
    
    IMPORT BOOL CALLBACK SetupHook (HWND) ;
    
    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
    
    typedef BOOL (* PINSTALLHOOK) (HWND);
    
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                        PSTR szCmdLine, int iCmdShow)
    {
    HINSTANCE       hDll;
    PINSTALLHOOK    SetupHook;
    
    //Dll laden (funktioniert noch)
    hDll = LoadLibrary(TEXT("hookdll.dll"));
    
    //Funktion SetupHook laden (gibt bei mir 0, wenn ich versuche das Beispiel aus der FAQ zu laden --> funktioniert nicht)
    SetupHook = (PINSTALLHOOK)GetProcAddress(hDll, "SetupHook");
    FreeLibrary(hDll);
    return 0;
    }
    

    Kompilieren geht ja, aber beim Ausführen stelle ich fest, dass die Funktion SetupHook nicht geladen werden kann (SetupHook ist dann 0).

    Kann mir da jemand weiterhelfen???
    Nixwisser



  • Mich würd' mal interessieren was das IMPORT-Zeug da sein soll... entferne mal die ersten beiden Zeilen, bei mir geht's nämlich ohne diese beiden ;).

    cya 🙂



  • Ja, du hast Recht, ausführen kann ichs jetzt schon. Meine Frage ist nur noch, wie ich dann innerhalb meines Proggis an die Tastatureingaben rankomm und sie dann z.B. in eine Datei speichere.

    Danke erstmal
    Nixwisser



  • Der Hook aus der FAQ schickt WM_USER + 2 ans Programm. Die Message verarbeitest du einfach, im WPARAM steht die gedrückte Taste.

    cya 🙂



  • THX,

    wenn du mir das sagst, erscheints mir logisch.
    Nur ist das ganze ja sozusagen "systemweit". Man müsste es ja noch irgendwie auf die eigentliche Fragestellung übertragen können. Denn irgendwie muss es ja gehen, dass ganze auch mit dem "Schließen-Signal" des Internet Explorers funzt.
    Aber, wenn ich dass in der MSDN richtig verstanden habe, brauch ich da ja sone Art ID von dem Prog, mit der ich dann wirklich nur dieses Programm "hooken" kann. Weißt du, wie das genau funktioniert und wie ich dass dann mit dem Internet Explorer verwenden kann??

    Nixwisser



  • Sag mal,womit hast du eigentlich die Sockets programmiert?Ich hab den Eindruck du solltest dich mal mit der Materie beschäftigen.
    Entweder willst du programmieren(dann aber auch vernünftig) oder du lädst dir irgendwo nen Programm runter dass das kann was du möchtest.
    Frag doch mal MagicCreator ob er dir gegen Bezahlung dein Prog schreibt,was anderes macht er zur Zeit ja auch nicht.
    :p

    MfG Spacelord 🙂



  • du brauchst kein keyboardhook sondern ein messagehook: WH_CALLWNDPROC...



  • @Spacelord:
    Winapi an zwei Tagen oder was (ich brauchs möglichst schnell)???

    Was Sockets angeht: Das is ja wirklich total billig. Ich programmier ja auch schon länger, nur halt Konsole (und unter Linux). Nu brauch ich aber mal ein Prog für Windows. Und wenn du mir ein Programm zum Runterladen nennen könntest, was mir hilft, wär mir schon sehr geholfen ...

    @<toom>&&MagiCcreator
    Danke erstmal für eure schnelle Hilfe.
    Ich hoff mal, dass ichs jetzt hinkriege

    Nixwisser



  • hier eine loesung fuer dein problem:

    in dem beispiel aus der FAQ die beiden funkitonen vertauschen:

    EXPORT BOOL CALLBACK SetupHook (HWND hParent){
        hWindow = hParent ;
        hhkHook = SetWindowsHookEx (WH_CALLWNDPROC, KeyboardHookProc, hDllInstance, NULL) ;
        return TRUE ;
    }
    
    LRESULT CALLBACK KeyboardHookProc (int nCode, WPARAM wParam, LPARAM lParam){
        HWND hIE ;
        hIE = FindWindow ("IEFrame", NULL) ;
        if((((CWPSTRUCT*)lParam)->hwnd == hIE) && (((CWPSTRUCT*)lParam)->message == WM_DESTROY)){
            SendMessage ((HWND) hWindow, (WM_USER + 2), (WPARAM) wParam, NULL) ;
        }
        return CallNextHookEx (hhkHook, nCode, wParam, lParam) ;
    }
    

    wenn du jetzt den IE schliesst sendet die dll eine nachricht an dein prog...

    ich hoffe ich habe dir geholfen...



  • Danke,

    ich werds mal ausprobieren.
    Aber auf den ersten Blick, isses genau das was ich suche (inzwischen hab ich die Sache mit den Hooks denk ich auch halbwegs verstanden - dank eurer "geduldigen" Hilfe *g*).

    Nixwisser



  • @Spacelord: Was mach ich ;)?

    cya 🙂


Anmelden zum Antworten