您知道解决问题的最佳方法是更正代码是正确的。在这种情况下,您可能会使弹出窗口可以切换。
然而,我为你写了这个,它可以作为一个潜在的解决方法。它利用 VBScript 来“排序”模拟多线程,以便您可以将密钥发送到 modal Msgbox
。假设您可以通过代码执行您想要执行SendDelayedKeys
的操作,只需在将导致Msgbox
. 您可能需要Delay
根据自己的情况进行修改,因为 100 毫秒可能还不够。要更改Delay
,只需像这样调用:SendDelayedKeys 500
500 毫秒。
Sub SendDelayedKeys(Optional Delay As Long = 100, Optional keys As String = """ """)
Dim oFSO As Object
Dim oFile As Object
Dim sFile As String
sFile = "C:\SendKeys.vbs" 'Make this a valid path to which you can write.
'Check for the .vbs file.
If Not Len(Dir$(sFile)) Then
'Create the vbs file.
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFile = oFSO.CreateTextFile(sFile)
oFile.WriteLine "Set WshShell = WScript.CreateObject(""WScript.Shell"")"
oFile.WriteLine "WScript.Sleep CLng(WScript.Arguments(0))"
oFile.WriteLine "WshShell.SendKeys WScript.Arguments(1)"
oFile.Close
End If
Shell "wscript C:\SendKeys.vbs " & Delay & " " & keys
End Sub
Sub ProofOfConcept()
'Using default parameters which sends a space after 100 milliseconds
SendDelayedKeys
MsgBox "I disappear on my own!"
End Sub
一句警告:任何使用SendKeys
的解决方案都是脆弱的解决方案,应尽可能避免使用。但是,当您的选择有限并且您需要避免手动过程时,有时这是您唯一的选择。
由于 SiddhartRout 正确地指出这可以使用 API 调用来解决:这里有一个C# 代码链接,它会每秒关闭你的 msgbox。