いつもお世話になります。1点質問をお願いします。
TOpenDialogが表示されている中で、例えば Alt + C などのショートカット
キーが押されたことを検出して、任意の動作をさせるにはどのようにすれば
よいのでしょうか。
TApplicationEventsなどを利用してみたのですが、メッセージ自体、
Applicationに届いていないようでした。そのため、今はキー押し下げ自体
も検出できていない状況です。
環境は次のとおりです。どうぞよろしくお願いします。
Windows XP SP2 + Delphi6 Personal
勝爺:「ヨク分かンねぇけど、これでこんなコト出来るのか? ハルコ」
春子:「そうよ、フックすれば出来ちゃうの」
勝爺:「なんだ? フック? ま、いいや、それよか、まだほっぺた痛えんだ」
春子:「マコトにツネラレたんだって?」
勝爺:「そうだよ、それも思いっきりだよ、マイッタぜ」
var
HookHandle: HHOOK;
AltKeyDown: Boolean;
function KeyHook(Code: Integer; WParam: WPARAM; LParam: LPARAM): LRESULT; stdcall;
begin
if (Code >= 0)and(Code = HC_ACTION) then begin
if (LParam and $80000000) = 0 then begin
case WParam of
VK_MENU : AltKeyDown := True;
ORD('C'): if AltKeyDown then ShowMessage('ALT+C');
end;
end else begin
case WParam of
VK_MENU : AltKeyDown := False;
end;
end;
end;
result := CallNextHookEx(HookHandle, Code, WParam, LParam);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
HookHandle := SetWindowsHookEx(WH_KEYBOARD, KeyHook, 0, GetCurrentThreadID);
try
OpenDialog1.Execute;
finally
if HookHandle <> 0 then UnHookWindowsHookEx(HookHandle);
end;
end;
真琴:「おかしいよ、ハルコさ〜ん、こっち来てぇ、学校に行く仕度しようとしたら」
春子:「どうした?マコト、おかしいって、ナニが?」
真琴:「今使ってる教科書がナイの、古いのばっかり」
春子:「ン? 古いって、いつの?」
真琴:「全部1年の時のモノ、ダレかイタズラした? あ〜もう遅刻しちゃう」
春子:「ナニ言ってンの、マコト、今1年生でしょ」
真琴:「えっ!? そんな…、まさか、…じゃ、カレンダーは? あれ〜、2年も前…」
春子:「ちょっと、おかしいのはマコトだよ、熱でもある? 今日は休んだ方がいいよ」
真琴:「そうする、…アタシ、チョット頭冷やして…冷静にならなきゃ」
春子:「じゃぁ、今日は"渚"を臨時休業にして、看病してあげようか? マコト」
真琴:「そっか、ホントに今が2年前なら、ハルコさんの"スナック渚"もあるんだ」
春子:「熱を計るから体温計もってくるネ、…マサルさ〜ん、体温計はドコだっけ」
勝爺:「そこの棚の箱にあるぞ、マコトは知恵熱でも出たのか〜?」
真琴:「だから、おじいちゃんはまだ死んでない…カイトさんもまだあの大商社の社員、もう一人は"ヒモ"やってるかぁ…」
春子:「なにブツブツ言ってンの、はい、マコト、コレで熱を…」
真琴:「あの二人がココに来るのは一年後なのよねぇ…」
春子:「え? ダレが来るって?」
真琴:「カイトさんとヒロミくん、二人でBeachBoys、来年ココに来るの」
春子:「BeachBoys? 来年? ナニよそれ…、熱のせいで変なコト言ってんの?」
真琴:「ハルコさんは信じないと思うけどぉ、アタシには分かってるの」
春子:「起きた時から変だよね、大丈夫? あれ?マコト、熱なんかナイじゃない」
真琴:「ううん、ハルコさん、すっごい熱気の夏になるよ、来年は…」
ご回答、どうもありがとうございます。
今、実際の使用方法に沿って試してみたのですが、うまくいきそうです。
もう少し確認してみて、目的が達せられたことを確認したうえでチェック
マークを付けさせていただきたいと思います。
フックという言葉はどこかで聞いたことはあったのですが、実際に使った
のはこれが初めてです。覚える価値が高い技術のように思えますので、
これを機会に調べてみたいと思います。(恥ずかしいところですが、書いて
いただいたコードについてはほんの一部分しか理解できていません。)
何はともあれ、長いこと悩んでいた問題に決着が付きそうです。本当に
どうもありがとうございました。
遅くなってしまい、申し訳ありません。
実際に適用して動作確認を行ったところ、うまく動作したことを確認
しました。そのため、チェックマークを付けさせていただきます。
このたびは本当にありがとうございました。
ツイート | ![]() |