1

Ctrl+ Alt+Delキーの組み合わせを処理する方法はありますか。たとえば、クイズ アプリケーション (Win Forms) では、ユーザーはテストが終了するまで他のウィンドウに切り替えることができません。

C# の標準プロパティを使用して、キー ストロークCtrlとキー ストロークを個別にキャプチャできます。Altしかし、ユーザーがDelキーを押すと。コントロールがアプリケーションから出て、Windows がそれを処理します。

どんな考えでも役に立ちます。

ありがとう。

4

6 に答える 6

5

他の回答に基づくと、これは可能であるように思われます。私はこれを強くお勧めしませんが。たとえば、プログラムが何らかの理由でハングする必要があるとします(神は禁じられています...)。そうすると、ユーザーができるのは、電源ボタンでコンピューターの電源を切る(またはプラグを抜く)ことだけであるという状況になります。

これを行うのが困難であり、方法が十分に文書化されていないのは正当な理由です...

これが進むべき道のように見える唯一の方法は、これがキオスクコンピュータか何かである場合のPierre-AlainVigeantからのコメントです。次に、これを行うことは実際に理にかなっています!

于 2009-08-18T12:18:23.797 に答える
2

これは良いアプローチだとは思いません。

ユーザー向けのアプリケーションを開発しているので、ユーザーの一般的な行動を妨げようとしてはなりません。

Alt+Ctrl+Del キーの組み合わせについては、この記事をお読みください。

于 2009-08-18T06:40:51.340 に答える
2

AFAIK、Ctrl + Alt + Delはハードウェア割り込みを生成し、ソフトウェアアプリケーションでは処理できません。おそらく、これはシステム レベルのキーボード フックを介して処理できますが、それについてもよくわかりません。

于 2009-08-18T06:41:11.760 に答える
0

ここを見てください:

http://www.thescarms.com/vbasic/StopReBoot.aspx

基本的に、Win9x では、スクリーンセーバーが実行されているとシステムに認識させ (Ctrl-Alt-Delete シーケンスを無効にします)、WinNT ではキーボードを再マップします。

于 2009-08-18T06:54:16.757 に答える
0

うーん、本当の答えのない古いトピック。

短縮版:

  • システムのキーストロークをトラップするには、ドライバーを使用する必要があります
  • これを行うには、その目的で署名されたドライバーを提供するInterception Api を使用します。
  • Interceptionを使用するには、WDK (Windows Driver Kid) をダウンロードしてインストールする必要があります。
  • プログラムをテストするには、テスト システムで仮想マシンを使用します。稼働中の本稼働システムでドライバーをテストしたくない場合。

長いバージョン:

はい、可能です。これらのキーの組み合わせをインターセプトできるようにするには、カーネル層でキーボード ドライバーを提供する必要があります。理由を説明すると、一般に、Windows には 2 種類のキー ストロークがあります。システム キーストローク (WM_SYSKEYDOWN または WM_SYSKEYUP) と非システム キーストローク (WM_KEYDOWN または WM_KEYUP) があります。フックによって中断できるのは、システム以外のキーストロークのみです。これらのキーストローク メッセージはドライバーで生成され、システム メッセージ キューに渡されます。WM_SYSKEYDOWN または WM_SYSKEYUP がこのキュー内にある場合、Windows が処理できるようになる前に削除することはできません。

システム キー ストロークを SMQ に押し込まないようにするにはどうすればよいですか? それらをフィルタリングするために署名されたドライバーを提供します。自分でドライバーを作成して署名することは、最も簡単なことではありません。しかし、使用できる API があります。例: oblitaからの傍受。その API は、キーボードまたは下位のドライバーとやり取りするための署名付きドライバーを提供します。

Windows での主要なイベントの参照: https://msdn.microsoft.com/en-us/library/windows/desktop/ms646267(v=vs.85).aspx

于 2016-11-06T15:52:57.463 に答える
-1

Form.TopMost を true に設定し、Form.Activate() をミリ秒ごとに呼び出して、プロセスとエントリ スレッドの優先順位を上げます。

(見よ、あなたのアプリケーションがクラッシュする貧しいユーザーを見てください。)

于 2009-08-18T12:49:20.823 に答える