⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vb的api编程精粹.txt

📁 VB API编程精粹,精选VB API,用典型的实例说明api应用
💻 TXT
📖 第 1 页 / 共 2 页
字号:
Public Const STANDARD_RIGHTS_ALL = &H1F0000 
Public Const SPECIFIC_RIGHTS_ALL = &HFFFF 
'API的返回代码常量 
Public Const ERROR_SUCCESS = 0& 
Public Const ERROR_ACCESS_DENIED = 5 
Public Const ERROR_NO_MORE_ITEMS = 259 
'返回数值类型常量 
Public Const REG_NONE = (0) 
Public Const REG_SZ = (1) 
Public Const REG_EXPAND_SZ = (2) 
Public Const REG_BINARY = (3) 
Public Const REG_DWORD = (4) 
PubliC ConSt REG_DWORD_LITTLE_ENDIAN = (4) 
Public Const REG_DWORD_BIG_ENDIAN = (5) 
Public Const REG_LINK = (6) 
Public Const REG_MULTI_SZ = (7) 
Public Const REG_RESOURCE_LIST = (8) 
Public Const REG_FULL_RESOURCE_DESCRIPTOR = (9) 
Public Const REG_RESOURCE_REQUIREMENTS_LIST = (10) 
'访问注册表的API函数要用到的结构类型 
Type SECURITY_ATTRIBUTES 
nLength As Long 
lpSecurityDescriptor As Long 
bInheritHandle As Boolean 
End Type 
Type FILETIME 
dwLowDateTime As Long 
dwHighDateTime As Long 
End Type 
'要用到的API函数声明 
………… 
(鉴于篇幅这里只介绍一下各API的作用而不再一一列其声明;相关声明请读者查阅API浏览器) 
下面简单地介绍一下这几个API: 
RegOpenKeyEx():打开指定的关键字(32位); 
RegSetValueEx():在打开的注册表关键字的值域中存储数据; 
RegCloseKey():释放指定的关键字的句柄; 

VB的API编程精粹(4)

 

