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

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

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    Visual Basic調用Windows API函數的應用舉例

    發布: 2007-7-14 20:28 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 38次 | 進入軟件測試論壇討論

    領測軟件測試網 【 摘 要】
           本 文 介 紹 了 利 用Visual Basic 調 用 Windows API 函 數 的 方 法, 并 通 過 舉 例 介 紹 部 分
           API 函 數 的 功 能 。 例 如:VB 程 序 私 有 初 始 化 參 數 的 存 取, 及 當 前 系 統 信 息 的 檢 測。

           【 關 鍵 字】
           Windows Microsoft( 微 軟) 公 司 的 視 窗 系 統。
           Visual Basic(VB) Microsoft( 微 軟) 公 司 的 可 視 化 編 程 工 具。
           API(Application Program Interface) 應 用 程 序 接 口。
           初 始 化 文 件( 例 如:DEMO.INI)

           【 正 文 】

    一、 利 用VB 調 用API 函 數 的 方 法。

           (1) 用Declare 語 句 申 明 所 要 調 用 的API 函 數, 若 該 函 數 務 返 回 值, 可 申 明 為Sub 過 程; 若 有 返 回 值, 則 可 申 明 為Function 函 數。

           注: 所 有 的API 函 數 的 申 明 都 在 .\VB\WINAPI\WIN31API.HLP 中, 只 需 用Copy 和 Paste 的 方 法 即 可 放 到 相 應 的 地 方。

           (2) 一 旦 申 明 了 某 一 個API 函 數 后, 就 可 以 象 調 用VB 的 函 數 一 樣。 但 需 注 意, 如 果 參 數 傳 遞 不 對, 可 能 會 導 致 死 機。

    二、 VB 程 序 私 有 初 始 化 參 數 的 存 取。

           Windows 軟 件 的 初 始 化 參 數 的 獲 取 與 保 存 是 通 過 讀 取 擴 展 名 為 .INI 的 文 本 文 件 來 實 現 的, 即 程 序 運 行 前 先 從 指 定 的INI 文 件 中 搜 索 到 所 需 的 參 數, 并 反 映 到 程 序 的 運 行 環 境 中; 當 程 序 退 出 時 又 將 當 前 的 環 境 參 數 保 存 到 指 定 的INI 文 件 中。Windows 提 供 的API 函 數 中 的GetPrivateProfileString 和WritePrivateProfileString 就 有 這 些 功 能。

           說 明:
           (1) GetPrivateProfileString 聲 明:Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String,ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long

           功 能: 獲 取INI 文 件 中 與 指 定 關 鍵 字 對 應 的 參 數( 字 符 串 性) 并 將 此 參 數 拷 貝 到lpReturnedString 中。

           參 數
           類 型
           說 明
           lpApplicationName
           String
           待 尋 找 的 關 鍵 字 所 在 的 段
           lpKeyName
           String
           與 參 數 相 對 應 的 關 鍵 字 名
           lpDefault
           String
           指 定 的 關 鍵 字 不 存 在 時 返 回 的 缺 省 值
           lpReturnedString
           String
           預 先 分 配 好 的 長 度 至 少 為nSize 字 節 的 字 符 串 緩 沖 區
           nSized
           Integer
           將 要 裝 入lpReturnedString 緩 沖 區 的 最 大 字 符 數
           lpFileName
           String
           初 始 化 文 件 的 名 字
           返 回 值
           Integer
           拷 貝 到lpReturnedString 緩 沖 區 的 字 符 數

           (2)WritePrivateProfileString
           聲 明:Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long

           功 能: 在 初 始 化 文 件 的 指 定 關 鍵 字 項 內 設 置 參 數( 字 符 串)。
           返 回 值: 如 果 設 置 成 功, 返 回TRUE; 否 則 返 回FALSE。

    三、 VB 檢 測 當 前 系 統 信 息

           所 需 的API 函 數 有GetWindowsDirectory,GetWinFlags,GetVersion,GetSystemDirectory, 等, 具 體 的 使 用 方 法 可 見 舉 例。

    四、 舉 例

           DEMO.PRJ

           ( 一) 建 立 項 目 文 件DEMO.PRJ; 建 立 模 塊 文 件DEMO.BAS. 并 將 下 列 聲 明 插 入 到DEMO.BAS 中。

           Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long

           Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long

           Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
           Declare Function GetKeyboardType Lib "user32" (ByVal nTypeFlag As Long) As Long
           Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
           Declare Function GetVersion Lib "kernel32" () As Long
           Declare Function GetWinflags Lib "kernel32" () As Long

           注:

    GetWindowsDirectory: 該 函 數 獲 取Windows 目 錄 的 路 徑。

    GetSystemDirectory: 該 函 數 獲 取Windows 系 統 子 目 錄 的 路 徑。

    GetVersion: 該 函 數 返 回 當 前Windows 版 本 號 和DOS 版 本 號。 返 回 值 的 低 位 字 節 說 明Windows 主 版 本 號, 返 回 值 的 低 位 字 的 高 位 字 節 說 明Windows 副 版 本 號, 高 位 字 的 低 位 字 節 說 明DOS 副 版 本 號, 高 位 字 的 高 位 字 節 說 明DOS 主 版 本 號。
           4、 GetWinflags: 該 函 數 返 回Windows 運 行 系 統 上 的 內 存 配 置。

           返 回 標 志 值
           含 意
           WF_80X87
           Intel 數 字 協 處 理 器
           WF_CPU386
           80386 CPU
           WF_CPU486
           80486 CPU
           WF_ENHANCED
           Windows 系 統 運 行 在386 增 強 模 式
           WF_PMODE
           Windows 系 統 運 行 在 保 護 模 式
           WF_STANDARD
           Windows 系 統 運 行 在 標 準 模 式
           WF_WLO
           運 行 在OS/2 下

           5、GetKeyboardType(): 該 函 數 得 到 系 統 鍵 盤 類 型,nTypeFlag=0 時 返 回 鍵 盤 類 型。
           返 回 值
           含 意
           1
           IBM PC/XT 或 兼 容 鍵 盤
           2
           Olivetti "ICO" 鍵 盤(102 個 鍵)
           3
           IBM 或 兼 容 鍵 盤(84 個 鍵)
           4
           IBM 增 強 型 或 相 似 鍵 盤(101 或102 個 鍵)
           5
           Nokia 1050 或 相 似 鍵 盤
           6
           Nokia 9140 或 相 似 鍵 盤
           7
           日 本 鍵 盤

           6、 為 了 調 用 這 些API 函 數 更 加 方 便, 可 以 編 寫 一 些 包 含 函 數。 這 些 用 戶 自 定 義 函 數 的 功 能 也 需 要 在 模 塊 中。


    Function SysDir()
    Temp = Space$(255)
    StringLen = GetSystemDirectory(Temp, 255)
    SysDir = Left$(Temp, StringLen)
    End Function
    ___________________________________________________________________________
    Function WinDir() As String
    Temp = Space$(255)
    StringLen = GetWindowsDirectory(Temp, 255)
    WinDir = Left$(Temp, StringLen)
    End Function
    ___________________________________________________________________________
    Function KeyType()
    KbType = GetKeyboardType(0)
    Select Case KbType
           Case 1
           KeyType="IBM PC\XT,or compatible(83key)"
           Case 2
           KeyType="Olivetti 'ICO'(102key)"
           Case 3
           KeyType="IBM AT,or similar(84key)"
           Case 4
           KeyType = "IBM Enhance (101 or 102 keys)"
           Case 5
           KeyType = "Nokia 1050 or similar"
           Case 6
           KeyType = "Nokia 1050 or similar"
           Case 6
           KeyType = "Nokia 9140 or similar"
           Case 7
           KeyType = "Japan Keyboard"
           End Select
    End Function
    ___________________________________________________________________________
    Function Initial()
    Form1.Left = Val(StringFormINI("Form", "left", "0 ", "c:\windows\demo.ini"))
    Form1.Top = Val(StringFormINI("Form", "top", "0 ","c:\windows\demo.ini" ))
    Form1.WindowState = Val(StringFormINI("Form", "windowstate", "0 ","
    c:\windows\demo.ini"))
    End Function
    _______________________________________________________________________
    Function SaveInfor()
    x = WritePrivateProfileString("Form", "left", Str$(Form1.Left),
       "c:\windows\demo.ini")
    x = WritePrivateProfileString("Form", "top", Str$(Form1.Top),
       "c:\windows\demo.ini")
    x = WritePrivateProfileString("Form", "windowstate", Str$
       (Form1.WindowState), "c:\windows\demo.ini")
    End Function
    ___________________________________________________________________________
    Function StringFormINI(SectionName As String, KeyName As String,
    Default As String, FileName As String) As String
    MaxStringLen% = 255
    returnedstr$ = Space$(MaxStringLen%)
    Result% = GetPrivateProfileString(SectionName, KeyName,
    Default, returnedstr$, MaxStringLen%, FileName)
    returnedstr$ = LTrim$(RTrim$(returnedstr$))
    returnedstr$ = Left$(returnedstr$, Len(returnedstr$) - 1)
    StringFormINI = returnedstr$
    End Function
    __________________________________________________________________________
    Function WinVer()
    ver& = GetVersion()
    winhigh = ver& Mod 256
    winlow = Int(ver& / 256) Mod 256
    WinVer = ((winhigh * 100) + winlow) / 100
    End Function
    ___________________________________________________________________________

    Function DosVer()
    ver& = GetVersion()
    Temp = ver& / 65536
    doshigh = Int(Temp / 256) Mod 256
    doslow = Temp Mod 256
    DosVer = ((doshigh * 100) + doslow) / 100
    End Function
    ___________________________________________________________________________
    Function CPU()
    Flags&=GetWinFlags()
    Match=1
    Select Case Match
           Case (Flags& And &H8)\&H8

                CPU=486
           Case (Flags& And &H4)\&H4

                CPU=386
    End Select
    End Function
    ___________________________________________________________________________
    Function Mode()
    Flags&=GetWinFlags()
    If flags& And &H20 Then
       Mode="Enhanced"
    Else
       Mode="Standard"
    End If
    End Function

    ( 二) 建 立 窗 體 文 件Form1.frm
    Form1.Caption="System Information"
    Sub Form_Paint()
    Cls
    Print
    Print , "System Information"
    Print
    Print , "WindowsDir: ", WinDir()
    Print , "SystemDir: ", SysDir()
    Print , "WindowsVersion: ", WinVer()
    Print , "DosVersion:  ", DosVer()
    Print , "KeyboardType: ", KeyType()
    End Sub
    Sub Form_Load()
    x = Initial()

    End Sub
    Sub Form_Unload(Cancel As Integer)
    x = SaveInfor()
    End Sub


           ( 三) 運 行 本 程 序。( 本 程 序 在486 兼 容 機Windows3.1 下 通 過)
           本 程 序 能 夠 檢 測 當 前 部 分 系 統 信 息, 在 退 出 時 能 將 窗 口 的 左、 上 位 置 及 窗 口 狀 態 記 錄 在DEMO.INI 文 件 中, 待 下 次 運 行 時, 窗 口 能 保 持 上 次 退 出 時 的 位 置 和 狀 態。
           注: 需 要 用 文 本 編 輯 器 編 輯DEMO.INI


        [Form]
        Left=100
        Top=100
        Windowstate=0


           并 存 在 當 前 系 統Windows 目 錄 下。
           本 文 僅 僅 是 介 紹 了 一 下API 函 數 的 使 用 方 法, 以 作 拋 磚 引 玉 之 用。 真 正 的 應 用API 函 數, 還 需 要 更 詳 盡 的 資 料 和 讀 者 更 大 的 努 力。
           【 參 考 書 目】
           《Windows3.1 API 函 數、 數 據 結 構 和 消 息 詳 解》

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品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>