![]() |
API Tastaturhooks Problem
hallo
ich bin dabei eine anwendung mit Borland Delphi 6 zu programmieren, bei der der user die möglichkeit haben soll, durch schnelltasten, bestimmte aktionen durchzuführen, auch wenn das programm gerade nicht aktiv, also minimiert, im tray oder sonstwo ist. dazu muss ich wohl Windows API Hooks verweden. ich habe mir dazu bereits ein paar tutorials durchgelesen und die entsprechenden funktionen (Hook/Unhook) in eine DLL ausgelagert; das ganze funktioniert auch schon, allerdings treten dabei gewisse unschöne probleme auf, die es bei anderen programmen, die offensichtlich auch Hooks verwenden, nicht gibt. und zwar sollen das ganze auch funktionieren wenn das system durch andere anwendungen belastet ist wie z.B. wenn ein spiel an ist. und zwar wenn ich einen keyboardhook installieren lasse vom programm durch die DLL dann ist dieser so eingestellt ist, dass er auf alle tastatursignale reagiert und mit SendMessage oder PostMessage eine Nachricht an das Hauptprogramm schickt. die nachricht empfange ich im hauptprogramm mit (SendMessage) WndProc(var Mess:TMessage); (PostMessage) Application.OnMessage Mit SendMessage funktioniert es, das system ruckelt aber kurz. Mit PostMessage funktioniert es generell auch, aber wenn das system stärker ausgelastet ist (also wenn ein spiel an ist) dauert es lange (bis zu 30 sek) bis das signal ankommt bzw bis das programm reagiert (es reagiert mit einem audio signal). Ich weiß nicht ob man es nur mit SendMessage bzw PostMessage hinbekommen kann dass es einwandfrei funktioniert und weiß auch nicht woher die jeweiligen probleme kommen...vielleicht wartet das sytem bei sendmessage bis die nachricht da ist und ruckelt deswegen... meine frage : kann man das problem generell so einfach lösen (also ohne verwendung von MMF o.ä.)? und wenn nicht : wo finde ich tutorials für MMF in delphi ? TIA |
Re: API Tastaturhooks Problem
Hi,
wenn du SendMessage aufrufst, kehrt SendMessage erst wieder zu dem aufrendem Block zurück, wenn die Anweisung komplett abgearbeitet wurde. PostMessage hingegen kehrt sofort nach Abschicken zurück. Falls Du PostMessage verwendest, könntest Du die Priorität von Deinem Programm höher ansetzen, sodass die Nachrichten eventuell schneller ankommen. mfG mirage228 P.S.: Herzlich Willkommen in der DP :) |
Re: API Tastaturhooks Problem
Lass das mit den Hooks, das geht viel einfacher: mit RegisterHotKey
Für beispiele such mal hier in der DP, da sollte es einiges geben. ciao, Philipp PS: Herzlich Willkommen in der DP! |
Re: API Tastaturhooks Problem
danke schonmal
ich hab das mal mit den hotkey funktionen ausprobiert, allerdings habe ich da noch ein problem: wenn eine taste als globaler hotkey für mein programm definiert ist, kann sie bei anderen programmen garnicht verwendet werden. (?) falls das mit hotkeys nicht funktioniert : wie erhöhe ich denn die priorität meiner anwendung? und noch etwas: ich suche eine gute komponente o.ä. mit der ich audio dateien mit einer bestimmten lautstärke (in prozent der lautstärke der datei) abspielen lassen kann. ich habe da schon etwas ("Wave Audio Package"), aber das macht dann auch wieder bei höherer systemauslastung probleme... das gehört jetzt wohl hier nicht rein aber weiß ja trotzdem hier jemand was dazu |
Re: API Tastaturhooks Problem
Moin Darklord,
Zitat:
Sollte also ein anderes Programm den gewünschten Hotkey bereits belegt haben, hast Du keine Chance. Zitat:
Mach' dafür also bitte einen neuen Thread auf. Danke. |
Re: API Tastaturhooks Problem
Zitat:
|
Re: API Tastaturhooks Problem
Zitat:
ciao, Philipp |
Re: API Tastaturhooks Problem
naja, vielleicht ist das mit hotkeys sowieso nicht das richtige.
ich müsste dann nämlich auch einfache buchstabentasten als hotykeys registrieren und da kann es ja wahrscheinlich immer mal sein dass die schon ein anderes programm hat (auf irgendeinem rechner). deswegen nochmal zu der postmessage variante : wie kann ich denn die priorität meiner anwendung erhöhen? und wären memory mapped files (über die ich bis jetzt nicht viel weiß) denn in der lage so einfache sachen wie postmessage oder sendmessage zu ersetzen oder "lohnt" sich das nur beim schicken größerer datenmengen? |
Re: API Tastaturhooks Problem
tja, postmessage mit höherer priorität ausprobiert, ergebnis : es kommt wieder zu rucklern in anderen programmen.
noch jmd eine idee? |
Re: API Tastaturhooks Problem
Du könntest es auch mal über die SendIpcMessage-Funktion aus der MadCodeHook-Lib versuchen ... ich denke, dass diese funktion das packen könnte ... MadCodeHook ist ein bestandteil der MadCollection die unter
![]() ciao, Philipp |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz