globale Windows Botschaft eines Mausklicks abfangen
-
Guck dir mal das an: http://world.std.com/~lword/work/dllhint.html (.DEF Datei).
Ich hoffe das "pragma data_seg" funktioniert wenigstens.
-
Nein. Hast du denn hier nichts gelesen, oder was?! Ich sagte #pragma comment(linker,...) geht nicht im BCB-Linker. Das #pragma data_seg(...) geht zwar - bringt aber nichts ohne eine weitere Linker-Anweisung über shared Sections. Wie gesagt, da #pragma comment(linker,...) nicht funzt, muss ein DEF-File ran. Wenn ich dieses meinem DLL-Projekt hinzufüge, bekomme ich den
[LinkerFehler] Section .MYSEC defined in .def file is empty.
Und ich sach dir: Es gibt im BCB keine Möglichkeit, mit shared sections zu arbeiten!
-
Ich hatte es schon ganz durchgelesen, aber es hätte ja sein können, das du uns die Information einfach verschwiegen hast.
Original erstellt von WebFritzi:
Und ich sach dir: Es gibt im BCB keine Möglichkeit, mit shared sections zu arbeiten!Und ich bin immer noch der Meinung das geht 100 %ig.
Jeder Windows-Compiler unterstützt DEF Dateien und normalerweise auch Shared Sections. Vielleicht hast du beim Einbinden dieser Datei nur irgendeinen Fehler gemacht?
Oder es liegt an deinem uralten BCB. :p
-
Das ganz bestimmt nicht! Wie gesagt, ich habe die Google Groups gestern durchwühlt und habe immer wieder die Antwort erhalten, dass das im BCB nicht geht. Man MUSS mit mapped Files arbeiten. Anders geht's nicht!
-
-
Du meinst den letzten Beitrag? Jo, das wusste ich. Aber das "shared" ALLE globalen Variablen, was auch in einem anderen Groups-Thread (mit Referenz auf diesen da) diskutiert wird. Keine Chance!
-
Ok, ich habe den BCB nicht, aber ich war mir eigentlich sicher das sowas jeder vernünftige Compiler kann.
Es tut mir leid, wenn ich was falsches behauptet hab. Sorry.
-
Hi,
erstmal super DLL!!!Nur zu meiner Frage: Kann man irgendwie verhindern, dass die Bootschaft an Windows gesendet wird. Ich hab mir so gedacht ich drüche eine Tastenkombination dann läuft der Hook und ich bestimme, was mit dem Bootschaften gemacht wird, bis ich wieder die Tastenkombination vom Anfang drücke! Geht das?
Danke
Alexander Sulfrian
-
Ne, IMHO geht das nicht. Allerdings kannst du das CallNextHookEx() am Ende der Callback-Funktion weglassen. Ich hab das mal getestet und habe festgestellt, dass z.B. kein PopupMenu mehr aufgeklappt wird, wenn man aufs Desktop klickt oder im IE. Ansonsten habe ich keine Veränderungen festgestellt.
-
Meine allgemeine Frage zu einer DLL ist noch nicht geklärt. Ich wiederhole sie nochmal klarer. Also, wer sich den letzten Code nochmal durchliest, der entdeckt im DllEntryPoint eine BOOLsche Variable bFirstProcess. Diese wird einmal auf TRUE gesetzt - nämlich, wenn das Memory Mapped File erstellt wird (unter CreateFileMapping()). Da ja mein eigener Prozess die DLL zuerst "aufruft", ist die Variable nur dann TRUE. In allen anderen Prozessen, in die sich die DLL einlinkt, ist sie FALSE. Nun, wenn ich aber diese Variable global definiere und in SetHook() (welches ja auch nur mein eigener Prozess aufruft) nur dann den Parameter hWnd in das shared Memory schreibe, wenn der Wert von bFirstProcess TRUE ist, dann funzt der Hook nicht. Das heißt, dass der Wert von bFirstProcess an dieser Stelle FALSE ist. Aber warum???
Ich hatte die Möglichkeit in Betracht gezogen, dass mein Prozess beim Starten einmal die DLL "aufruft" und dann nochmal, wenn SetHook() aufgerufen wird. Dann wäre natürlich bFirstProcess wieder FALSE. Aber das glaube ich nicht. Woran liegt es also, dass bFirstProcess (als globale Variable) beim Aufruf von SetHook() FALSE ist?
-
<*push*>
-
<*push*>
-
Was ist los?
-