1

私はC#で遊んでいて、開いているメモ帳ウィンドウで私の小さなコンソールプログラムに私の名前を綴ってもらいたいと思っています。ウィンドウハンドル(IntPtr)を持っていますが、ここから何をすべきか本当にわかりません。

SendKeyを使用することもできますが、メモ帳にフォーカスがあるかどうかに関係なく機能させたいのですが、Senkeyは、ウィンドウにフォーカスがある場合にのみ機能します:(

編集: 私は次のことを試しました(Bを押すことをシミュレートしようとしています):

PostMessage(NotepadWindowHandle, 0x100, 0x42, 0);
Thread.Sleep(1000);
PostMessage(NotepadWindowHandle, 0x101, 0x42, 0);

何も起こりません:(そしてそれは壊れません

4

2 に答える 2

2

あなたは正しいです、SendKey焦点を合わせたウィンドウでのみ機能します。

あなたがしたいのは、テキストボックスのハンドルをP / InvokeSendMessageして送信WM_SETTEXTすることです(これはメインウィンドウのハンドルではないことに注意してください!)。これを取得するには、で到達するまでウィンドウ階層を下に移動しますGetWindow

景品として、テキストボックスのハンドルを取得するには、メインのメモ帳ウィンドウのハンドルを呼び出すだけで、文字通り最初の子になりますGetWindowGW_CHILD

于 2012-05-08T16:50:51.197 に答える
0

メモ帳のウィンドウハンドルがある場合は、最初にそれをフォアグラウンドウィンドウとしてアクティブにしてから発行してみSendKeyませんか?

これは、ウィンドウをフォアグラウンドウィンドウとして設定するためのP/Invokeシグニチャです。

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);

編集:同様の問題に対する以前の回答:https ://stackoverflow.com/a/8953524/1149773

于 2012-05-08T17:37:10.557 に答える