betway官方电子书籍教程中心网文荟萃客户留言繁體中文
设为首页
加入收藏
联系我们
您当前的位置:betway官方 -> 教程中心 -> 编程经验 -> Visual Basic -> 教程内容 退出登录 betway官方,
栏目导航
· 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函数的应用举例
betway官方,作者:佚名来源:本站整理发布时间: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 2021 betway官方. All Rights Reserved .
浙ICP备05047688号