2012-05-08 10 views
1

私はC#で遊んでいて、私の小さなコンソールプログラムで私が開いているメモ帳ウィンドウに自分の名前を綴るようにしたい。私はウィンドウハンドル(IntPtr)を持っていますが、実際にここから何をすべきか分かりません。キーパッドをメモ帳に送るには?

私はSENDKEYを使用することができますが、私はメモ帳が集中したりしていない時はいつでも、それは仕事をしたい、と私は理解しますが、ウィンドウがフォーカスしている場合、それが唯一の仕事Senkey :(

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

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

何も起こらない:(そして、それはあなたが正しい

+0

はまた、この記事に見ることができます。 http://stackoverflow.com/questions/1922707/setting-external-application-focusそのVBが役立つはずです。 –

答えて

2

を破壊しない、SendKeyにのみ焦点のために働きますエドウインドウ。

あなたがしたいのは、P/Invoke SendMessageで、テキストボックスのハンドルにWM_SETTEXTを送ります(これはメインウィンドウのハンドルではありません)。それを得るには、GetWindowで到達するまでウィンドウの階層をナビゲートします。

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

+0

これはテキストを入力しないことに注意してください。 WM_SETTEXTを理解しているウィンドウでのみ動作します。 –

+0

メモ帳のウィンドウは何ですか。 – Blindy

+0

...メモ帳ウィンドウがする...。それはEDITコントロールなので。私はリッチテキストウィンドウが動作すると信じているので、ワードパッドもOKです。私は、テキストを入力するのではなく、他のテキスト入力フィールドでは機能しないかもしれないことを指摘しています。 –

0

メモ帳のウィンドウハンドルがある場合は、最初にフォアグラウンドウィンドウとして有効にしてからSendKeyを発行してください。

これが最前面ウィンドウとしてウィンドウを設定するためのP /呼び出しの署名です:

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

編集:同様の問題のために元の答え:https://stackoverflow.com/a/8953524/1149773