1

プログラムが最小化されている場合、またはシステム トレイにある場合に ctrl キーが 2 回押されたことを検出する方法

コントロールキーを 2 回押すとメインフォームが表示される ac# プログラムを開発しようとしています。ホットキーの組み合わせのサンプルを見つけましたが、これはコントロール + 他のキーのような組み合わせのホットキーではありません。これは、コントロール キーを 2 回押すと検索ボックスが表示される Google デスクトップ アプリのようなものです。

4

5 に答える 5

1

あなたができることは、キーが押されるたびにキャプチャすることであり、おそらくバックグラウンドワーカーで時間の違いを比較します。

自分でしきい値を設定し、それよりも小さい場合は、それを2回押すと見なして、必要なことを実行します。

テストされていないコンポーネントは、次のようになります。

    private readonly DateTime _originDateTime = new DateTime(0);
    private DateTime _lastKeyPress;

労働者をフックアップ:

        _backgroundWorker = new BackgroundWorker { WorkerSupportsCancellation = false };
        _backgroundWorker.DoWork += DoBackgroundWork;
        _backgroundWorker.RunWorkerAsync();

DoBackgroundWorkメソッドを実装します。

    private void DoBackgroundWork(object sender, DoWorkEventArgs doWorkEventArgs)
    {
        do
        { 
                if (_lastKeyPress != _originDateTime)
                {
                    Thread.Sleep(DelayInMilliseconds);
                    DateTime now = DateTime.Now;

                    TimeSpan delta = now - _lastKeyPress;

                    if (delta < new TimeSpan(0, 0, 0, 0, DelayInMilliseconds))
                    {
                        continue;
                    }
                }

                //do stuff

        } while (true);
    }

そして、キーをキャプチャすることを忘れないでください:

    private void SomeEvent_KeyDown(object sender, KeyEventArgs e)
    {
        _lastKeyPress = DateTime.Now;
    }

これはXPathビジュアライザーに基づいています

于 2012-03-02T01:19:29.077 に答える
1

これは、キーボード フック( )の場合のようWH_KEYBOARDです。

于 2012-03-02T01:12:57.727 に答える
1

foxx1337 が提案したようなキーボードフックを使用してから、次のようにします。

int triggerThreshold = 500; //This would be equivalent to .5 seconds
int lastCtrlTick = 0;

private void OnCtrlPress()
{
    int thisCtrlTick = Environment.TickCount;
    int elapsed = thisCtrlTick - lastCtrlTick;
    if (elapsed <= triggerThreshold)
    {
        LaunchYourAppOrWhatever();
    }
    lastCtrlTick = thisCtrlTick;
}
于 2012-03-02T01:45:35.220 に答える