国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
VB的API編程精粹
介紹關(guān)于注冊表編程的API函數(shù)及其應(yīng)用實例,使讀者朋友何能夠?qū)⑶懊鎸W(xué)到的注冊表知識推廣到VB編程中,繼續(xù)向VB高手邁進(jìn)(路漫漫……)。后半部分介紹的平面工具條的生成定會使您的程序更“炫”!

    一. 注冊表的API編程

    關(guān)于注冊表的知識相信您通過前面專題的介紹已經(jīng)有了較深入的了解。系統(tǒng)有六個預(yù)定義好的關(guān)鍵字,這六個關(guān)鍵字是用戶或系統(tǒng)訪問注冊表的入口點。我們常用到的只有前四個關(guān)鍵字。而在編程時我們一般用到只是HKEY_CURRENT_USER和HKEY_LOCAL_MACHINE這兩個關(guān)鍵字,因為與應(yīng)用程序相關(guān)的數(shù)據(jù)存在于這兩個關(guān)鍵字下。

    許多商品化的軟件或?qū)I(yè)化的軟件在您的機(jī)器上首次安裝的時候都會通過改寫注冊表來完成軟件的正確安裝運行,夢想成為編程高手的你當(dāng)然需要掌握讀寫注冊表這一技術(shù)。利用好注冊表會為您的應(yīng)用程序增色不少。

    雖然VB本身提供了四個關(guān)于注冊表的函數(shù)GetSetting,SaveSetting、GetAllSettings、DeleteSetting(這四個函數(shù)的使用比較簡單讀者可以參考VB的聯(lián)機(jī)幫助),但是這四個函數(shù)只能在“HKEY_CURRENT_USER\Software\VB and VBA ProgramSettings”下讀取、刪除、修改鍵值。對于一般的應(yīng)用程序利用它們可以達(dá)到您的目的,對于特殊的要求利用它們就顯的無能為力了。下面舉一個例子說明它們的局限性。

    熟悉DOS操作系統(tǒng)的讀者都知道,可以編寫一個“Autoexec.bat”的批處理文件來實現(xiàn)某一個應(yīng)用程序在系統(tǒng)啟動的時候自動運行,在Win95中我們可以把應(yīng)用程序的快捷方式放到系統(tǒng)的啟動組中來達(dá)到同樣的效果。但是,假如我需要在我的應(yīng)用程序首次安裝以后就能自動達(dá)到這種效果,那該如何呢?其實,注冊表中提供了三個這樣的鍵:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices

    這三個鍵字的區(qū)別是:

Run:此鍵字下的應(yīng)用程序在系統(tǒng)啟動的時候會自動運行;
RunOnce:此鍵字下的應(yīng)用程序在系統(tǒng)下一次啟動的時候會自動運行,以后不再運行;
RunServices:功能和“Run”一樣,只是應(yīng)用程序被啟動的時候不同而已。

    現(xiàn)在您一定知道該如何利用注冊表達(dá)到您的要求了。實際上許多安裝軟件在安裝向?qū)瓿珊笠匦聠硬拍芡瓿勺罱K的安裝。它就是把安裝向?qū)枳龅淖詈蠊ぷ鞯某绦驅(qū)懙?#8220;RunOnce”下實現(xiàn)的。但是,若只利用VB本身的那四個函數(shù)顯然是無法實現(xiàn)此功能的。筆者在實踐中通過調(diào)用API函數(shù)很好地解決了VB本身訪問注冊表的局限性,并把它做成了一個類模塊。所以調(diào)用起來非常方便。由于篇幅有限我只能從中抽取一部分來講,這一部分也是可以獨立運行的。讀者想要完整的源代碼請與我聯(lián)系(yue_xiang@263.net)。
下面是應(yīng)該放到您的模塊中的聲明部分代碼:

