如何规避“Email Security Update”警告框?
编写者:郑昀
在各种版本的Outlook安装了“Email Security Update”补丁之后,每当我们访问某些字段时,都会弹出警告框。但是Outlook 2003除外,Outlook 2003 在以下三种类型应用程序访问时不弹出警告框:
? VBScript code in published, non-oneoff Outlook forms
? Outlook VBA code that uses the intrinsic Application object
? Outlook COM add-ins properly constructed to derive all objects from the Application object passed by the OnConnection event
在很多操作Outlook事件中,我们都需要访问敏感字段,我们可以这样来规避警告框:
我们先在本地硬盘新建一个临时的VBScript脚本文件;另外启动一个Wscript.Exe引擎,运行事先写好的VBScript脚本。它不断检测当前激活的窗口,如果出现了那个警告框,就用SendKeys的方法选中“a”和“y”按键,从而允许一分钟之内可以访问敏感字段。这样,虽然警告框仍然会弹出,但是用户几乎不会注意到它,也不会增加用户的操作复杂度。
由于Outlook XP版本中的该警告框并没有给“Yes”按钮设置y热键,所以我们这时候必须再次发送两个TAB和一个ENTER键消息,才能够关闭该警告框。
所运行的VBScript脚本内容如下所示:
Set fso = CreateObject("WScript.Shell") While fso.AppActivate("Microsoft Outlook") = FALSE wscript.sleep 50 Wend fso.SendKeys "a", True fso.SendKeys "y", True fso.SendKeys "{TAB}{TAB}{ENTER}", True
|
在“g_oApplication_ItemSend”和“g_oNewMailSMS_Click”事件中,我们是这么做的:
首先,检查Outlook版本,如果是2003版本以下,那么我们调用Scripting.FileSystemObject对象,创建一个名为“ByPass.vbs”的文件,默认在当前Outlook应用程序路径下。文件内容就是上面的VBScript脚本内容。对于Outlook 2003,我们不用理会。
其次,调用
Set wshShell = CreateObject("Wscript.Shell") wshShell.Run ("wscript.exe ByPass.vbs //B") |
来运行这个脚本。
最后,当事件完成,就把这个脚本删除。
Writen by zhengyun.nojunk(at)gmail.com
附录: On Error Resume Next
Dim strOutlookVersion As String
Dim fso, wshShell
Set fso = CreateObject("Scripting.FileSystemObject")
Dim strFileNameOfByPass As String ' VBScript脚本文件名
strFileNameOfByPass = "OutlookEmailSecurityUpdateByPass.vbs"
strOutlookVersion = g_oApplication.Version
Dim arraySplit
arraySplit = Split(strOutlookVersion, ".")
strOutlookVersion = arraySplit(0)
' 检查Outlook版本号:
Dim fsoFile
If CInt(strOutlookVersion) < 11 Then
' 先创建一个VBScript脚本文件
Set fsoFile = fso.CreateTextFile(strFileNameOfByPass)
fsoFile.WriteLine "Set fso =CreateObject(""WScript.Shell"")"
fsoFile.WriteLine "While fso.AppActivate(""Microsoft Outlook"") = FALSE"
fsoFile.WriteLine "wscript.sleep 50"
fsoFile.WriteLine "Wend"
If CInt(strOutlookVersion) = 9 Then
' Outlook2000默认按钮上有快捷键设置,所以可以发射a和y键即可:
fsoFile.WriteLine "fso.SendKeys ""a"", True"
fsoFile.WriteLine "fso.SendKeys ""y"", True"
End If
If CInt(strOutlookVersion) = 10 Then
'
' 在OutlookXP上面,这个警告框的“Yes”按钮并没有设置y热键
' 所以我们发送y键没有用,那么我们继续发送两个TAB和一个回车
' 也可以起到关闭警告框的作用
fsoFile.WriteLine "fso.SendKeys ""a"", True"
fsoFile.WriteLine "fso.SendKeys ""{TAB}{TAB}{ENTER}"", True"
End If
fsoFile.Close
' 然后运行它:
If fso.FileExists(strFileNameOfByPass) Then
Set wshShell = CreateObject("Wscript.Shell")
wshShell.Run ("wscript.exe " & strFileNameOfByPass & " //B") '//B代表不要弹出错误对话框
End If
End If
On Error GoTo 0