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

