Hook + SendMessage Problem
-
Dann ist WM_COPYDATA also keine Lösung für mich?
Was sollte ich dann benutzen?
Evtl gleich eine Pipe?
Ich würde eigentlich gerne immer eine Message bekommen, wenn eine Taste gedrückt wird. Notfalls könnte ich da noch ein Workaround mit einem eigenen Thread machen... - vorrausgesezt ich kann mir aus einem Thread meines Programmes selbst Windows Messages schicken wenn ich gleichzeitig nicht den Fokus habe!
-
__gast schrieb:
Dann ist WM_COPYDATA also keine Lösung für mich?
Falls Du meinen ersten Link gelesen hättest, dann wüsstest Du das da steht:
Using Data Copy for IPC
Data copy enables an application to send information to another application using the WM_COPYDATA message.__gast schrieb:
Was sollte ich dann benutzen?
Evtl gleich eine Pipe?Hast Du Dir die Beispiele auf Codeproject angeschaut?`
http://www.google.de/search?q=global+hook+site%3Acodeproject.com
-
Using Data Copy for IPC
Data copy enables an application to send information to another application using the WM_COPYDATA message.Und wer sagt, dass das nicht funktioniert wenn mein Fenster minimiert ist?
Oder würde es gehen, würde ich nicht aus meinem Dll senden?
-
was ist c# express?
-
Das ist die kostenlose Entwicklungsumgebung für das neue C#2.0 von Microsoft: http://msdn.microsoft.com/vstudio/express/visualcsharp/
Und das ganze Ding ist wirklich genial! UI-Programme mache ich jetzt nur noch in C#.Eine Ausführliche Erläuterung findes Du hier:
http://www.dotnetframework.de/glossar/components/3098/C%20Express%20Edition.aspx
-
Titel des Postings schrieb:
Hook + SendMessage Problem
-
Also? Sollte ich es gleich mit der Pipe probieren? Und wenn ja, geht es dann auch?
-
Ich empfehle Dir: Schau Dir mal die diversen Beispiele an!
-
Das Board schrieb:
Beiträge insgesamt: 373
[0.05% aller Beiträge / 31.08 Beiträge pro Tag]
Alle Beiträge von Jochen Kalmbach anzeigenEs mag ja sein, dass deine Beiträge von unglaublichem Fachwissen strotzen, aber ich muss trotzdem sagen: Deine Antworten helfen mir kaum weiter!
Wenn ich hier zu einem konkreten Problem eine Frage stelle, bringt es mir nichts, wenn du mir Links zu google mit sehr allgemein formulierten Suchbegriffen zum Thema Hooks schickst!Ich empfehle Dir: Schau Dir mal die diversen Beispiele an!
msdn [Allgemeiner Artikel zu Hooks]
Global System Hooks in .NET [.Net & co]
Processing Global Mouse and Keyboard Hooks in C# [C#]
·.NET Global Hook [Wieder .Net]
An introduction to hook procedures [Nett, aber eher für Anfänger und total allgemein.]
Managed Kod ile Global Hook ; [Eine Sprache der ich nicht mächtig bin]
SP Scripting Language Documentation [Ganz daneben]
c++ - System hooks & DLL shared segments [shared segments - ok - ist aber nich was ich suche]
HOOK GLOBAL (SYSTEM-WIDE HOOK) - BLOCAGE DE TOUCHES Code source ... [auch nicht...]
Spying on .NET Applications [nochmal nicht...]
usw...Ich habe ja nix gegen google Links, aber wenn ich hier Frage habe ich schon gegoogelt und außerdem: WAS willst du mir damit sagen?
Da du dich ja offensichtlich mit der Materie auskennst, warum schreibst du nur "ja", "nein" oder guck "hier"(wobei "hier" nicht weiterhilft)?
Vielleicht formuliere ich einfach meine Frage nochmal präzise, lag vielleicht ja auch nur an mir:
Ich habe einen Tastatur Hook in einer Dll und möchte in meinem Hauptprogramm zu jeder Zeit mit einer Message benachrichtigt werden wenn eine Taste gedrückt wird!Getestet habe ich ja nun schon WM_COPYDATA, das funktioniert nicht.
-
Hast Du mal ein Beispiel bei codeproject (auf die ich schon zweimal hingewiesen habe) angeschaut?
Ein globaler Hook ist nun mal nicht trivial und somit nicht einfach zu implementieren! Du musst Dir schon auch selber etwas mühe machen...Aber zurück zur eigentlichen Frage:
Aus meiner Sicht sollte WM_COPYDATA funktionieren. Woher hast Du denn in der DLL das Fenster-Handle an den Du die Msg schickst?
Hast Du ein Bereich in Deiner DLL als .shared markiert wo Du das handle den anderen Prozessen mitteilen kannst?
Oder wie kommt das Fenster-Handle von Deinem Hauptprozess (der wo ja die Msg empfangen soll) zu all den anderen Prozesses (bzw. Deinen vielen (Data-)Instanzen Deiner DLL in allen anderen Prozessen?
-
handle wird in
EXPORT BOOL CALLBACK SetupHook (HWND hParent)übergeben und in
#pragma data_seg ("Shared") HWND hWindow = 0 ; #pragma data_seg ()gespeichert!
Der Codeproject Artikel funktioniert bei mir noch nicht. Ist teilweise etwas sehr MSCompiler-nah. Mein BCB kommt damit überhaupt nicht klar...
-
PS: Die Nachrichten kommen ja auch an wenn das Fenster fokusiert ist!
-
__gast schrieb:
#pragma data_seg ("Shared")
Das sollte heissen:
#pragma data_seg(".SHARED") HWND hWindow = 0; #pragma data_seg() #pragma comment(linker, "/section:.SHARED,RWS")Sonst wird ja nix geshared!
__gast schrieb:
Die Nachrichten kommen ja auch an wenn das Fenster fokusiert ist!
Das ist ja auch logisch... da bist Du ja im selben Prozess und die DLL hat den richtigen Wert! Bei den anderen Prozesses ist der Wert aber auf 0, da er nicht geshared wurde...
-
[C++ Warning] hookdll.cpp(28): W8094 Incorrect use of #pragma comment( <type> [,"string"] )die Sache mit dem RWS schluckt er einfach nicht...
-
Das ist halt MS VC... wie das bei Dir geht weis ist nicht... Du must auf jedem Fall dem Linker mitteilen, dass er dieses DataSegment sharen soll!