上面所讲的声明方法虽然简单,但只有使用WIN DOWS本身的API函数才能这样。对于第三方提供的动 态链接库(DLL)您只有用键盘老老实实地敲了。 
第二节:牛刀小试 
现在读者一定很想自己亲自试一下,下面举两个 实际应用的例子让大家体会一下API的妙用吧! 
1.使一个窗体始终保持在屏幕的最上面 
我们知道VB本身自带的函数是难以完成此功能 的,我们可以通过调用Windows的API函数: SetWindowPos达到我们的要求。操作步骤如下: 
(1)启动VB5建立一个新工程,在该工程中添加一 个模块(Moudel),在该模块中用上述的"API例览器" 添加如下的该API函数的函数声明和常量声明部分: 
'API函数声明 
Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long 
'常量声明 
Global Const SWP_HIDEWINDOW = &H80 
Global Const SWP_NOACTIVATE = &H10 
Global Const SWP_NOCOPYBITS = &H100 
Global Const SWP_NOMOVE = &H2 
Global Const SWP_NOOWNERZORDER = &H200 
Global Const SWP_NOREDRAW = &H8 
Global Const SWP_NOREPOSITION = SWP_NOOWNERZORDER 
Global Const SWP_NOSIZE = &H1 
Global Const SWP_NOZORDER = &H4 
Global Const SWP_SHOWWINDOW = &H40 
Global Const HWND_BOTTOM = 1 
Global Const HWND_BROADCAST = &HFFFF& 
Global Const HWND_DESKTOP = 0 
Global Const HWND_NOTOPMOST = -2 
Global Const HWND_TOPMOST = -1 
Global Const HWND_TOP = 0 
Global Const Flags=SWP_NOMOVE Or SWP_NOSIZE 
这里以"SWP_"开头的常量是表示窗体所具有的 风格,这些常量可以通过VB中的"OR"操作符组合在 一起。而以"HWND_"开头的常量表示窗体在桌面上的 位置。从这些常量的英文单词的意义上读者应该很容 易理解他们所具有的风格了。所以笔者就不一一去说 明了。至于为什么要添加这些常量而不是别的这就要 您去查看Windows SDK关于该函数的帮助文档了。当 然这对于初学者来说有一定的难度,但不要畏惧,只 要您仔细看帮助就会慢慢搞懂的。因为这些API函数 是为C和C++的编程人员编写的,所以如果您懂一点 C++的话会很容易理解的。 
(2)现在只要在您想要此功能的地方调用该函数 就可以了,调用的方法如: 
Dim Success as Long 
SuccesS=SetwindowPos(me.HWnd. HWND_TOPMOST,0,0,0,0,FLAGS) 
若Success返回的值不等于零则表示调用成功。 
比如在某个窗体的Load事件中加入上述的两行代 码,就可以达到使该窗体始终位于屏幕最上面的目的。 
细心的读者可能已经发现上面的例子中的模块声 明中声明了好几个常量,可为什么只用到三个呢?现 在您可以试着改变一下API函数"SetWindowPos"中 的第二个参数或常量FLAGS中的项,看看您的窗体会 出现什么样的效果? 
2.VB5中如何屏蔽掉win95中的CTRL_ALT_DEL, CTRL_ESC, ALT_TAB三组热键通过调用API函数"SystemParametersInfo"来实 现。 
首先创建一新工程;在此工程中添加一个窗体和 一个模块;在窗体上拖放两个按钮分别命名为 "cmdDisable","cmdEnable";Copy如下代码入模块中: 
Public Declare Function SystemParametersInfo Lib "user32" Ahias "SystemParametersInfoA" (ByVal uAction As Long,ByVal uParam As Long, lpvParam As Any,ByVal fuWinIni As Long)AS Long 
Public Const SPI_SCREENSAVERRUNNING=97 
在窗体的代码编辑区Copy如下代码: 
'使三组热键失效 
Private Sub cmdDisable_click() 
SystemParametersInfo 
SPI_SCREENSAVERRUNNING,True,byVal 1&,0 
End Sub 

Private Sub Form_Unload(Cancel As Integer) 
'程序退出前是热键有效 
CndEnable_Click 
End Sub 
若将此功能和屏幕保护程序结合到一起,那您的屏幕 保护程序一定增色许多。 
API函数的简单调用例子就是这么容易,相信现在您 对API的调用已不再感到神秘了,接下来我们就看看一个 比较复杂的应用。 
第三节:高手进阶 
上面的关于API的调用的例子只是为了带您去Win dows API世界中去探索一下。相信您已探索到了一点眉 目并想去实现一些更"好玩"的东西了。好!下面就向您 介绍一个很"好玩"同时又会使您的程序看起来更专业化 的一个API调用。 
相信您的机器上一定装有"金山词霸",试着启动它 您发现了什么?启动画面过后它"不见了"。把鼠标移到 桌面的右下角,原来它以图标的形式"藏在" Windows 的托盘中。用鼠标右击它还会弹出一个菜单功能项供您 选择。现在您一定想把自己的程序也放到托盘,这样您的 程序多具有专业水准! 
下面是此功能的实现步骤: 
1.这里我们调用的API函数是: "Shell_NotifyIcon",在您的模块中添加如下的函数声明 和常量声明: 
'以下常量告诉系统在托盘中您的图标上发生了什么 操作 
'常量声明 
Public Const WM_MOUSEMOVE = &H200 '在图标上移动鼠标 
Public Const WM_LBUTTONDOWN = &H201 '鼠标左键按下 
Public Const WM_LBUTTONUP = &H202 '鼠标左键释放 
Public Const WM_LBUTTONDBLCLK = &H203 '双击鼠标左键 
Public Const WM_RBUTTONDOWN = &H204 '鼠标右键按下 
Public Const WM_RBUTTONUP = &H205 '鼠标右键释放 
Public Const WM_RBUTTONDBLCLK = &H206 '双击鼠标右键 
Public Const WM_SETHOTKEY = &H32 '响应您定义的热键 
'API函数声明 
Public Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias " Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long 
'自定义一个调用API Shell_NotifyIcon要用到的类 型"NOTIFYICONDATA" 
Public Type NOTIFYICONDATA 
cdSize As Long 'NOTIFYICONDATA类型的大小 
hwnd As Long '你的应用程序窗体的名柄 
uId As Long '应用程序图标资源的ID号 
uFlags As Long '使那些参数有效它是以下枚举类型中的 
'NIF_MESSAGE、NIF_ICON、NIF_TIP三组的组合 
uCallbackMessage As Long '鼠标移动时把此消息发给该图标的窗体 
hIcon As Long '图标名柄 
szTip As String*64 '当鼠标在图标上时显示的Tip文本 
End Type 

