以编程方式关闭Windows 8中的开始屏幕

时间:2012-06-01 03:56:15

标签: windows-8 automated-tests

我们有自动UI测试,可以定期运行虚拟机来验证我们的软件。 我想在此池中添加一些Windows 8发布预览计算机,因此我们可以针对它运行自动化测试脚本,并确保我们的应用程序继续有效。

我们通过从干净的快照启动虚拟机来确保我们的测试始终以干净的平台开始。当机器启动时,它们的开始菜单/启动文件夹中有一个快捷方式,用于启动脚本。

问题是,在Windows 8上,当机器启动时会显示启动屏幕,我们的UI测试无法与应用程序交互,因为启动屏幕会阻止所有内容。他们试图点击鼠标并最终意外启动随机地铁应用程序,所有测试都失败了。

我以前在Windows 8消费者预览下工作了。我们的脚本在启动时会调用IShellDispatch4.ToggleDesktop,这会导致启动屏幕隐藏。

在发布预览下,此功能不再有效。

我也尝试过:

  • 创建explorer.exe的快捷方式as per this article。它没有用。

  • 创建按照this Howtogeek article调用explorer / ToggleDesktop的屏幕保护程序的快捷方式。它不起作用(看起来它可能只是调用IShellDispatch4.ToggleDesktop)。

5 个答案:

答案 0 :(得分:1)

听起来您已经在使用VM主机的API执行诸如从脚本启动和停止虚拟机之类的操作。您是否可以使用相同的API将 Windows + D 组合键发送到VM?这将显示桌面。

答案 1 :(得分:1)

我最终在RTM版本中做的是:

bootstrapper脚本运行,它假定开始菜单将接管整个屏幕。然后我们使用win32 SendInput键入D E S K T O P并返回

答案 2 :(得分:0)

我们公司遇到同样的问题,我们只是找到了解决方案。我们采用了AutoIt并制作了一个点击“桌面”磁贴的脚本。然后我们将AutoIt'编译'为可执行文件exe,我们将虚拟图像与各自的启动文件夹捆绑在一起。

Autoit Compiler

我们的脚本使用命令:

MouseClick("left", x, y)

其中x和y是桌面图块中的坐标。我们的图像总是会恢复到干净的状态(就像你的一样),所以这个图块始终处于相同的位置。

答案 3 :(得分:0)

这是一个解决方案,汇集了来自各地的比特。

我们的想法是,我们要输入'desktop',然后输入Enter / Return hit(Orion的想法),并在每次登录时执行此操作(参考文章中的计划任务想法),但避免使用自定义win32二进制文件。 我的解决方案是使用PowerShell来避免win32二进制文件。

将以下PS脚本保存在c:\ sendkeys.ps1:

[void] [System.Reflection.Assembly]::LoadWithPartialName("'System.Windows.Forms")
[System.Windows.Forms.SendKeys]::SendWait("desktop{ENTER}")

然后在每个日志上创建一个计划任务,使用以下参数启动Powershell:

powershell -executionpolicy bypass -nologo -file c:\sendkeys.ps1

答案 4 :(得分:0)

@ Michael Bisbjerg

嗨!您也可以使用此代码按下并释放Windows密钥并直接发送到桌面:

Send("{LWINDOWN}{LWINUP}")

乔纳森