必威注册电子书籍教程中心网文荟萃客户留言繁體中文
设为首页
加入收藏
联系必威注册
您当前的位置:92动力网 -> 教程中心 -> 编程经验 -> Visual Basic -> 教程内容 退出登录 用户管理
栏目导航
· Visual Basic· Delphi
· Visual C++· C++ Builder
· JAVA DotNet· 其他相关
热门教程
· 如何在Visual Basic...
· 使用Visual Basic操...
· 使用VB6.0设计Activ...
· VB动态调用外部函数...
· 建立一个程序员自己...
· 如何编写高质量的VB...
· [图文] 为更新到Visual Bas...
· 再谈在VB中调用VC++...
· 用VB语言编程实现JP...
· 用DTS实现SQL数据库...
相关教程
· Visual C++操纵MS W...
· Visual C++ .NET Wh...
· Visual C#中的多线程...
· Top 10 Reasons to ...
· 用Visual C++开发数...
· Comment/Uncomment ...
· MFC 扩展库 - CJ60L...
· -添加 FileDrop 属性...
· 利用Delphi为Visual...
· 在Visual Basic中终...

Visual Basic调用Windows API函数的应用举例
作者:佚名聽聽来源:本站整理聽聽发布时间:2005-12-28 23:50:24聽聽发布人:admin

减小字体 增大字体

Visual Basic调用Windows API函数的应用举例

【 摘 要】
聽聽聽聽聽聽 本 文 介 绍 了 利 用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 函 数 的 申 明 都 在 .VBWINAPIWIN31API.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

聽聽聽聽聽聽 注:

  1. GetWindowsDirectory: 该 函 数 获 取Windows 目 录 的 路 径。
  2. GetSystemDirectory: 该 函 数 获 取Windows 系 统 子 目 录 的 路 径。
  3. 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 PCXT,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:windowsdemo.ini"))
Form1.Top = Val(StringFormINI("Form", "top", "0 ","c:windowsdemo.ini" ))
Form1.WindowState = Val(StringFormINI("Form", "windowstate", "0 ","
c:windowsdemo.ini"))
End Function
_______________________________________________________________________
Function SaveInfor()
x = WritePrivateProfileString("Form", "left", Str$(Form1.Left),
聽聽 "c:windowsdemo.ini")
x = WritePrivateProfileString("Form", "top", Str$(Form1.Top),
聽聽 "c:windowsdemo.ini")
x = WritePrivateProfileString("Form", "windowstate", Str$
聽聽 (Form1.WindowState), "c:windowsdemo.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 函 数、 数 据 结 构 和 消 息 详 解》


[] [返回上一页] [打 印] [收 藏]
∷相关教程评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论...]
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 网站地图 - 管理登录
Copyright 2019 必威注册. All Rights Reserved .
浙ICP备05047688号