Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: KeyHook Irreführend

  Alt 13. Apr 2011, 16:44
Warum ?
Wird bei mir dynamisch über loadlibrary iniziiert.
Und NUR! für meine Anwendung gedacht.
Deine Anwendung wird dann aber auch nur auf das Instrument reagieren, solange diese den Focus hat.
Eine DLL ist dafür nicht erforderlich, einen Hook innerhalb deiner Anwendung kannst du jederzeit setzen.

Die SuperClass nenn ich einfach mal so!
Verwaltet alle meine Controls "Button und Image" in einer einzigen WinProc.
Also alle Controls/Komponente oder wie auch immer die über meine DLL in der HauptAnwendung erstellt werden.
Ich halte diese Form des Anwendungsaufbaus nicht für optimal.
Wenn tatsächlich alle Nachrichten in einer WinProc landen, wird eigentlich überhaupt kein Hook benötigt.
Du bekommst alle Tastaturereignisse und entscheidest selbst ob diese an die jeweils orginale WindProc weitergegeben oder anderweitig verarbeitet werden.

MMSystem dürfte für meine zwecke reichen. Wenn man es genau benennen will "winmm.dll"
Dafür muss ich keine Midi Schnittstelle (Siehe Midi Componente) verwenden.
Ausgenommen jetzt beim konvertieren von meinem Format nach MIDI da benötige ich zumindest den Header
um die Daten Ordnungsgemäß konvertieren und abspeichern zu können.
Wenn die Daten über eine separate Schnittstelle kommen, kann die Anwendung diese empfangen und verarbeiten, ohne Rücksicht darauf, welche Anwendung gerade den Focus hat.

Der gepostete Code bezieht sich nur darauf, wie die DLL geladen wird.
Wichtig wäre aber, was macht die DLL wenn ein Ereignis eintritt, bzw. wie gibt diese das Ereignis an die Anwendung weiter. Wie reagiert deine Anwendung auf das Ereignis, das von der DLL an die Anwendung weiter gereicht wird.

Meine Button lösen kein Event mehr aus nach einem klick.
...
Meine Button bekommen nicht mehr den Focus sobald ich den Focus auf die HauptAnwendung lege.
Da schein in deiner speziellen WinProc etwas nicht so zu laufen wie es sollte.
Hier wäre auch etwas Code angebracht, insbesondere:
- Wenn eine Nachricht selbst verarbeitet wird, stimmt der Rückgabewert, werden zusammengehörige Nachrichten auch auf die selbe Weise verarbeitet (Stichwort KeyDown, KeyUp).
- Wie wird sichergestellt, dass die richtige orginale WindProc des Steuerelements aufgerufen wird, zu dem das Handle der Nachricht gehört.
- Warum wird der Focus verändert und für was dient dieses "GetFocus" in deiner SuperClass überhaupt?

Häng am besten mal das Projekt an deinen Beitrag.
  Mit Zitat antworten Zitat