2012-04-10 15 views
3

私は1つのゲームを実行しており、ゲームに1つのオーバーレイを表示しようとしています。ユーザは彼の詳細を入力することができる。ここで問題となるのは、ユーザーが入力したキーストロークがゲームソースで利用可能であることと、キーストロークをオーバーレイに限定することだけです。
私はCEFを使用してコンテンツを表示するオーバーレイを表示するために、ネイティブのC++ DLLを使用しています。
ユーザーの詳細が他のプログラムやプロセスに公開されないように、このことを安全に行う方法はありますか?
キーボードストロークを1つのプロセスに制限する

ご協力いただきまして誠にありがとうございます。

+0

keydownイベントでe.handled = trueを試しましたか? – Alain

+0

@ Alain:何ですか? Windowsのメッセージにはそのようなものはありません。 – Puppy

+0

@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

答えて

0

SetWindowHookExを試すことができます。このようにして、プロセスに送信されたすべてのキーボードメッセージをフックして、それらを完全に配信することを停止できます(たとえば、フォーカスを持たずに自分のアプリで処理することができます)。それは非常に頑丈な方法ですが、一部のコピープロテクションはそれを好まないかもしれません。

通常の手順は次のとおりです。

  • は、ウィンドウメッセージをフックし、最初のフィルタリングを行うDLLを(あなたが別のプロセス/アドレス空間にロードする必要があるためでなければなりません)を作成します。通常は、独自のプロセスにフォーメーションを取得するために、いくつかのIPCメカニズムを使用します。マウスメッセージだけをフックすると、Windowsメッセージを使用して自分の隠しメッセージに情報を送信することができます。メッセージが到着しないようにするには、そこでチェーンを止めることができます。

  • IPCコールが自分のウィンドウに到着したとき。あたかもあなた自身がキーボードメッセージを持っているかのように処理してください。あなたが変更しようとするアプリケーションの動作がGetAsyncKeyStateに依存している場合

などを中心とした注意するようにしてくださいあなたは、このようにキャッチすることはできません唯一のものは)(です。そのような場合は、DLLを他のアドレス空間に注入して呼び出し自体をフックするだけですが、それはより高いレベルのハッキングです。

1つのアドバイス:ソフトウェアをフックするWindowsを開発するとき:頻繁に保存し、頻繁に保存してください!あなたが間違いを犯した場合、あなたは一挙にアプリケーションの全部をクラッシュさせるかもしれません...

+0

あなたの返事をありがとう。私はSetWindowHookExを使ってキーボードメッセージをブロックしようとしましたが、それでもゲームがキーボードストロークを取得するのを妨げませんでした。 – Raj

+0

@Raj:あなたの最初の行動は、ゲームがキーボードイベントをどのように検出するかを決めることです。明らかに通常のWM_KEY *メッセージではありません。非同期、低レベルのキーボードメッセージかもしれません。おそらく、メッセージ自体をフックします。この情報がなければ、暗闇の中で撮影しています。 –

+0

私はUnityフレームワークに基づいてゲームを使用しています。それは入力マネージャとイベントクラスを使用してキーストロークを取得し、私はこれらの2つのクラスがWindowsのループで動作すると信じています。私はこれで少し成功しました。私は自分のネイティブdllの中に排他的なキーボードアクセスで直接入力を使用し、それはゲームが任意のキーストロークを得るのを防いだ。しかし、ここでキャッチするのは、他の誰かがネイティブコードの直接入力動作を模倣した場合でも、キーストロークを得ることができるということです。 – Raj

関連する問題