2010-11-22 104 views
1

这是一个有点不寻常的问题。我目前正致力于自动化Office应用程序。基本上问题是,当我通过RDP执行我的应用程序时,我的应用程序能够与Office应用程序正确交互,但是如果将应用程序设置为从Windows服务产生,我无法使用SendInput()发送按键。操作系统是Win03标准。C# - SendInput()从Windows服务不起作用,但返回1 - Win03

当从Windows服务中产生应用程序时,我可以通过pinvoke读取窗口标题,自动执行interop等操作,但即使调用返回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); 

回答

1

我相信SendInput会将密钥发送到当前活动窗口(或具有焦点的窗口)。通常,Windows服务将与不同的桌面(即交互式桌面)相关联 - 因此从Windows服务启动的应用程序也将与后台桌面关联 - 因此没有活动窗口(或焦点窗口),这可能是sendinout无法正常工作的原因。您也许可以尝试使用SendMessagePostMessage模拟键盘点击 - 您将需要窗口手柄。

+0

感谢您的帮助;出于某种原因,我完全忽略了这样一个事实,即没有能够获得焦点的窗口。 *抱怨*我正在用PostMessage进行测试。 – cursedfrogurt 2010-11-22 07:26:01

+0

非常感谢您的帮助;解决了这个问题! – cursedfrogurt 2010-11-22 07:31:02

0

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

相关问题