3

特定のアプリケーションを開いてフォーカスしているときに F2 キーを押すと、ウィンドウの API RegisterHotKey関数を使用してマクロを実行しています。

問題は、これにより F2 キーが Excel などの他のアプリケーションで機能しなくなることです。

RegisterHotKeyデフォルト アクションを停止しないようにするにはどうすればよいですか?

この回答HotKeyManagerのクラスを使用してホットキーを登録するシステム トレイ アプリケーションがあります。特定のキー (F2 など) が押されると、Windows API を使用してクローズド ソース アプリケーションが開いていてフォーカスされているかどうかを確認し、開いている場合は一連のSendKeysを送信します。

4

2 に答える 2

2

私の理解では、グローバルホットキーは、選択した1つ以上のアプリがフォーカスされている場合にのみ機能するようにします。SendKeys互換性のないアプリがフォアグラウンドにあると判断した場合、単にインターセプトされたストロークを単純化することはできませんか?

例えば、

if (IsSpecificWindowFocused())
{
    // Do work
}
else
{
    // Resend the key to whatever window is current
    SendKeys.Send("{F2}");
}
于 2012-09-05T16:05:22.180 に答える
2

RegisterHotKey はグローバルであるため、これらのキーストロークをすべてトラップします (つまり、あなたが要求したことを正確に実行できるとは思いません)。

ただし、このスレッド グローバル キーボード フック (C#) では、キーボード メッセージ フィルターの作成について説明しています。

明確にするために:RegisterHotKeyは、トレイアプリなど、フォーカスされているアプリに依存しないOS全体のキーボードショートカットが必要な場所に最適です。

Application.AddMessageFilter() は、特定のキーストロークの一貫した処理が必要な場合に必要なものですが、アプリが既にフォーカスを持っている場合のみです。

説明していることを実行し、.NET にとどまる方法は、OS で実行されているプロセスを監視し、アプリの実行中にのみグローバル フックを有効にすることです。

于 2012-09-05T13:02:38.320 に答える