我一直在网上搜索有关如何在AppActive中关注窗口的解决方案,但无法找到我需要的内容,或者至少无法理解。简而言之,我的代码在SAP系统中进行了更改,然后保存,然后通过默认打印机生成pdf。随时出现“另存为”弹出窗口,我通过AppActive找到并通过发送密钥继续保存。
现在通常弹出窗口始终位于顶部并且没有问题,但是,它很少出现并且没有焦点,而是在任务栏中闪烁。代码然后找到它并继续放置文件名。由于它没有焦点,因此将名称放在焦点(通常是SAP)中。
如何确保窗口始终处于焦点位置?我是编码的新手,所以我喜欢简单的解决方案:)。
Set WScr = CreateObject("WScript.Shell")
Do
WScript.Sleep 50
Loop Until WScr.AppActivate("Save PDF File As") ' loops until save as popup appears
WScript.Sleep 1000
FileName = filepath & order(i) & ".pdf"
WScr.SendKeys FileName
WScript.Sleep 250
WScr.SendKeys "{ENTER}"
WScr.SendKeys "{TAB}" ' in case same name exists, overwrite question tab chooses yes
WScr.SendKeys "{ENTER}" ' press yes
WScript.Sleep 500
Set WScr=Nothing
答案 0 :(得分:0)
只需在每个sendkeys之前加AppActivate
,但不要在循环中。这是最好也是唯一的选择。
但为什么不直接从VBS控制SAP。请参阅http://scn.sap.com/community/gui/blog/2012/10/08/introduction-to-sap-gui-scripting并查找与objSAP.Alerts = False
类似的内容(取决于您获取对话框的原因)。
另外你为什么要进行对话?是因为文件已存在吗?如果是这样,请删除它并且没有对话框。
现在我说它是最好的,除了你可以通过旋转vb.net帮助程序在vbscript中使用API调用。这链接到我写过的关于如何做到的两篇文章。如果您走这条路,请查看GetActiveWindow API调用(以及其他)How To run vb.net with vbs scheduled task。
尝试两件事
Appactivate "Save PDF File As"
WScr.SendKeys FileName
WScript.Sleep 250
Appactivate "Save PDF File As"
WScr.SendKeys "{ENTER}"
Appactivate "Save PDF File As"
WScr.SendKeys "{TAB}" ' in case same name exists, overwrite question tab chooses yes
Appactivate "Save PDF File As"
WScr.SendKeys "{ENTER}" ' press yes
WScript.Sleep 500
第二个是将文件保存对话框标题替换为顶级窗口(它也是对话框的所有者窗口)标题 - 即主窗口标题。如果记事本的“另存为”对话框已打开,请使用AppActivate "Untitled - Notepad"