用vbs檢測Internet Explorer 中是否啟用了 ActiveX
問:
您好,腳本專家!如何知道 Internet Explorer 中是否啟用了 ActiveX?
-- JV
答:
您好,JV。您一定要問這個問題,是嗎?實(shí)際上,這并不是一個特別難回答的問題,只是有點(diǎn)復(fù)雜。不過,那與配置 Internet Explorer 的方式緊密相關(guān),而與通過編寫一個腳本來檢索此信息關(guān)系不大。
首先,Internet Explorer 沒有管理對象模型;相反,我們能夠通過編程的方式檢索 Internet Explorer 設(shè)置和屬性值的唯一方法就是通過編寫一個腳本來從注冊表中獲取此信息。這相當(dāng)容易;我們經(jīng)常在本專欄中使用注冊表讀取的腳本。最為棘手的部分就是搞清楚需要讀取哪個注冊表值,并知道如何解釋返回的數(shù)據(jù)。
|
注意:另一個棘手的部分在于知道您對哪個 ActiveX 設(shè)置感興趣;不論好壞,Internet Explorer 有與 ActiveX 控件相關(guān)的多個設(shè)置。在今天的專欄中,我們假定您要讀取此設(shè)置的值:運(yùn)行 ActiveX 控件和插件。 |
讓我們先從搞清楚需要修改哪些注冊表值開始。實(shí)際上,Internet Explorer 安全設(shè)置沒有全局設(shè)置;相反,這些設(shè)置由 Internet Explorer 區(qū)域進(jìn)行管理。有四個這樣的安全區(qū)域;區(qū)域名及其值如下表所示:
|
區(qū)域名 |
區(qū)域值 |
|
Intranet 站點(diǎn) |
1 |
|
受信任的站點(diǎn) |
2 |
|
Internet 站點(diǎn) |
3 |
|
受限制的站點(diǎn) |
4 |
可在注冊表的 HKEY_CURRENT_USER\ Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\ 部分中找到 Internet Explorer 安全區(qū)域的設(shè)置;要訪問某個特定區(qū)域,您需要訪問與該區(qū)域?qū)?yīng)的子項(xiàng)。要確定相應(yīng)的子項(xiàng),只需將區(qū)域值追加到前面的注冊表路徑即可。例如,要獲取 Internet 站點(diǎn)區(qū)域(值 3)的設(shè)置,您需要訪問以下注冊表子項(xiàng):
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3
您能看到 3 被追加到了末尾處。要訪問 Intranet 站點(diǎn)區(qū)域(值 1)的設(shè)置?沒問題:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\1
找到正確的注冊表子項(xiàng)后,您需要知道要讀取哪個注冊表值。遺憾的是(至少對于腳本編寫者來說),這些注冊表值的名稱有點(diǎn)含糊;例如,我們感興趣的名稱為 1200。(為什么是這樣呢?我們不知道。)如果您對使用腳本來讀取/管理 Internet Explorer 設(shè)置感興趣,那么,您可能希望閱讀一下 Managing Internet Explorer Enhanced Security Configuration whitepaper(英文)。僅一部分文檔會涉及腳本編寫,但是,該部分的確將這些含糊的注冊表值映射到了用戶界面中的相應(yīng)屬性。當(dāng)然,許多這樣的設(shè)置都可在 Tweakomatic 中找到。(Tweakomatic 與白皮書不同,它會真正地為您編寫腳本。)
那么,我們已準(zhǔn)備最終編寫一個腳本并真的在此執(zhí)行一些操作嗎?幾乎是這樣。您需要知道的另一件事就是配置信息作為雙字節(jié)(數(shù)字)值被存儲在注冊表中。如果您知道 ActiveX 控件被配置為 3 而不是 65536,這會有所幫助嗎?可能沒有。不過,下表可能有所幫助:
|
注冊表值 |
用戶界面值 |
|
0 |
Enabled |
|
1 |
Prompt |
|
3 |
Disabled |
|
65536 |
Administrator Approved |
不,最后一個值并非印刷錯誤,它的確為 65536。自己去想吧。
那好,現(xiàn)在我們就準(zhǔn)備編寫一個腳本。下面的這個示例腳本可檢索 Intranet 站點(diǎn)區(qū)域(區(qū)域值 1)的設(shè)置信息:
HKEY_CURRENT_USER = &H80000001
strComputer = "."
Set objReg = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\1"
ValueName = "1200"
objReg.GetDWORDValue HKEY_CURRENT_USER, strKeyPath, ValueName, dwValue
Wscript.Echo "Run ActiveX Controls and Plug-ins"
If IsNull(dwValue) Then
Wscript.Echo "Intranet sites: The value is either Null or could not be found in the registry."
ElseIf dwValue = 0 Then
Wscript.Echo "Intranet sites: Enabled"
ElseIf dwValue = 1 Then
Wscript.Echo "Intranet sites: Prompt"
ElseIf dwValue = 3 Then
Wscript.Echo "Intranet sites: Disabled"
ElseIf dwValue = 65536 Then
Wscript.Echo "Intranet sites: Administrator Approved"
End If
我們首先定義一個名為 HKEY_CURRENT_USER 的常量并將其值設(shè)置為 &H80000001;這將告訴腳本我們要使用哪個注冊表配置單元。然后我們連接到 WMI 服務(wù);請注意,StdRegProv(標(biāo)準(zhǔn)注冊表提供程序)類位于 root\default 命名空間中。(許多腳本編寫者都認(rèn)為該類與大多數(shù) WMI 類一樣,都位于 root\cimv2 中。事實(shí)并非如此。)
接下來我們將為一對變量賦值:
strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\1" ValueName = "1200"
正如您所看到的,變量 strKeyPath 包含 HKEY_CURRENT_USER 中的注冊表路徑(請勿在該路徑中包含 HKEY_CURRENT_USER,否則,腳本將失?。M瑫r,將變量 ValueName 設(shè)置為 1200,該值恰好為我們要讀取的注冊表值。
然后我們調(diào)用 GetDWORDValue 方法,這樣我們可讀取注冊表中的雙字節(jié)值:
objReg.GetDWORDValue HKEY_CURRENT_USER, strKeyPath, ValueName, dwValue
請注意,我們需要向 GetDWORDValue 傳遞幾個參數(shù):
| • |
HKEY_CURRENT_USER,告訴腳本要使用哪個注冊表配置單元的常量。 |
| • |
strKeyPath,包含注冊表路徑的變量。 |
| • |
ValueName,表示我們要讀取的注冊表值的變量。 |
| • |
dwValue,將結(jié)束存儲從注冊表中讀取的值的“輸出參數(shù)”。如果您正在想,“請稍等,我們沒有為 dwValue 賦值,”您說對了。我們就是這樣設(shè)計(jì)的:我們不為輸出參數(shù)賦值。相反,GetDWORDValue 將讀取恰好存儲在所討論的注冊表值 (1200) 中的任何值,然后該方法會將該值賦給 dwValue。 |
這確實(shí)很不錯,不是嗎?
此時,我們可只回顯從注冊表中檢索的值。不過,正如我們所指出的那樣,該檢索值將為諸如 1、3 或 65536 這樣的值。因此,我們建立一個簡單小巧的 If Then ElseIf 塊以檢查返回值,并回顯一個更有意義的消息:
If IsNull(dwValue) Then Wscript.Echo "Intranet sites: The value is either Null or could not be found in the registry." ElseIf dwValue = 0 Then Wscript.Echo "Intranet sites: Enabled" ElseIf dwValue = 1 Then Wscript.Echo "Intranet sites: Prompt" ElseIf dwValue = 3 Then Wscript.Echo "Intranet sites: Disabled" ElseIf dwValue = 65536 Then Wscript.Echo "Intranet sites: Administrator Approved" End If
您說對了:一旦您知道值存儲在注冊表中的什么位置以及如何將值存儲在注冊表中,這就相當(dāng)容易了。
僅僅為了省去鍵入(和/或復(fù)制與粘貼)之苦,下面的腳本可返回所有四個安全區(qū)域的信息:
HKEY_CURRENT_USER = &H80000001
strComputer = "."
Set objReg = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\1"
ValueName = "1200"
objReg.GetDWORDValue HKEY_CURRENT_USER, strKeyPath, ValueName, dwValue
Wscript.Echo "Run ActiveX Controls and Plugins"
If IsNull(dwValue) Then
Wscript.Echo "Intranet sites: The value is either Null or could not be found in the registry."
ElseIf dwValue = 0 Then
Wscript.Echo "Intranet sites: Enabled"
ElseIf dwValue = 1 Then
Wscript.Echo "Intranet sites: Prompt"
ElseIf dwValue = 3 Then
Wscript.Echo "Intranet sites: Disabled"
ElseIf dwValue = 65536 Then
Wscript.Echo "Intranet sites: Administrator Approved"
End If
strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\2"
ValueName = "1200"
objReg.GetDWORDValue HKEY_CURRENT_USER, strKeyPath, ValueName, dwValue
If IsNull(dwValue) Then
Wscript.Echo "Trusted sites: The value is either Null or could not be found in the registry."
ElseIf dwValue = 0 Then
Wscript.Echo "Trusted sites: Enabled"
ElseIf dwValue = 1 Then
Wscript.Echo "Trusted sites: Prompt"
ElseIf dwValue = 3 Then
Wscript.Echo "Trusted sites: Disabled"
ElseIf dwValue = 65536 Then
Wscript.Echo "Trusted sites: Administrator Approved"
End If
strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3"
ValueName = "1200"
objReg.GetDWORDValue HKEY_CURRENT_USER, strKeyPath, ValueName, dwValue
If IsNull(dwValue) Then
Wscript.Echo "Internet sites: The value is either Null or could not be found in the registry."
ElseIf dwValue = 0 Then
Wscript.Echo "Internet sites: Enabled"
ElseIf dwValue = 1 Then
Wscript.Echo "Internet sites: Prompt"
ElseIf dwValue = 3 Then
Wscript.Echo "Internet sites: Disabled"
ElseIf dwValue = 65536 Then
Wscript.Echo "Internet sites: Administrator Approved"
End If
strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\4"
ValueName = "1200"
objReg.GetDWORDValue HKEY_CURRENT_USER, strKeyPath, ValueName, dwValue
If IsNull(dwValue) Then
Wscript.Echo "Restricted sites: The value is either Null or could not be found in the registry."
ElseIf dwValue = 0 Then
Wscript.Echo "Restricted sites: Enabled"
ElseIf dwValue = 1 Then
Wscript.Echo "Restricted sites: Prompt"
ElseIf dwValue = 3 Then
Wscript.Echo "Restricted sites: Disabled"
ElseIf dwValue = 65536 Then
Wscript.Echo "Restricted sites: Administrator Approved"
End If
運(yùn)行腳本,將返回類似下面內(nèi)容的輸出:
Run ActiveX Controls and Plugins Intranet sites: Enabled Trusted sites: Enabled Internet sites: Enabled Restricted sites: Disabled
在此我們還能再做些什么嗎?或許可以;畢竟我們還可配置此注冊表值。但那是改天要討論的內(nèi)容了。
上一篇:用vbs從本地 Administrators 組中刪除組
欄 目:vb
下一篇:用vbscript把 Word 文檔保存為文本文件的代碼
本文標(biāo)題:用vbs檢測Internet Explorer 中是否啟用了 ActiveX
本文地址:http://www.jygsgssxh.com/a1/vb/7878.html
您可能感興趣的文章
- 01-10下載文件到本地運(yùn)行的vbs
- 01-10VBS中的正則表達(dá)式的用法大全 <font color=red>原創(chuàng)&
- 01-10VBS中SendKeys的基本應(yīng)用
- 01-10VBScript教程 第十一課深入VBScript
- 01-10用VBSCRIPT控制ONSUBMIT事件
- 01-10VBScript語法速查及實(shí)例說明
- 01-10VBS中Select CASE的其它用法
- 01-10VBScript教程 第七課使用條件語句
- 01-10vbscript 可以按引用傳遞參數(shù)嗎?
- 01-10VBScript教程 第二課在HTML頁面中添加VBscript代碼


閱讀排行
本欄相關(guān)
- 01-10下載文件到本地運(yùn)行的vbs
- 01-10飄葉千夫指源代碼,又稱qq刷屏器
- 01-10SendKeys參考文檔
- 01-10什么是一個高效的軟件
- 01-10VBS中的正則表達(dá)式的用法大全 &l
- 01-10exe2swf 工具(Adodb.Stream版)
- 01-10VBS中SendKeys的基本應(yīng)用
- 01-10用VBSCRIPT控制ONSUBMIT事件
- 01-10VBScript教程 第十一課深入VBScript
- 01-10VBScript語法速查及實(shí)例說明
隨機(jī)閱讀
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 04-02jquery與jsp,用jquery
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 01-10delphi制作wav文件的方法
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05織夢dedecms什么時候用欄目交叉功能?


