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);

しかし、それは機能しません=(何もしません:(

4

4 に答える 4

2

UI 自動化 APIを試すことができます。レガシー アプリケーションもサポートします。

于 2009-04-30T13:58:45.410 に答える
2

代わりに PostMessage 関数を試してみてください:

    [DllImport("user32.dll", CharSet=CharSet.Auto)] 
    private static extern int PostMessage(
            int hWnd, int msg, int wParam, IntPtr lParam);
于 2009-04-30T14:23:49.217 に答える
1

対象のアプリによっては、多くの問題が発生する可能性があります。一部のアプリは、WM_CHAR の代わりに WM_KEYDOWN または WM_KEYUP でトリガーします。また、キーがすでにダウンしており、無視されている可能性があります。Web ブラウザーなどのターゲットの場合、適切なウィンドウ ハンドルを取得する必要があります。Winspector はそれを取得できます。

于 2009-12-15T23:20:22.063 に答える
0

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

于 2011-11-01T18:27:19.083 に答える