あなたの質問が私の興味をそそったので、私は少し掘り下げました、そして残念ながら私はあなたに適切な答えを持っていませんが、私は私が持っているものを共有したいと思いました。
1998年に書かれた(Delphiで)キーボードフックを作成するこの例を見つけましたが、Delphi2007ではいくつかの調整を加えてコンパイルできます。
SetWindowsHookExこれは、コールバック関数を通過する呼び出しを含むDLLであり、キーストロークをインターセプトできます。この場合、楽しみのためにそれらをいじったり、左カーソルを右に変更したりします。次に、単純なアプリがDLLを呼び出し、レポートを返します。 TTimerイベントに基づく結果。興味があれば、Delphi2007ベースのコードを投稿できます。
これは十分に文書化され、コメントが付けられており、キーを押す場所を特定するための基礎として使用できる可能性があります。キーストロークを送信したアプリケーションのハンドルを取得できれば、その方法で追跡できます。そのハンドルを使用すると、必要な情報を非常に簡単に取得できます。
他のアプリは、ショートカットキーを含めることができるため、ショートカットを使用してホットキーを決定しようとしました。これは、ホットキーの単なる別の用語です。ただし、ほとんどのアプリケーションはこのプロパティを設定する傾向がないため、あまり返されない可能性があります。そのルートに興味がある場合、DelphiはIShellLinkCOMインターフェイスにアクセスできます。このインターフェイスを使用して、ショートカットをロードし、そのホットキーを取得できます。
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;
Safari Books Onlineにアクセスできる場合は、SteveTeixeiraとXavierPachecoによるBorlandDelphi6開発者ガイドにショートカット/シェルリンクの操作に関する優れたセクションがあります。上記の私の例は、そことこのサイトからの屠殺されたバージョンです。
お役に立てば幸いです。