2009-04-30 5 views
3

私はマウスとキーボードのイベントをシミュレートする方法を知っていますが、ユーザーがそれらを行ったかのように動作し、アクティブなウィンドウに影響します。私が必要とするのは、それらの入力の1つをシミュレートすることですが、アクティブではないウィンドウでシミュレートすることです。アクティブでないアプリケーションでマウスの移動/クリック/キー押下

私はそれが最小化されていると言っているわけではありません。たとえば、msPaintとメモ帳があるとします。メモ帳は塗料の前にあります。また、ペイントウィンドウの特定の座標でマウスのクリックをシミュレートしたいが、アクティブに設定せずに、ペイントの前にあるメモ帳を使用し続けることができます。

これはまったく可能ですか?ありがとう!

私はこの試みた:。。何もしない(=

  const int WM_KEYDOWN = 0x100; 
     Thread.Sleep(5000); 
     Process x = Process.Start(@"C:\WINDOWS\NOTEPAD.EXE"); 
     PInvokes.PlatformInvokeUSER32.SendMessage(x.MainWindowHandle, WM_KEYDOWN, ((int)Keys.W), 0); 

をしかし、それは動作しません:(

答えて

2

あなたがUI automation APIを試すことができますまた、レガシーアプリケーションをサポートしています

2

たぶん代わりのPostMessage機能を試してみてください。

[DllImport("user32.dll", CharSet=CharSet.Auto)] 
    private static extern int PostMessage(
      int hWnd, int msg, int wParam, IntPtr lParam); 
1

ターゲットAPに応じて、 p、多くの問題がある可能性があります。いくつかのアプリケーションは、WM_KEYDOWNまたはWM_CHYの代わりにWM_KEYUPをトリガーします。また、キーがすでにダウンしていて、無視されている可能性があります。 Webブラウザのようなターゲットの場合は、適切なウィンドウハンドルを取得する必要があります。 Winspectorはあなたのためにそれを得ることができます。

0

SendMessageでは、送信するウィンドウをアクティブにする必要があるため、コードは機能しません。 PostMessageを試してください。

関連する問題