Votre question a piqué mon intérêt, j'ai donc fait un peu de creuser et de tout, malheureusement je n'ai pas de bonne réponse pour vous, je pensais que je voudrais partager ce que j'ai.
J'ai trouvé cet exemple de création de hook clavier (en Delphi) écrit en 1998, mais il est compilable en Delphi 2007 avec un couple de réglages.
C'est une DLL avec un appel à l' SetWindowsHookEx
qui passe à travers une fonction de rappel, qui peut alors intercepter les frappes de touche: Dans ce cas, c'est bricoler avec eux pour s'amuser, changer de curseur de gauche à droite, etc. Une application simple, puis appelle la DLL et rend compte de ses résultats sur la base d'un TTimer événement. Si vous êtes intéressé, je peux poster le Delphi 2007 en fonction du code.
Il est bien documenté et commenté et vous pourriez l'utiliser comme une base de travail où une touche est en cours. Si vous pouviez obtenir le descripteur de l'application qui a envoyé les frappes de touche, vous pouvez retrouver de cette façon. Avec cette poignée vous seriez en mesure d'obtenir les informations dont vous avez besoin assez facilement.
D'autres applications ont essayé de déterminer raccourcis en passant par leurs Raccourcis, car ils peuvent contenir une touche de Raccourci, qui est juste un autre terme pour la touche de raccourci. Cependant, la plupart des applications n'ont pas tendance à définir cette propriété de sorte qu'il pourrait ne pas revenir beaucoup. Si vous êtes intéressé par cette route, Delphi a accès à l' IShellLink
COM interface qui vous pouvez utiliser pour charger un raccourci vers le haut et d'obtenir sa touche de raccourci:
uses ShlObj, ComObj, ShellAPI, ActiveX, CommCtrl;
procedure GetShellLinkHotKey;
var
LinkFile : WideString;
SL: IShellLink;
PF: IPersistFile;
HotKey : Word;
HotKeyMod: Byte;
HotKeyText : string;
begin
LinkFile := 'C:\Temp\Temp.lnk';
OleCheck(CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IShellLink, SL));
// The IShellLink implementer must also support the IPersistFile
// interface. Get an interface pointer to it.
PF := SL as IPersistFile;
// Load file into IPersistFile object
OleCheck(PF.Load(PWideChar(LinkFile), STGM_READ));
// Resolve the link by calling the Resolve interface function.
OleCheck(SL.Resolve(0, SLR_ANY_MATCH or SLR_NO_UI));
// Get hotkey info
OleCheck(SL.GetHotKey(HotKey));
// Extract the HotKey and Modifier properties.
HotKeyText := '';
HotKeyMod := Hi(HotKey);
if (HotKeyMod and HOTKEYF_ALT) = HOTKEYF_ALT then
HotKeyText := 'ALT+';
if (HotKeyMod and HOTKEYF_CONTROL) = HOTKEYF_CONTROL then
HotKeyText := HotKeyText + 'CTRL+';
if (HotKeyMod and HOTKEYF_SHIFT) = HOTKEYF_SHIFT then
HotKeyText := HotKeyText + 'SHIFT+';
if (HotKeyMod and HOTKEYF_EXT) = HOTKEYF_EXT then
HotKeyText := HotKeyText + 'Extended+';
HotKeyText := HotKeyText + Char(Lo(HotKey));
if (HotKeyText = '') or (HotKeyText = #0) then
HotKeyText := 'None';
ShowMessage('Shortcut Key - ' + HotKeyText);
end;
Si vous avez accès à Safari Livres en Ligne, il y a un bon article sur le travail avec les raccourcis / liens shell dans le Borland Delphi 6 Guide du Développeur par Steve Teixeira et Xavier Pacheco. Mon exemple ci-dessus est une boucherie version à partir de là et de ce site.
Espérons que ça aide!