Programm ausführen nach beenden des Internet Explorers
-
Ja,
da ich net viel Ahnung von Winapi habe, wärs schön, wenn einer mal ein Codefragment postet, dass z.B. eine Variable setzt, wenn der Internet Explorer beendet wird.
Danke Nixwisser
-
*lol* So leicht geht das nicht. Außerdem wäre das ja schon die Lösung deines Problems. Hast du zufällig eine Eumex zu Hause?
-
Was bitte?
Es wär trotzdem schön, wenn mal jemand was postet, was mir weiterhilft. Ich hab keine Lust nur deswegen noch WinApi komplett zu lernen.
Es gibt doch bestimmt jemand, der sowas schon mal gemacht hat.Nixwisser
-
Ich hab auch mal das Beispiel aus der FAQ versucht zu kompilieren.
Nur an dieser Stelle:hhkHook = SetWindowsHookEx (WH_KEYBOARD, KeyboardHookProc, hDllInstance, NULL);
krieg ich die Fehlermeldung
*Hook.cpp(60) : error C2664: 'SetWindowsHookExA' : Konvertierung des Parameters 2 von 'long (int,unsigned int,long)' in 'int (__stdcall *)(void)' nicht moeglich
*Wär schön, wenn jemand weiß, woran das liegt
Nixwisser
-
Hast du das ganze auch in einem Dll-Projekt? Das ist nämlich nur ne Dll, kein fertiges Programm.
cya
-
Was auch noch möglich wäre das du mit einem Timer (-> SetTimer, WM_TIMER) nach den Internet Explorer suchst (FindWindow, Class: "IEFrame") (in sagen wir mal 500ms Abständen). Wenn du halt kein Fenster findest dann kannst du dein Programm starten.
-
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