3

そこで、ホスト コンピューターをロックするプログラムを作成しようとしています。これまでのところ、パスワードを作成できるメインフォームがあり、コンピューターをロックできます。パスワードが作成されると、MD5 のユーザーの AppData 内の場所に保存されます。

パスワードの作成とビットのチェックは問題なく完了しましたが、ロックを希望どおりに機能させる方法がわかりません。通常、これが実行されるコンピューターは Windows (つまり、WinKey+L) を介してロックされますが、常に実行される別のプログラムを監視する必要が生じました。ただし、これらのコンピューターは公共の場所にある場合があるため、ユーザーの身元が確認された後にのみ入力へのアクセスを許可する方法を探しています。

プログラムが正常に終了するのを防ぐことはできますが、GUI の境界外でクリックやキーストロークを検出するのは少し問題があります。Deactivate イベントを処理しようとしましたが、それで発生したクリックをキャンセルできないため、うまくいきません。MouseMove も使用してみましたが、マウスがフォームの境界内で移動したときにのみイベントが発生することに気付きました。Leave イベントもリッスンしようとしましたが、これもうまくいきませんでした。

キーストロークについては、KeyPress イベントの引数を確認してe.KeyChar != '\t' && e.KeyChar != '\r'(Enter キーは \r でしょうか?)、イベントをキャンセルしてみましe.Handled = true;た。いずれにせよ、Alt-Tab は引き続き使用できます。

また、キーストローク チェックの問題については、代わりに Deactivate チェックを使用して、FormClosing も処理できることに気付きました。ただし、Deactivate イベント ハンドラーも機能しません。含まれているコードは次のとおりです。

this.BringToFront();
this.Focus();

この時点で、キーストロークと非アクティブ化ハンドラーに対して行っていることは小さなエラーであると確信していますが、クリックの問題に対して何をすべきかわかりません。どんな助けでも大歓迎です。

4

1 に答える 1

1

探しているのは、オペレーティング システムによって提供される、より強力な一連のインターフェイスです。これらの関数をプラットフォームで呼び出すことはできますが、API をマーシャリングする方法を知っている必要があります。これは、より詳細な制御を可能にする多くのライブラリが C++ で記述されているためです。ネイティブ C++ を使用する場合は、これらのコマンドを呼び出す方がより自然ですが、C++ はより注意を払う必要があり、学習に時間がかかります。

キーストロークまたはクリックをキャンセルまたはオーバーライドする場合は、グローバル フックを使用して実行できます。ここにそれに関する記事があります http://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C

しかし、それは対象の表面をなぞるだけです。Windows の内部構造と Windows API について少し学ぶ必要があります。このトピックに関する本がいくつかあり、非常に深いです。

于 2013-06-08T03:55:20.477 に答える