プログラムが最小化されている場合、またはシステム トレイにある場合に ctrl キーが 2 回押されたことを検出する方法
コントロールキーを 2 回押すとメインフォームが表示される ac# プログラムを開発しようとしています。ホットキーの組み合わせのサンプルを見つけましたが、これはコントロール + 他のキーのような組み合わせのホットキーではありません。これは、コントロール キーを 2 回押すと検索ボックスが表示される Google デスクトップ アプリのようなものです。
プログラムが最小化されている場合、またはシステム トレイにある場合に ctrl キーが 2 回押されたことを検出する方法
コントロールキーを 2 回押すとメインフォームが表示される ac# プログラムを開発しようとしています。ホットキーの組み合わせのサンプルを見つけましたが、これはコントロール + 他のキーのような組み合わせのホットキーではありません。これは、コントロール キーを 2 回押すと検索ボックスが表示される Google デスクトップ アプリのようなものです。
あなたができることは、キーが押されるたびにキャプチャすることであり、おそらくバックグラウンドワーカーで時間の違いを比較します。
自分でしきい値を設定し、それよりも小さい場合は、それを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ビジュアライザーに基づいています
これは、キーボード フック( )の場合のようWH_KEYBOARD
です。
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;
}