荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Peter (小飞侠), 信区: Program
标  题: Visual Basic调用Windows API函数的应用举例
发信站: BBS 荔园晨风站 (Wed Jan 27 17:43:24 1999), 转信


本文介绍了利用Visual Basic(以下简称VB)调用 Windows API函数
的方法,并通过举例介绍部分API函数的功能。

    利用VB调用API函数的方法

    1.用Declare语句申明所要调用的API函数,若该函数无返回值,可
申明为Sub过程;若有返回值,则可申明为Function函数。所有的API函
数的申明都在 \VB\WINAPI\WIN31API.HLP中, 只需用Copy和 Paste即
可放到相应的地方。

    2.一旦申明了某一个API函数后,就可以像调用VB的函数一样调用
它。但需注意,如果参数传递不对,可能会导致死机。

    VB程序私有初始化参数的存取
    Windows软件的初始化参数的获取与保存是通过读取扩展名为 .I
NI的文本文件来实现的,即程序运行前先从指定的.INI文件中搜索到
所需的参数,并反映到程序的运行环境中;当程序退出时又将当前的环
境参数保存到指定的.INI文件中。Windows提供的API函数中的GetPr
ivateProfileString和WritePrivateProfileString 就有这些功能。
下面作一简要说明
    1.GetPrivateProfileString
    声明:Declare Function GetPrivateProfileString Lib "kerne
l32"Alias"GetPrivat eProfileStringA"(ByVal lpApplicationName
As String,ByVal lpKeyName As Any,ByVal  lpDefault As String
, ByVal lpReturnedString As String, ByVal nSize As Long,ByV
al lpFileName As String) As Long
    功能:获取.INI文件中与指定关键字对应的参数(字符串) 并将此
参数拷贝到lpReturne dString中。
表1

    2.WritePrivateProfileString
    声明:Declare Function WritePrivateProfileString Lib "ker
nel32" Alias"WriteP rivateProfileStringA" (ByVal lpApplicati
onName As String, ByVal lpKeyName AsAny , ByVal lpString As
Any, ByVal lpFileName As String) As Long
    功能:在初始化文件的指定关键字项内设置参数(字符串)。
    返回值:如果设置成功,返回TRUE;否则返回FALSE。
    VB检测当前系统信息
    所需的API函数有GetWindowsDirectory,GetWinFlags,GetVersio
n,GetSystemDirector y等,具体的使用方法以下例说明如下:

    1.建立项目文件DEMO.PRJ;建立模块文件DEMO.BAS.并将下列声明
插入到DEMO.BAS 中。
    Declare Function GetWindowsDirectory Lib "kernel32" Alia
s "GetWindowsDirect oryA" (ByVal lpBuffer As String, ByVal n
Size As Long) As Long
    Declare Function GetPrivateProfileString Lib "kernel32"
Alias "GetPrivatePr ofileStringA" (ByVal lpApplicationName A
s String, ByVal lpKeyName As Any, ByVal lpDefault As String,
ByVal lpReturnedString As String, ByVal nSize As Long, ByV
al lpFileName As String) As Long
    Declare Function WritePrivateProfileString Lib "kernel32
" Alias "WritePriva teProfileStringA" (ByVal lpApplicationNa
me As String, ByVal lpKeyName As Any,By Val lpString As Any,
ByVal lpFileName As String) As Long
    Declare Function GetKeyboardType Lib "user32" (ByVal nTy
peFlag As Long) AsL ongDeclare Function GetSystemDirectory L
ib "kernel32" Alias "GetSystemDirectory A" (ByVal lpBuffer A
s 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运行系统上的内存配置。
表2
    (5).GetKeyboardType():该函数得到系统键盘类型,nTypeFlag=0
时返回键盘类型。表3
    (6).为了调用这些API函数更加方便,可以编写一些包含函数。这
些用户自定义函数的功能也需要在模块中。由于篇幅所限,这里只给
出两个函数,其它只列函数名:
    Function SysDir()
    Function WinDir() As String
    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()
        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, KeyNam
e As String, Defaul t AsString, FileName As String) As Strin
g
        Function WinVer()
        Function DosVer()
        Function CPU()
        Function Mode()

    2.建立窗体文件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

    3.运行本程序(本程序在486兼容机Windows3.1下通过)。本程序
能够检测当前部分系统信息,在退出时能将窗口的左、上位置及窗口
状态记录在DEMO.INI文件中,待下次运行时,窗口能保持上次退出时的
位置和状态。
        注意:需要用文本编辑器编辑DEMO.INI
      [Form〗
      Left=100
      Top=100
      Windowstate=0
    并存在当前系统Windows目录下。
    本文仅仅是介绍了一下API函数的使用方法,以作抛砖引玉之用。
真正的应用API函数,还需要更详尽的资料和读者更大的努力。

--
※ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.1.3]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店