SetWindowHookExを試すことができます。このようにして、プロセスに送信されたすべてのキーボードメッセージをフックして、それらを完全に配信することを停止できます(たとえば、フォーカスを持たずに自分のアプリで処理することができます)。それは非常に頑丈な方法ですが、一部のコピープロテクションはそれを好まないかもしれません。
通常の手順は次のとおりです。
は、ウィンドウメッセージをフックし、最初のフィルタリングを行うDLLを(あなたが別のプロセス/アドレス空間にロードする必要があるためでなければなりません)を作成します。通常は、独自のプロセスにフォーメーションを取得するために、いくつかのIPCメカニズムを使用します。マウスメッセージだけをフックすると、Windowsメッセージを使用して自分の隠しメッセージに情報を送信することができます。メッセージが到着しないようにするには、そこでチェーンを止めることができます。
IPCコールが自分のウィンドウに到着したとき。あたかもあなた自身がキーボードメッセージを持っているかのように処理してください。あなたが変更しようとするアプリケーションの動作がGetAsyncKeyStateに依存している場合
などを中心とした注意するようにしてくださいあなたは、このようにキャッチすることはできません唯一のものは)(です。そのような場合は、DLLを他のアドレス空間に注入して呼び出し自体をフックするだけですが、それはより高いレベルのハッキングです。
1つのアドバイス:ソフトウェアをフックするWindowsを開発するとき:頻繁に保存し、頻繁に保存してください!あなたが間違いを犯した場合、あなたは一挙にアプリケーションの全部をクラッシュさせるかもしれません...
keydownイベントでe.handled = trueを試しましたか? – Alain
@ Alain:何ですか? Windowsのメッセージにはそのようなものはありません。 – Puppy
@DeadMG ['System :: Windows :: Forms :: KeyPressEventArgs^e'](http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keydown.aspx#Y0) ' - >' ['Handled'](http://msdn.microsoft.com/en-us/library/system.windows.forms.keypresseventargs.handled.aspx)を参照してください。問題はそれが関連する可能性を除外するのに十分なほど明確ではなかった。 – Alain