科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件API函数在VB开发中的应用

API函数在VB开发中的应用

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

VB 作 为 快 速 开 发Windows 下 的 编 程 工 具, 已 经 为 越 来 越 多 的 开 发 者 采 用。 但 如 果 要 开 发 出 专 业 的Windows 软 件, 还 需 采 用 大 量 的API 函 数, 以 下 结 合 笔 者 开 发 管 理 软 件 的 经 验 谈 几 点 体 会。

来源:soft6 2008年5月14日

关键字: 函数 API VB vb.net Windows

  • 评论
  • 分享微博
  • 分享邮件

VB 作 为 快 速 开 发Windows 下 的 编 程 工 具, 已 经 为 越 来 越 多 的 开 发 者 采 用。 但 如 果 要 开 发 出 专 业 的Windows 软 件, 还 需 采 用 大 量 的API 函 数, 以 下 结 合 笔 者 开 发 管 理 软 件 的 经 验 谈 几 点 体 会。

程 序 中 判 定Windows 的 版 本
众 所 周 知,Windows 3.x 各 版 本 或 多 或 少 会 有 些 差 别, 为 了 使 开 发 程 序 避 免 出 现 莫 名 其 妙 的 错 误, 最 好 在 程 序 运 行 前 自 动 判 定Windows 的 版 本。 采 用API 提 供 的 函 数getversion 很 容 易 实 现 这 一 点。 函 数 声 明 如 下:
Declare Function GetVersion Lib"Kernel" () As Integer

此 函 数 没 有 参 数, 返 回 值 为Windows 的 版 本 号, 其 中 版 本 号 的 低 位 字 节 为Windows 的 主 版 本 号, 版 本 号 的 高 位 字 节 返 回Windows 的 次 版 本 号。 判 别 过 程 如 下:

Private Sub Form_Load ()
Dim ver As Integer
Dim major As Integer
Dim minor As Integer
Ver = GetVersion ()
major = ver And &HFF
minor = (ver And &HFF00) \ 256
If major < > 3 And minor < > 10 Then
MsgBox "版本不正确!"
Exit Sub
End If
End Sub

程 序 中 判 断Windows 的 安 装 目 录
一 般VB 开 发 出 来 的 程 序 包 含 vbrun300.dll 等 辅 助 文 件 和.vbx 文 件, 它 们 均 需 安 装 到Windows 目 录(c:\windows) 或Windows 的 系 统 目 录(c:\windows\system) 下, 但 因 为 用 户 安 装Windows 时 可 能 会 改 变Windows 的 目 录 名( 如c:\windows), 使 用 安 装 软 件 后, 不 能 正 确 运 行.API 中 提 供 的GetwinDowsdirectory 或GetSystemDirectory 较 好 地 解 决 了 这 个 问 题。 函 数 声 明 如 下:
Declare Function GetSystemDirectory Lib "Kernel"(ByVal lpBuffer As String,ByVal nSize As Integer) As Integer

其 中 参 数lpbuffer 为 字 串 变 量, 将 返 回 实 际Windows 目 录 或Windows 的 系 统 目 录,nsize 为lpbuffer 的 字 串 变 量 的 大 小, 函 数 返 回 值 均 为 实 际 目 录 的 长 度。 检 查 函 数 如 下:

Function checkdir() As Boolean
Dim windir As String * 200
Dim winsys As String * 200
Dim winl As Integer
Dim wins As Integer
Dim s1 As String
Dim s2 As String
winl = GetWindowsDirectory(windir,200)
winl = GetSystemDirectory(winsys,200)
s1 = Mid $(windir,1,winl)
s2 = Mid $(winsys,1,wins)
If Wins = 0 Or wins = 0 Then
checkdir = False
Exit Function
End If
If s1 < > "C:\WINDOWS" Or s2 < > "C:\WINDOWS\SYSTEM" Then
checkdir = False
Exit Function
End If
checkdir = True
End Function
shell 出 现 的 问 题
通 常 编 程 时 要 调 用 外 部 程 序,VB 提 供 了shell() 函 数, 但 是 如 果shell 调 用 的 外 部 程 序 找 不 到, 则 运 行 的 程 序 失 去 控 制,VB 给 出 提 示"file not found", 改 变 这 种 现 象, 要 在 程 序 中 加 入on error go to, 比 较 麻 烦,API 函 数 中 的winexec 很 好 地 解 决 了 这 个 问 题。 函 数 声 明 如 下:
Declare Function WinExec Lib "Kernel"(ByVal lpCmdLine As String,ByVal nCmdShow As Integer) As Integer

其 中lpCmdline 为 调 用 的 外 部 文 件 名,NcmdShow 为 外 部 程 序 的 运 行 状 态, 如 隐 藏 窗 口、 最 小 化 窗 口 等 等。 如 返 回 值 大 于32 表 示 执 行 功 能, 否 则 返 回 错 误 码。 例 程 如 下:

sub command1_click
ds I as integer
I=winexec("notepad.exe","c:\wst.txt",9)
''参数9 即SW_RESTORE,也就是激活并显示窗口
if I>32 then
msgbox "调用正确!!"
else
msgbox "调用错误!!"
end if
end sub
通 过 实 践 发 现, 在 使 用VB 开 发 应 用 程 序 时, 灵 活 使 用API 函 数, 会 更 大 地 发 挥VB 的 作 用, 使 开 发 出 的 软 件 更 专 业, 功 能 更 强 大。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章