1

これはやや珍しい問題です。現在、Office アプリケーションの自動化に取り組んでいます。基本的に問題は、RDP 経由でアプリを実行するとアプリが Office アプリと正しくやり取りできることですが、Windows サービスからアプリケーションを起動するように設定すると、SendInput() を使用してキーストロークを送信できません。OSはWin03 Std.

Windows サービスからアプリを生成すると、ウィンドウのキャプションを読み取ったり、相互運用機能を自動化したりできますが、呼び出しが 1 を返しても、SendInput() メッセージは一見消えてしまいます。この時点で行うことは、エスケープ キーストロークをダイアログに送信することです。

キーストロークを仮想キーとスキャンコードの両方で送信してみました。

アイデアやヒントはありますか?前もって感謝します!

(ところで:この種の自動化はMSFTによってサポート/認可されていないことを認識しています。)

編集: 他の誰かがこの問題を抱えている場合に備えて、これは機能します:

[DllImport("user32")]

public static extern bool PostMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);


bool returnVal = NativeWin32.PostMessage(popup, 0x0100, new IntPtr(0x1b), IntPtr.Zero);
4

2 に答える 2

1

SendInput は現在アクティブなウィンドウ (またはフォーカスのあるウィンドウ) にキーを送信すると思います。通常、Windows サービスは別のデスクトップ (インタラクティブなデスクトップ) に関連付けられます。そのため、Windows サービスから起動されたアプリはバックグラウンド デスクトップにも関連付けられます。したがって、アクティブなウィンドウ (またはフォーカスのあるウィンドウ) がなく、それが原因で sendinout が機能しない可能性があります。 . SendMessageorを使用してキー クリックをシミュレートしてみてくださいPostMessage。そのためにはウィンドウ ハンドルが必要です。

于 2010-11-22T06:56:19.963 に答える
0

Windows Vista 以降、サービスはデスクトップと対話できなくなりました。つまり、キーボード イベントを送信するためのデスクトップ コンテキストがありません。

于 2010-11-22T07:36:15.237 に答える