私が作ってくれていないゲームのクライアントローダーで作業しています。私はクライアントに送るためのマウスイベントとキーイベントのライブラリを構築しました。彼らは大部分の仕事をしています。しかし、私は理解できないような1ビットがあります。どのWM_Messageを使用しますか?
私は私のコードの入力部分にこの作られた:これは正常に動作しますが、それは考慮しない二つのものがある
[DllImport("user32.dll")]
public static extern IntPtr PostMessage(IntPtr hWnd, uint Msg, uint wParam, uint lParam);
//Send each character of string one at a time
foreach(Char c in Input)
PostMessage(mainwnd, (uint)WM.CHAR, c, 1);
//Send final enter key to send message in game
PostMessage(mainwnd, (uint)WM.CHAR, 0x0D, 1);
を。あなたは、
PostMessage(mainwnd, (uint)WM.CHAR, 0x0D, 1);
のようなものを試してみましたメニューを開くためのホットキーがありますチャット開くために入力する前にEnterキーを押すことが要求されるゲーム中の
- ゲームはそれを処理しません。 PostMessageを使ってメニューを開くと、同じことが起こります。メッセージを送信する前にチャットウィンドウが開いていない限り、何も解析されません。
私は間違ったWM_Messageを使用していますが、必要なものが見つかりません。私が試してみました:
- をWM_CHAR
- WM_SYSCHAR
- WM_MENUCHAR
- WM_HOTKEY
- WM_APPCOMMAND
- WM_KEYUP
そしておそらく他のいくつか続いWM_KEYDOWN、ない運。誰がどのコマンドがうまくいくか知っていますか?
SendInputは最高の賭けのようですが、パラメータを見ることでウィンドウハンドルを取ることはありません。 PostMessageが必要な理由は、画面を最小限に抑えながらデータを送信できるからです。多分私はそれを間違って読んでいるが、SendInputは画面の完全な焦点を必要とするようだ。 – ozdrgnaDiies
あなたはわかりません。 「フォーカス」は、キーボード入力の仕組みです。一度に1つのウィンドウだけがキーボード入力メッセージを受け取ることができます:キーボードフォーカスのあるウィンドウ。あなたが集中していないウィンドウにキーボード入力を送信しようとしているなら、あなたは賭博をしています。この場合、あなたは失うように聞こえるでしょう。 – tenfour
これを説明する別の方法は...ウィンドウを指定することができれば、キーボード入力のシミュレーションをうまくやっていないことです。キーボードドライバはウィンドウハンドルについて何も知らない。 – tenfour