1

这是一个有点不寻常的问题。我目前正在努力实现 Office 应用程序的自动化。基本上问题是,当我通过 RDP 执行我的应用程序时,我的应用程序能够与 Office 应用程序正确交互,但是如果我将应用程序设置为从 Windows 服务生成,则无法使用 SendInput() 发送击键。操作系统是 Win03 标准。

当从 Windows 服务生成应用程序时,我可以通过 pinvoke 读取窗口标题、通过互操作实现自动化等,但即使调用返回 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 不起作用的原因. 您也许可以尝试使用SendMessage或模拟按键点击PostMessage- 您将需要窗口句柄。

于 2010-11-22T06:56:19.963 回答
0

从 Windows Vista 开始,不再允许服务与桌面交互。这意味着他们将没有桌面上下文来发送键盘事件。

于 2010-11-22T07:36:15.237 回答