2010-11-22 14 views
1

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

Windowsサービスからアプリケーションを起動するときに、私はウィンドウキャプションを読み込み、pinvoke経由でinteropなどを自動化することができますが、呼び出しが1を返してもSendInput()メッセージは一見消えます。私はこの時点で対話にエスケープキーストロークを送信しようとしています。

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

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

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

EDIT: を他の誰がこの作品、この問題を持っている念のために:

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

答えて

1

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

+0

ありがとうございました。何らかの理由でフォーカスを受け取るウィンドウがないという事実を完全に吹き飛ばした。 *私は今PostMessageでテストしています。 – cursedfrogurt

+0

ありがとうございました。それが問題を解決しました! – cursedfrogurt

0

Windows Vistaでは、サービスとデスクトップとの対話が許可されなくなりました。つまり、キーボードイベントを送信するためのデスクトップコンテキストを持たないということです。

関連する問題