这是一个有点不寻常的问题。我正在努力自动化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);
答案 0 :(得分:1)
我相信SendInput会将密钥发送到当前活动窗口(或具有焦点的窗口)。通常,Windows服务将与不同的桌面(交互式桌面)相关联 - 因此从Windows服务启动的应用程序也将与后台桌面关联 - 因此没有活动窗口(或具有焦点的窗口),这可能是sendinout无法正常工作的原因。您可以尝试使用SendMessage
或PostMessage
来模拟关键点击 - 您将需要窗口句柄。
答案 1 :(得分:0)
从Windows Vista开始,不再允许服务与桌面交互。这意味着他们没有桌面上下文来发送键盘事件。