2009-06-10 5 views
3

私が探しているのは、Googleデスクトップに似た機能です。 Ctrlを2回速く押すと、小さな検索ボックスが表示されます。Ctrlキーをダブルクリックすると、どのように接続できますか?

私は、私がどこかで見つけ、かなり重いキーボードフッククラスを使用して試してみたが、それは、私は一度Ctrlキーを押すと思い、それがうまくいくmeunpredictable結果(すなわち、第1の時間を与え続け、それがキーを引き上げますいくつかの時間を押した?)。

とにかく、これは複雑にならないように思われるので、何か間違っていなければならないように感じます。私のアプリケーション(WPFアプリケーション)は、プライマリウィンドウの可視性を非表示に設定して実行し、タスクバーには存在しません。 Ctrl - Ctrlを実行すると、私はそれをキャッチしてウィンドウを表示したいと思います。

私は現在、ホットキーを登録することでこれをやっていますが、それは私が望むすべての機能を与えません(ダブルプレスCtrl)。ウィンドウが表示されているときに、フォーカスがなくなったときを検出する100%ばかばかしい方法は見つけられませんでした(この場合、再び非表示にしたい)。私はDeactivated、LostFocusなどに応答しようとしました...そしてそれらはほとんどの時間に働きます。しかし、ウィンドウが実際にアクティブ化されていないか、フォーカスを受けていない状態で表示されることがあります。これについてのAnyyアイデアも?

ありがとうございます!
Adam

答えて

3

SetWindowsHookExを使用して、キーボードイベントを低レベルでフックすることをお勧めします。

sample code in C++ここにはpinvoke.net's entryがあり、これをC#に移植するのに役立ちます。

C#コードの場合は、直接使用可能ですが、これを試すことができますCodeProject sample。私の記憶からは、ほとんどの場合、いくつかのバグがありました。ある時点で、私はこれをJad Engineに移植するのを手伝ってくれました。そこで、これを達成したクラス(UserActivityHook)を実装し、プロセスにいくつかのバグを修正しました。 ...

+0

この回答は、質問*のダブルタップの側面には対応していません。 – Synetech

2

表示されているときにフォームがアクティブ化されていない場合は、表示後にForm.Activateに電話する必要があります。簡単なデバッグのためには、トレースステートメントをGotFocus、LostFocus、Enter、Exit、Activate、Deactivateイベントに配置し、これらのイベントのどれかが一貫してニーズを満たしているかどうかを確認してください。