Versteckte Anwendung wieder sichtbar machen
-
Hallo
Doch Hooks sind genau dafür da, gewisse Nachrichten (in diesem Fall Tasten) von Windows zu bekommen, auch wenn die eigene Anwendung nicht den Fokus hat.
bis bald
akari
-
akari schrieb:
Hallo
Doch Hooks sind genau dafür da, gewisse Nachrichten (in diesem Fall Tasten) von Windows zu bekommen, auch wenn die eigene Anwendung nicht den Fokus hat.
bis bald
akariach ja, hab' da was verwechselt. Sorry.
-
hi,
danke schonmal für die vielen Antworten.
Ich werde sie mir jetzt mal genauer durchlesen udn mich mal mit Hooks beschäftigen.
Denn damit kenne ich mich nicht aus.Kennt ihr 'ne gute seite auf der das gut erklärt ist?
Sonst muss ich mal weiter bei google gucken, ob ich 'was passendes finde.
Lg,
drummi
-
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39145.html
Ansurfen der Website schaffte aber alleine oder ?
-
hmm, mal gucken ob ich das schaffe.....
danke.
Lg,
drummi
-
Hi,
ich bin's nochmal.Ich hab' das jetzt so gemacht wie in dem Link oben beschrieben.
Ich musste folgendes (.cpp-Datei):
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);
durch folgendes ersetzen, weil er mir sonst eine Fehlermeldung angezeigt hat (.cpp - Datei):
extern "C" __declspec(dllexport) void __stdcall SetHook(void); extern "C" __declspec(dllexport) void __stdcall RemoveHook(void); extern "C" __declspec(dllexport) DWORD__stdcall CheckKey(int, WORD,LONG);
Doch außerdem zeigt er mir bei folgendem (Header-datei):
extern PACKAGE TForm14 *Form14;
folgende Fehlermeldung an:
error: Declaration syntax error.
Ich hoffe ihr könnt mir nochmal helfen...
hier nochmal der Link zum Hook erstellen:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39145.htmlLg,
drummi
-
drummi schrieb:
.. weil er mir sonst eine Fehlermeldung angezeigt hat ...
wie lautete denn diese?
-
Hi,
Für das hier (.cpp-Datei):
extern "C" __declspec(dllexport) __stdcall void SetHook(void);
gibt er mir folgende Fehlermeldung:
c++ error Monp14.cpp: Declation terminated incorrectly.
------------------------------
für das (.cpp-Datei):
extern "C" __declspec(dllexport) __stdcall void RemoveHook(void);
auch folgendes:
c++ error Monp14.cpp: Declation terminated incorrectly.
------------------------------
für das (.cpp-Datei):
extern "C" __declspec(dllexport) __stdcall DWORD CheckKey(int, WORD,LONG);
dieses hier:
c++ error Monp14.cpp: Multiple declaration for 'DWORD'. c++ error windef.h: Ealier declaration of 'DWORD'. c++ error Monp14.cpp: Type mismatch in redeclaration of 'DWORD' c++ error windef.h: Earlier declaration of 'DWORD'. c++ error Monp14.cpp: Declation syntax error.
für den windef.h Fehler werweist er mich auf folgende Zeile:
typedef unsigned long DWORD;
------------------------------
für das (.cpp-Datei):
void __fastcall TKeyHookForm::FormCreate(TObject *Sender) { SetHook(); }
meldet er mir das:
c++ error Monp14.cpp: Call to undefined function 'SetHook'.
------------------------------
für das nächste (.cpp-Datei):
void __fastcall TKeyHookForm::FormDestroy(TObject *Sender) { RemoveHook(); }
das hier:
c++ error Monp14.cpp: Call to undefined function 'RemoveHook'.
------------------------------
und für das hier (.h-Datei):
extern PACKAGE TForm14 *Form14;
immernoch diese:
c++ error Monp14.h: Declaration syntax error.
------------------------------
Ich hoffe, ihr könnt damit nun mehr anfangen (das waren jetzt alle Fehlermeldungen zu dem Code der Seite (Link oben)).Lg,
drummi
-
Hallo,
vermutlich wird die Ursache für den Fehler nicht in der Umsetzung des Codes für den Keyhook nach obigen Link liegen.
Dieser ist mehrfach getestet und fehlerfrei.Ratsam wäre, wenn du den Code zunächst in einem separaten Projekt erfolgreich testest.
Denn *TForm14 Form14; deutet auf eine schon recht umfangreiche Application hin. Dort könnte schon irgendwo ein Bug sein.
mfg
kpeter
-
Hi,
hmm, das ist schon komisch. Das scheint ja zu funktionieren, weil wie du ja sagtest wurde es schon mehrfach erfolgreich angewendet.
In einem Extra Projekt funzt es auch nicht.
Braucht man dazu ne bestimmte Bibliotheksdatei?
Sonst schreib ich hier jetzt mal mein Vorgehen auf (c++ Builder 1):
1. Neues Projekt erzeugen
2. ListBox auf der Form erzeugen
3. Code nach Unit1.h kopieren
4. Code nach Unit1.cpp kopieren
5. Projekt compilieren und startenerzeugte dll-Datei (keydll.dll) befindet sich im gleichen Ordner wie das Projekt (Project1.mak).
Übrigens hat er mir die gleichen Fehler (s.oben) bei der DLL-Erzeugung gemeldet (auch endgültige version). Wenn ich diese so wie ganz oben umgeändert habe, dann hat das dort funktioniert, sonst nicht.
Lg,
drummi
-
Was mir sofort auffällt:
die keydll.lib hast du dem Projekt des Form hinzugefügt?edit:
Hmm, ich sehe gerade BCB1; die kleinste Version ist bei mir BCB3.
Aber es sollte doch identisch sein?
-
hi,
die keydll.lib gibt's die extra oder sollte die beim compillieren der dll erstellt werden?
bei mir habe ich folgendes:keydll.dll
keydll.mak
keydll.h
keydll.cpp
keydll.tds
keydll.ils
keydll.ild
keydll.~ca
keydll.~ma(glaub' das waren alle. jedenfalls keine .lib-datei)!
Lg,
drummi
-
Hallo,
In der Projektverwaltung sollte es in etwa so aussehen ( am Beispiel BCB3 ):
-ProjectGroup1 | |---hookproject.cpp | | | -- k_hook | | | | | - k_hook.cpp | | | | | - KeyHookForm | | | -- keydll.lib | ---keydll | --keydll.cpp
Im DLL-Projekt muss unter Projektoptionen/Linker ein Haken bei Importbibliothek erzeugen gesetzt werden.
Obige Bezeichnungen stimmen glaube ich nicht mit dem O-Code überein, das Prinzip soll nur verdeutlicht werden
mfg
kpeter
-
hmmm...
ich hab' da jetzt mal geguckt, aber bei der version 1 gibt's den Menüpunkt Importbibliothek erzeugen nicht.
Kennt sich vielleicht jemand mit der Version 1 aus?
Lg,
drummi
-
ohne es genau zu wissen, vermute ich instinktiv, dass es mit der Version 1 nicht so einfach werden wird, oder gar nicht geht, oder Du nicht über das Wissen verfügst den bestehenden Code auf Deine Bedürfnisse anzupassen (ist nicht bös gemeint);
Was spricht den gegen ein TrayIcon? Nur um eine Anwendung sichtbar zu setzen einen Tastaturhook zu nutzen, finde ich persönlich ala Kanonen auf Spatzen.
-
Rostfrei[] schrieb:
Nur um eine Anwendung sichtbar zu setzen einen Tastaturhook zu nutzen, finde ich persönlich ala Kanonen auf Spatzen.
Mehr als das: es ist schlichtweg ungebührlich, so etwas zu machen. Solche Programme leben bei mir nicht lange.
drummi schrieb:
Kennt sich vielleicht jemand mit der Version 1 aus?
C++Builder 1 ist 13 Jahre alt. Ein Upgrade ist mehr als überfällig.