Option Explicit
'注冊表的入口常量
Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const HKEY_USERS = &H80000003
'注冊表的訪問權(quán)限常量
Public Const KEY_QUERY_VALUE = &H1
Public Const KEY_SET_VALUE = &H2
Public Const KEY_CREATE_SUB_KEY = &H4
Public Const KEY_ENUMERATE_SUB_KEYS = &H8
Public Const KEY_NOTIFY = &H10
Public Const KEY_CREATE_LINk = &H20
Public Const KEY_ALL_ACCESS = &H3F
'打開/建立鍵值的可選項常量
Public Const REG_OPTION_NON_VOLATILE = 0&
Public Const REG_OPTION_VOLATILE = &H1
'建立新鍵或打開已存在的鍵常量
Public Const REG_CREATED_NEW_KEY = &H1
Public Const REG_OPENED_EXISTING_KEY = &H2
'預(yù)先定義的訪問注冊表的權(quán)限常量
Public Const STANDARD_RIGHTS_ALL = &H1F0000
Public Const SPECIFIC_RIGHTS_ALL = &HFFFF
'API的返回代碼常量
Public Const ERROR_SUCCESS = 0&
Public Const ERROR_ACCESS_DENIED = 5
Public Const ERROR_NO_MORE_ITEMS = 259
'返回數(shù)值類型常量
Public Const REG_NONE = (0)
Public Const REG_SZ = (1)
Public Const REG_EXPAND_SZ = (2)
Public Const REG_BINARY = (3)
Public Const REG_DWORD = (4)
PubliC ConSt REG_DWORD_LITTLE_ENDIAN = (4)
Public Const REG_DWORD_BIG_ENDIAN = (5)
Public Const REG_LINK = (6)
Public Const REG_MULTI_SZ = (7)
Public Const REG_RESOURCE_LIST = (8)
Public Const REG_FULL_RESOURCE_DESCRIPTOR = (9)
Public Const REG_RESOURCE_REQUIREMENTS_LIST = (10)
'訪問注冊表的API函數(shù)要用到的結(jié)構(gòu)類型
Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Boolean
End Type
Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
'要用到的API函數(shù)聲明
…………
    (鑒于篇幅這里只介紹一下各API的作用而不再一一列其聲明;相關(guān)聲明請讀者查閱API瀏覽器)

    下面簡單地介紹一下這幾個API:

RegOpenKeyEx():打開指定的關(guān)鍵字(32位);
RegSetValueEx():在打開的注冊表關(guān)鍵字的值域中存儲數(shù)據(jù);
RegCloseKey():釋放指定的關(guān)鍵字的句柄;
RegQueryValueEx():在注冊表中查找與您指定的鍵值相關(guān)的值;
RegCreateKeyEx():建立并打開指定的關(guān)鍵字,若已存在則打開它;
RegEnumKeyEx():枚舉指定的打開注冊表關(guān)鍵字的子關(guān)鍵字(32位);
RegEnumKey():同上功能一樣,區(qū)別在于它是16位的;
RegEnumValue():每次調(diào)用枚舉指定的打開注冊表關(guān)鍵字的值復(fù)制一個帶索引的值的名稱和數(shù)據(jù)塊;
RegDeletekey():刪除一個關(guān)鍵字以及它的子關(guān)鍵字;
RegDeleteValue():在指定的注冊表關(guān)鍵字中刪除一個帶名字的值。

    通過調(diào)用這些API我們可以輕松實現(xiàn)注冊表的任意關(guān)鍵字的讀取、查詢、建立、刪除。筆者在這里只打算介紹一下如何建立和刪除一個特定的關(guān)鍵字。其它操作讀者可以自己去發(fā)揮。

    例如:要在HKEY_LOCAL_MACHINE\Network下建一個“MyApi”子鍵并在它的下面建立一個稱為“yx”的值域,把它的值設(shè)為“yue1975”。我們應(yīng)該按如下的方法調(diào)用API:

Dim phkResult As Long '保存建立的關(guān)鍵字句柄
Dim Iresult As Long
Dim SA As SECURITY_ATTRIBUTES
Dim 1Create As Long
'建立一個指定的關(guān)鍵字
caII RegCreateKeyEx(HKEY_LOCAL_MACHINE,"Network\MyApi",0,"",REG_OPTION_NON_VOLATILE, _
KEY_ALL_ACCESS,SA,phkResult,1Create)
1Result=RegSetValueEx(phkResult,"yx",0,REG_SZ,"yue1975",Clng(Len("yue1975")+1))
'關(guān)閉關(guān)鍵字
RegCloseKey phkResult
現(xiàn)在用注冊表編輯器去查看一下注冊表,一定生成了您所需的鍵值。
再例如:現(xiàn)在我想把剛才建立的鍵值刪掉,那您只需如下調(diào)用即可:
dim success as long
success=RegDeleteKey(HKEY_LOCAL_MACHINE,"Network\MyApi")

 

二. 用API生成平面工具條

    相信許多VB愛好者都曾千方百計地想使自己的工具條像Word97中的工具條一樣COOL起來。往往我們不得不去借用別人做好的ActiveBar控件,這樣先不說自己的程序變得大了,而且說實話那個控件并不好用。筆者在用VC5編程的時候用基類函數(shù)SendMessageLong()、FindWindowEx()輕松實現(xiàn)了這種COOL的效果。受此啟發(fā)在VB5中調(diào)用這兩個API也實現(xiàn)了同樣的效果。下面是源代碼:

    把以下程序加到您的模塊中:

 

'----------------------
'常量聲明
'----------------------
Public Const WM_USER = &H400
'用戶自定義消息的起點
Public Const TB_SETSTYLE = WM_USER + 56
'設(shè)置工具條風(fēng)格消息
Public Const TB_GETSTYLE = WM_USER + 57
'取得工具條風(fēng)格消息
Public Const TBSTYLE_FLAT = &H800
'使工具條COOL起來
Public Const TBSTYLE_TOOLTTPS = &H100
Public Const TBSTYLE_WRAPABLE = &H200
Public Const TBSTYLE_ALTDRAG = &H400
Public Const TBSTYLE_LIST = &H1000
Public Const TBSTYLE_CUSTOMERASE = &H2000
'-----------------
'API函數(shù)聲明
'-----------------
Public Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long,
ByVal wMsg As Long,ByVal wParam As Long,ByVal 1Param As Long) As Long
Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long,
ByVal hWnd2 As Long,ByVal 1psz1 As String,ByVal 1psz2 As String) As Long
'-----------------------
'通用生成平面工具條過程
'入口:工具條的名字
'-----------------------
Public Sub FlatBar(ByVal tb As Toolbar)
Dim style As Long
Dim hToolbar As Long
Dim r As Long
'獲的工具條窗口句柄
hToolbar = FindWindowEx(tb.hwnd,0&,"ToolBarWindow32",vbNullString)
'獲的當(dāng)前工具條的風(fēng)格
style = SendMessageLong(hToolbar,TB_GETSTYLE,0&, 0&)
If style And TBSTYLE_FLAT Then
style = style Xor TBSTYLE_FLAT
Else
style = style or TBSTYLE_FLAT
End If
'設(shè)置工具條的平面風(fēng)格
r=SendMessageLong(hToolbar,TB_SETSTYLE,0, style)
tb.Refresh
End Sub

    過程FlatBar()的調(diào)用方法:

    1 . 在你的窗體上添加Toolbar控件(命名為:myTB)和ImageList控件。按通常的方法一樣在ImageList中播入幾個圖標(biāo)并和Toolbar綁定建立一個平常的工具條。

    2 . 在窗體的Load()事件中調(diào)用FlatBar()
   
Call FlatBar(myTB)


    3. 運行,您的工具條一定COOL起來了。


本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
【黒客編程】VB木馬也瘋狂
在VB中動態(tài)加載ODBC數(shù)據(jù)源
Windows_XP注冊表及其維護(hù)!
程序配置信息的保存(Borland C Builder環(huán)境)
在Delphi中輕松操作注冊表TRegistry類
利用JAVA向注冊表里寫信息
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服