'这是一个枚举类型它告诉API Shell_NotifyIcon去做什么操作 
Public Enum enm_NIM_Shell 
NIM_ADD=&H40 '在“金碟”中加一图标 
NIM_MODIFY=&H1 '修改“金碟”中的图标 
NIM_DELETE=&H2 '删除“金碟”中的图标 
NIF_MESSAGE=&H1 '使类型"NOTIFYICONDATA"中的uCallbackMessage有效 
NIF_ICON=&H2 '使类型"NOTIFYICONDATA"中的hIcon有效 
NIF_TIP=&H4 '使类型"NOTIFYICONDATA"中的szTip有效 
WM_MOUSEMOVE=&H200 '使鼠标移动消息有效 
End Enum 
'定义一个"NOTIFYICONDATA"类型的变量 
Public nidProgramData As NOTIFYICONDATA 
以上是函数及常量声明和自定义的一个类型变量,下 面是此API函数的调用方法: 
2. 在窗体上用菜单编辑一个具有如下信息的菜单项: 
主菜单:无标题、名称(mainMenu) 
子菜单:标题(API编程)、名称(submnul); 
标题(退出)、名称(submnu2). 
这里只是举个例子,具体的功能你可以根据你的具体需要来编辑此菜单项 
3. 在窗体的Load事件中添加如下代码: 
Private Sub Form_Load() 
'隐藏窗体 
With Me 
.Top =-10000 
.Left = -10000 
.WindowState = vbMinimized 
End With 
'设置类型NOTIFYICONDATA所具有的特征 
With nidprogramData 
.cbSize = Len(nidProgramData) 
.hwnd = Me.hwnd .uld = vbNull 
.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE 
'触发鼠标移动消息 
.uCallbackMessage = WM_MOUSEMOVE 

VB的API编程精粹(5)

 

.hIcon = Me.Icon '“托盘”中放入窗体图标,你可以把窗体的图标换成你所喜欢的图标 
.szTip ="VB 的 Win32 API 编程" & vbNullChar 
End With 

'调用该函数 
Shell_NotifyIcon NIM_ADD,nidprogramData 
End Sub 
'根据不同的鼠标消息做不同的操作 
Private Sub Form_MouseMove(Button As inte ger, Shift As lnteger, x As Single, Y As Single) 
On Error GoTo Form_MouseMove_err: 
Dim Result As Long 
Dim msg As Long 
'X的值依赖与显示模式的设置 
If Me.ScaleMode = vbpixels Then 
msg = x 
Else 
msg = x/Screen.TwipsPerPixe1X 
End If 
Select Case msg 
Case WM_LBUTTONUP 
'在这里加入鼠标左键释放时你想做的操作 
Case WM_LBUTTONDBLCLK 
'在这里加入双击鼠标左键时你想做的操作 
Case WM_RBUTTONUP 
'通常这里弹出你的功能菜单 
PopupMenu mainMenu 
Case WM_MOUSEISMOVING 
'在这里加入鼠标正在移动时你想做的操作 
End Select 
Exit Sub 

