使用AutoIt启动相机应用程序(Windows 10)

时间:2016-08-22 12:56:44

标签: windows-10 autoit

我正在尝试使用ShellExecuteWait()启动我的相机应用程序(Windows 10)(因为我希望我的脚本等到我关闭相机应用程序)。但我似乎无法让它发挥作用。我尝试使用帮助文件中的代码:

#include <MsgBoxConstants.au3>

Camera()

Func Camera()
   ;Execute Camera and wait for Camera to close
   Local $iReturn = ShellExecuteWait("notepad.exe")

   ;Display the return value
   MsgBox($MB_SYSTEMMODAL, "", "The return code from Notepad was: " & $iReturn)

EndFunc

显示记事本。关闭它时,会出现一个带有返回值的消息框。但是,当我将notepad.exe更改为explorer.exe时,ShellExecuteWait()似乎失败了(并且消息框会立即显示)。

您无法使用Run("camera.exe")在Windows 10上打开相机;与explorer.exe一样,此操作失败,消息框会立即显示。

这是我想要的代码:

#include <MsgBoxConstants.au3>

Camera()

Func Camera()
   ;Execute Camera and wait for Camera to close
   Local $iReturn = ShellExecuteWait("explorer.exe", "shell:AppsFolder\Microsoft.WindowsCamera_8wekyb3d8bbwe!App")

   ;Display the return value
   MsgBox($MB_SYSTEMMODAL, "", "The return code from Notepad was: " & $iReturn)

EndFunc 

1 个答案:

答案 0 :(得分:1)

对于像explorer这样的服务器进程,

ShellExecuteWait()可能无法正常工作。 explorer.exe始终在运行。对它的另一个调用只会告诉已经运行的explorer.exe显示一个额外的窗口(就像许多浏览器不会创建自己的另一个实例而只是一个新选项卡)。您可以使用 ProcessExplorer (来自 Sysinternals Suite )等工具检查当前流程层次结构。在那里你可以看到,记事本实际上是你的自动脚本的一个子流程,其中explorer.exe仍然是svhost.exe的孩子。

你仍然可以尝试这样的事情:

#include <MsgBoxConstants.au3>

Camera()

Func Camera()
   ;Execute Camera and wait for Camera to close
   local $iPID = ShellExecuteWait("explorer.exe", "shell:AppsFolder\Microsoft.WindowsCamera_8wekyb3d8bbwe!App")
   Sleep(3000)
   WinWaitClose("Camera")

   ;Display the return value
   MsgBox($MB_SYSTEMMODAL, "", "The Camera was closed." )

EndFunc

有了这个,你的脚本会等到没有更多的窗口被调用&#34; Camera&#34;存在。请注意,结果将取决于操作系统语言(例如,对于我来说,&#34; Kamera&#34;)。您可以使用工具 AutoIt窗口信息来查找与语言无关的特征。