AppActivate窗口焦点

时间:2014-08-06 12:16:43

标签: vbscript window focus sap

我一直在网上搜索有关如何在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

1 个答案:

答案 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"