Windows未公開(kāi)函數(shù)揭密——之一

字號(hào):

什么是未公開(kāi)函數(shù)?
     對(duì)于Windows的API函數(shù)調(diào)用相信大家已經(jīng)不會(huì)陌生了。API函數(shù)調(diào)用是通過(guò)在VB中定義和調(diào)用Windows動(dòng)態(tài)連接庫(kù)中的函數(shù)從而擴(kuò)展VB程序的功能。API函數(shù)的定義和調(diào)用方法在微軟的開(kāi)發(fā)工具中都有詳細(xì)的說(shuō)明。
     那么什么是“未公開(kāi)”函數(shù)呢?微軟為了某種目的。對(duì)于一些封裝在系統(tǒng)中的函數(shù)沒(méi)有在任何開(kāi)發(fā)文檔提供任何函數(shù)說(shuō)明和定義。而這些函數(shù)有很多都是很有用的。所幸的是一些有心之人對(duì)Windows系統(tǒng)動(dòng)態(tài)連接庫(kù)做了十分詳細(xì)的分析,從而將這些未公開(kāi)函數(shù)公開(kāi)以供廣大開(kāi)發(fā)人員共享(我對(duì)他們的感激之情就象滔滔江水,綿綿不絕…)
     好了,廢話少說(shuō),言歸正傳,這里首先向大家介紹的是Windows下未公開(kāi)的關(guān)閉Windows的函數(shù)。在Windows API函數(shù)中雖然提供了ExitWindowsEx這樣的API函數(shù),但是在有一些程序中我們需要象一些程序安裝完畢那樣提示用戶重新啟動(dòng)計(jì)算機(jī)或者不重新啟動(dòng)計(jì)算機(jī)?;蛘咭诔绦蛑袕棾鲫P(guān)閉系統(tǒng)對(duì)話框。要實(shí)現(xiàn)這些功能就要使用Windows未公開(kāi)函數(shù)了。下面來(lái)看程序
    首先建立一個(gè)新的工程文件,在工程文件中加入一個(gè)Module文件。在Module文件中加入以下代碼:
    Option Explicit
    Public bIsWinNT As Boolean
    ´下面就是未公開(kāi)的函數(shù)定義,注意在Alias之后沒(méi)有使用函數(shù)的真正名字
    ´而是用了函數(shù)編號(hào),這是因?yàn)槲④洓](méi)有公開(kāi)函數(shù)名
    Declare Function SHRestartSystemMB Lib "shell32" _
     Alias "#59" _
     (ByVal hOwner As Long, _
     ByVal sExtraPrompt As String, _
     ByVal uFlags As Long) As Long
    Declare Function SHShutDownDialog Lib "shell32" _
     Alias "#60" _
     (ByVal YourGuess As Long) As Long
    Declare Function GetVersionEx Lib "kernel32" _
     Alias "GetVersionExA" _
     (lpVersionInformation As OSVERSIONINFO) As Long