• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • VB的API編程精粹(一)

    發表于:2007-05-25來源:作者:點擊數: 標簽:編程api精粹
    一. 注冊表的API編程 關于注冊表的知識相信您通過前面專題的介紹已經有了較深入的了解。系統有六個預定義好的關鍵字,這六個關鍵字是用戶或系統訪問注冊表的入口點。我們常用到的只有前四個關鍵字。而在編程時我們一般用到只是HKEY_CURRENT_USER和HKEY_LOCAL
    一. 注冊表的API編程
    關于注冊表的知識相信您通過前面專題的介紹已經有了較深入的了解。系統有六個預定義好的關鍵字,這六個關鍵字是用戶或系統訪問注冊表的入口點。我們常用到的只有前四個關鍵字。而在編程時我們一般用到只是HKEY_CURRENT_USER和HKEY_LOCAL_MACHINE這兩個關鍵字,因為與應用程序相關的數據存在于這兩個關鍵字下。
    許多商品化的軟件或專業化的軟件在您的機器上首次安裝的時候都會通過改寫注冊表來完成軟件的正確安裝運行,夢想成為編程高手的你當然需要掌握讀寫注冊表這一技術。利用好注冊表會為您的應用程序增色不少。
    雖然VB本身提供了四個關于注冊表的函數GetSetting,SaveSetting、GetAllSettings、DeleteSetting(這四個函數的使用比較簡單讀者可以參考VB的聯機幫助),但是這四個函數只能在“HKEY_CURRENT_USER\Software\VB and VBA ProgramSettings”下讀取、刪除、修改鍵值。對于一般的應用程序利用它們可以達到您的目的,對于特殊的要求利用它們就顯的無能為力了。下面舉一個例子說明它們的局限性。
    熟悉DOS操作系統的讀者都知道,可以編寫一個“Autoexec.bat”的批處理文件來實現某一個應用程序在系統啟動的時候自動運行,在Win95中我們可以把應用程序的快捷方式放到系統的啟動組中來達到同樣的效果。但是,假如我需要在我的應用程序首次安裝以后就能自動達到這種效果,那該如何呢?其實,注冊表中提供了三個這樣的鍵:
    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce
    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices
    這三個鍵字的區別是:
    Run:此鍵字下的應用程序在系統啟動的時候會自動運行;
    RunOnce:此鍵字下的應用程序在系統下一次啟動的時候會自動運行,以后不再運行;
    RunServices:功能和“Run”一樣,只是應用程序被啟動的時候不同而已。
    現在您一定知道該如何利用注冊表達到您的要求了。實際上許多安裝軟件在安裝向導完成后要您重新啟動才能完成最終的安裝。它就是把安裝向導所需做的最后工作的程序寫到“RunOnce”下實現的。但是,若只利用VB本身的那四個函數顯然是無法實現此功能的。筆者在實踐中通過調用API函數很好地解決了VB本身訪問注冊表的局限性,并把它做成了一個類模塊。所以調用起來非常方便。由于篇幅有限我只能從中抽取一部分來講,這一部分也是可以獨立運行的。讀者想要完整的源代碼請與我聯系(yue_xiang@263.net)。
    下面是應該放到您的模塊中的聲明部分代碼:
    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
    '注冊表的訪問權限常量
    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
    '預先定義的訪問注冊表的權限常量
    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
    '返回數值類型常量
    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函數要用到的結構類型
    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函數聲明
    …………
    (鑒于篇幅這里只介紹一下各API的作用而不再一一列其聲明;相關聲明請讀者查閱API瀏覽器)
    下面簡單地介紹一下這幾個API:
    RegOpenKeyEx():打開指定的關鍵字(32位);
    RegSetValueEx():在打開的注冊表關鍵字的值域中存儲數據;
    RegCloseKey():釋放指定的關鍵字的句柄;
    RegQueryValueEx():在注冊表中查找與您指定的鍵值相關的值;
    RegCreateKeyEx():建立并打開指定的關鍵字,若已存在則打開它;
    RegEnumKeyEx():枚舉指定的打開注冊表關鍵字的子關鍵字(32位);
    RegEnumKey():同上功能一樣,區別在于它是16位的;
    RegEnumValue():每次調用枚舉指定的打開注冊表關鍵字的值復制一個帶索引的值的名稱和數據塊;
    RegDeletekey():刪除一個關鍵字以及它的子關鍵字;
    RegDeleteValue():在指定的注冊表關鍵字中刪除一個帶名字的值。
    通過調用這些API我們可以輕松實現注冊表的任意關鍵字的讀取、查詢、建立、刪除。筆者在這里只打算介紹一下如何建立和刪除一個特定的關鍵字。其它操作讀者可以自己去發揮。
    例如:要在HKEY_LOCAL_MACHINE\Network下建一個“MyApi”子鍵并在它的下面建立一個稱為“yx”的值域,把它的值設為“yue1975”。我們應該按如下的方法調用API:
    Dim phkResult As Long '保存建立的關鍵字句柄
    Dim Iresult As Long
    Dim SA As SECURITY_ATTRIBUTES
    Dim 1Create As Long
    '建立一個指定的關鍵字
    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))
    '關閉關鍵字
    RegCloseKey phkResult
    現在用注冊表編輯器去查看一下注冊表,一定生成了您所需的鍵值。
    再例如:現在我想把剛才建立的鍵值刪掉,那您只需如下調用即可:
    dim success as long
    success=RegDeleteKey(HKEY_LOCAL_MACHINE,"Network\MyApi")
    二. 用API生成平面工具條
    相信許多VB愛好者都曾千方百計地想使自己的工具條像Word97中的工具條一樣COOL起來。往往我們不得不去借用別人做好的ActiveBar控件,這樣先不說自己的程序變得大了,而且說實話那個控件并不好用。筆者在用VC5編程的時候用基類函數SendMessageLong()、FindWindowEx()輕松實現了這種COOL的效果。受此啟發在VB5中調用這兩個API也實現了同樣的效果。下面是源代碼:
    把以下程序加到您的模塊中:
    '----------------------
    '常量聲明
    '----------------------
    Public Const WM_USER = &H400
    '用戶自定義消息的起點
    Public Const TB_SETSTYLE = WM_USER + 56
    '設置工具條風格消息
    Public Const TB_GETSTYLE = WM_USER + 57
    '取得工具條風格消息
    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函數聲明
    '-----------------
    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)
    '獲的當前工具條的風格
    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
    '設置工具條的平面風格
    r=SendMessageLong(hToolbar,TB_SETSTYLE,0, style)
    tb.Refresh
    End Sub
    過程FlatBar()的調用方法:
    1 . 在你的窗體上添加Toolbar控件(命名為:myTB)和ImageList控件。按通常的方法一樣在ImageList中播入幾個圖標并和Toolbar綁定建立一個平常的工具條。
    2 . 在窗體的Load()事件中調用FlatBar()
    Call FlatBar(myTB)
    3. 運行,您的工具條一定COOL起來了。

     

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>