Windows批处理文件 - 等待对话框关闭

时间:2018-01-08 15:35:04

标签: windows batch-file

以下是我正在处理的批处理脚本的片段,该脚本在启动时运行(或初始登录,视具体情况而定)。部分脚本依赖于存储在加密闪存驱动器上的文件。

我希望脚本等到用户输入加密密码并关闭对话窗口后再继续。

我目前的尝试涉及寻找一个标题为“#34;输入外部中间密码" (见截图)并继续循环,直到该窗口不再存在。

问题是TASKLIST似乎无法通过标题找到这个窗口,而我还没有找到原因。 如果我将/FI参数更改为类似"WINDOWTITLE eq Untitled - Notepad"的内容并再次运行脚本,只要我打开一个新的记事本文档,循环很乐意继续(所以我知道至少那部分工作如预期的那样。

:DDP
TASKLIST /FI "WINDOWTITLE eq Enter External Media Password" | FINDSTR /C:"No tasks" > NUL
IF %ERRORLEVEL% NEQ 0 ( GOTO :DDP )

enter image description here

FWIW,在我挖掘解决方案时,我通过TASKLIST /V /FI "IMAGENAME eq EmsServiceHelper.exe"检查了父进程的密码提示,以查看打开的窗口,其中显示的窗口标题为EMS Message Dialog然而即使在我的过滤器中使用此窗口标题仍然无法正常工作。此外,无论密码提示是否打开,TASKLIST都会返回此窗口标题...因此可能不是它。

任何输入都有帮助!提前谢谢!

1 个答案:

答案 0 :(得分:0)

好的,我可以通过以下方式找到我的问题的解决方法:

:DDP
TYPE header.txt 2>NUL >NUL
IF ERRORLEVEL 1 ( GOTO :DDP )

现在发生的是脚本将尝试TYPE位于加密卷上的header.txt内容。只要卷仍然是加密的,该命令将以Access is denied(和错误级别1)失败,并继续循环。

一旦用户输入正确的密码,文件就会被解密并且命令会成功执行,从而打破循环并允许脚本继续运行。

对于确切的问题,这不是真正的“解决方案”,但它肯定是一种可用的解决方法,并且可以按照需要运行。

为了完整起见,2> NUL阻止Access is denied在循环中重复打印到控制台,并且> NUL阻止在文件访问后打印header.txt的内容理所当然的。