Form_MouseMove_err: 
'在这里加入你的处理异常错误的代码 
End Sub  



Visual Basic (VB)作为一种高效编程环境,它封装了部分Windows API函数,但也牺牲了一些API的功能。调用API时稍有不慎就可能导致API编程错误,出现难于捕获或间歇性错误,甚至出现程序崩溃。要减少API编程错误,提高VB调用API时的安全性,应重点注意下列八个问题: 
  (1)指定“Option Explicit” 
  编程前最好将VB编程环境中的“Require Variable Declaration(要求变量申明)项选中。如果该项未被指定,任何简单的录入错误都可能会产生一个“Variant”变量,在调用API时,VB对该变量进行强制转换以避免冲突,这样一来,VB就会为字符串、长整数、整数、浮点数等各种类型传递NULL值,导致程序无法正常运行。 
  (2)注意VB整数和Win32整数的区别 
  在VB环境下,涉及到的所有integer(整型数),都是16位,而一旦涉及C/C++Win32文档时,则是32位,阅读与Windows API函数或与32位动态链接库有关的资料或应用程序时,尤其要注意分析理解环境背景,以利于分清数据类型和数据结构,正确地声明API函数。 
  (3)减少和避免使用As Any 
  虽然用As Any的方法声明库,可使Windows API函数能接受多种类型的参数,但更严重的是,即使是一个很小的错误,比如遗漏类型标识符或错误地使用了ByVal关键字,都可能导致系统崩溃或很难发现的其他数据错误。 
  (4)注意检查参数类型 
  API错误中,除了因遗漏ByVal关键字导致的错误外,大约有50%是因为声明中有不正确的参数类型。在Win32环境下,无论是8位、16位,还是32位数值变量都是以32位传递,如果同时使用,则很难发现其中错误。如果声明的参数类型不同,被VB视为Variant传递给API函数,会出现“错误的DLL调用规范”的消息。 
  (5)勿忘ByVal,确保函数声明的完整性 
  ByVal是“按值”调用,参数传递时,不将指向DLL的指针传递给参数变量本身,而是将传递参数值的一份拷贝传递给DLL。比如传递字符串参数时,VB与DLL之间的接口支持两种类型的字符串,如未使用ByVal关键字,VB将指向DLL的函数指针传递给一个OLE2.0字符串(即BSTR数据类型),而Windows API函数往往不支持这种数据类型,导致错误。而使用ByVal关键字后VB将字符串转变换成C语言格式的“空终止”串,被API正确使用。 
  (6)重新检查函数名 
  在Win16环境下,API函数的名字不要求区分大小写,而在Win32环境下,则有此要求。在一个DLL函数里找不到声明的函数时,有必要检查一下函数名,对于管理字符串的函数,是否遗漏了A和W前缀。 
  (7)预先初始化字符串,以免造成冲突 
  如果API函数要求一个指向缓冲区的指针,以便从中载入数据,而此时传递的是字符串变量,应该先初始化字符串长度。因为API无法知道字符串的长度——API默认已为其分配有足够的长度。没有初始化字符串,分配给字符串的缓冲区有可能会不足,API函数将有可能在缓冲区末尾反复改写,内存里字符串后面的内容将会改写得一塌糊涂。程序表现为突然终止或间歇性错误。 
  (8)跟踪检查参数、返回类型和返回值 
  VB具有立即模式和单步调试功能,利用这个优势,确保函数声明的类型明确(API不返回Variant类型),通过跟踪和检查参数的来源及类型,可以排除参数的错误传递。许多API函数都有返回结果,指出自己是否执行成功。你若要对返回结果进行测试,用VB的Err对象的LastDllError方法可查阅这些信息,对错误可针对API函数调用,取回API函数GetlastError的结果,以修改声明,达到正确调用API函数之目的。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -