Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi API Tastaturhooks Problem (https://www.delphipraxis.net/33008-api-tastaturhooks-problem.html)

DarkLord0 31. Okt 2004 12:46


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

mirage228 31. Okt 2004 12:50

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 :)

c113plpbr 31. Okt 2004 12:52

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!

DarkLord0 31. Okt 2004 17:32

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

Christian Seehase 31. Okt 2004 21:27

Re: API Tastaturhooks Problem
 
Moin Darklord,

Zitat:

Zitat von Darklord0
wenn eine taste als globaler hotkey für mein programm definiert ist, kann sie bei anderen programmen garnicht verwendet werden. (?)

Ein Hotkey kann nur einmal registriert werden, wobei auch noch die Regel gilt: Wer zuerst kommt mahlt zuerst.
Sollte also ein anderes Programm den gewünschten Hotkey bereits belegt haben, hast Du keine Chance.

Zitat:

Zitat von Darklordß
und noch etwas:...

Hier gilt die Regel: Neue Frage - Neuer Thread.
Mach' dafür also bitte einen neuen Thread auf.
Danke.

DarkLord0 31. Okt 2004 23:12

Re: API Tastaturhooks Problem
 
Zitat:

Zitat von Christian Seehase
Ein Hotkey kann nur einmal registriert werden, wobei auch noch die Regel gilt: Wer zuerst kommt mahlt zuerst.
Sollte also ein anderes Programm den gewünschten Hotkey bereits belegt haben, hast Du keine Chance.

ne, ich meinte das eigentlich so : wenn mein programm sich den hotkey registriert, hat diese taste in anderen programmen (z.B. notepad.exe) keine funktion/auswirkung mehr

c113plpbr 1. Nov 2004 09:30

Re: API Tastaturhooks Problem
 
Zitat:

Zitat von DarkLord0
ne, ich meinte das eigentlich so : wenn mein programm sich den hotkey registriert, hat diese taste in anderen programmen (z.B. notepad.exe) keine funktion/auswirkung mehr

Das ist richtig. Das selbe problem hatte ich auch ... naja, und manchmal ist da eine einfachere, dafür dümmere lösung besser: Hotkey "deaktivieren" und tastendruck simulieren ... ;)

ciao, Philipp

DarkLord0 1. Nov 2004 12:43

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?

DarkLord0 6. Nov 2004 00:08

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?

c113plpbr 6. Nov 2004 12:44

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 http://www.madshi.net/ zum download angeboten wird.

ciao, Philipp


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:51 Uhr.
Seite 1 von 2  1 2      

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