2016-06-16 51 views
1

PostMessageと入力してウィンドウに入力しようとしています。私はSendInputを使用していません。フォーカスがないからです。文字(A)が入力されていますが、Enterキーを送信するにはどうすればよいですか?これは私のコードの縮小バージョンです。その実行はEnterですが送信されませんか?C#でPostMessageでEnterキーを送信するにはどうすればよいですか?

[DllImport("user32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
static extern bool PostMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam); 

const int WM_KEYDOWN = 0x100; 
const int WM_KEYUP  = 0x101; 

const Int32 WM_CHAR = 0x0102; 
const Int32 VK_RETURN = 0x0D; 
const int VK_ENTER = 0x0D; 

IntPtr val = new IntPtr((Int32)'A'); 
PostMessage(WindowHandle, WM_KEYDOWN, (IntPtr)(val - 0x020), new IntPtr(0)); 
PostMessage(WindowHandle, WM_CHAR, (IntPtr)val, new IntPtr(0)); 
PostMessage(WindowHandle, WM_KEYUP, (IntPtr)(val - 0x020), new IntPtr(0)); 
PostMessage(WindowHandle, WM_KEYDOWN, (IntPtr)(val - 0x020), new IntPtr(0)); 
PostMessage(WindowHandle, VK_RETURN, (IntPtr)val, new IntPtr(0)); 
PostMessage(WindowHandle, WM_KEYUP, (IntPtr)(val - 0x020), new IntPtr(0)); 
+0

キーアップ/ダウンメッセージを偽っている点はあまりありません。生成したメッセージのみを送信します。ちょうど2つのWM_CHARメッセージ。 VK_RETURNはメッセージではありません。代わりに、System.Windows.Automationを常に優先します。 –

+0

私はそれのためにウィンドウの焦点を持っている必要があると思いますか? – jamie

答えて

2

あなたは入力を間違っていると思います。これを試して。

IntPtr val = new IntPtr((Int32)'A'); 
PostMessage(WindowHandle, WM_KEYDOWN, (IntPtr)(val - 0x020), new IntPtr(0)); 
PostMessage(WindowHandle, WM_CHAR, (IntPtr)val, new IntPtr(0)); 
PostMessage(WindowHandle, WM_KEYUP, (IntPtr)(val - 0x020), new IntPtr(0)); 
PostMessage(WindowHandle, WM_KEYDOWN, new IntPtr(VK_RETURN), new IntPtr(0)); 
PostMessage(WindowHandle, WM_KEYUP, new IntPtr(VK_RETURN), new IntPtr(0)); 
+0

申し訳ありませんが、「intからSystem.intPrtへの変換ができません」というエラーが表示されます – jamie

+0

そのショットを今すぐ送信してください。 – bkribbs

+0

@jamie助けてくれましたか? – bkribbs

関連する問題