あなたの質問は私の興味をそそりましたので、私は少し掘り下げましたが、残念ながら私はあなたに適切な答えがありませんが、私は私が持っているものを共有したいと思いました。
私は、1998年に書かれた(Delphiで)キーボードフックを作成するこの例を見つけましたが、Delphi 2007でいくつかの微調整を行ってコンパイルできます。
これはSetWindowsHookEx
、コールバック関数を通過するコールを持つDLLであり、キーストロークをインターセプトできます。この場合、楽しみのためにそれらをいじくり回したり、左カーソルを右に変更したりします。その後、単純なアプリがDLLを呼び出し、レポートを返します。 TTimerイベントに基づくその結果。興味があれば、Delphi 2007ベースのコードを投稿できます。
これは十分に文書化され、コメントが付けられており、キーを押す場所を決定するための基礎として使用できる可能性があります。キーストロークを送信したアプリケーションのハンドルを取得できれば、その方法で追跡できます。そのハンドルを使用すると、必要な情報を非常に簡単に取得できます。
他のアプリは、ショートカットキーを含めることができるため、ショートカットを確認してホットキーを決定しようとしました。これは、ホットキーの別の用語です。ただし、ほとんどのアプリケーションはこのプロパティを設定する傾向がないため、あまり返らない場合があります。そのルートに興味がある場合、DelphiはIShellLink
COMインターフェイスにアクセスできます。これを使用してショートカットをロードし、ホットキーを取得できます。
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へのアクセス権がある場合は、Steve TeixeiraとXavier Pachecoによる 『Borland Delphi 6 Developer's Guide』のショートカット/シェルリンクの操作に関する優れたセクションがあります。上記の私の例は、そことこのサイトからの肉屋バージョンです。
お役に立てば幸いです。
WM_HOTKEY
でメッセージメッセージログをホットキーを押した後、あなたはスパイの32ビットバージョンを実行する必要があります++ 。