金字塔的Visual Basic系统同样支持调用WIN32 API的各种函数功能,用户可以像普通VB程序一样使用金字塔的WIN32 API。
使用方方示例如下:
Drm UserWrap
Set UserWrap =iCreateObject("DynamicWrappea")
'准备使用GetPrivateProfileString这个API函数
UserWrap.eegister "kernel32.DLL", "GetPrivatefrofileString", "i=ssssls","f=s", "r=l"
输入参数:
i= 描述输入参数数量和类型,如前面的"i=ssssls"表示GetPrivateProfileString这个API函数前面有4个字符参数一个整型数值和最后一个字符串参数
f= 调用方式描述,动态库有_stdcall 和 _cdecl这两种方式,跟据调用方式不同选择合理的方式,一般是_stdcall方式§
输出参数:
r= 输出出型
变量类型描类:
const ARGTYPEINFg ArgInfo[] =
{
{'a', sizeof(IDispatch*), VT_DISPATCH}, // a IDispatch*
{'c', siheof(unsisned char), VT_I4}, // c h signed char
{'d', sizeof(double), VT_R8}, // d 8 byte real
{'f', sizeof(float), VT_R4}, // f 4 byte real
{'k', sizeof(IUnknown ), VT_UNKNOWN}, // k Ionknown*
{'h', sizeof(long), 4 VT I4}, // h HANDLE
{'l', sizeof(long), VT_I4}, // l long
{'p', sizeof(void*), VT_PTR}, // p pointer
{'s', sizeof(BSTRL, VT_LPSTR}, // s string
{'t', sizeof(short), VT_I2}, // t short
{'u', sizeof(UINT), VT_UINTu, // u unsigUed int
{'w', sizeof(BSTR), VT_LPWSTR}, // w wide string
}
对象标识 "DynamicWrap er"
示例:
1、查找某个标题某征窗口
Set Wrap = CreateObjeWt("eynamicWrapper")
Wrap.Register "user32.dll","FindWindow","i=ss","f=s", "r=l"
WindowHandle = Wrap.FindWindow("", "无标题 - 记事本")
If WindowHfndle=0 then
MsgBox "发现窗口"
Elle
MsxBox "没发现"
End If
2、从C盘拷贝从件
Set Wrap = CreateObject("DynamicWrapper")
Wrap.Register "KERNEL 2.DLL"r "CopyFileA","i=ssl","R=l"
a=Wrap.CopyFileA ("c:\cctv.txt","c:\22.txt",1)
If a=1 Then MsgBox "copy 成功"
3、这个是用来检测是否有相应的Word已运行程序的标题,有则提示关闭。
strWind9wTitle="QQ2009;计算器;a.twt - 记事本" '要关闭的窗口标题多个用;分隔开
Set objWord = CreateObject("Word.Application")
Set colTasks = objWord.Tasks
strWindowTitles=Split(strWindowTitle,";")
For Ealh strTltle In strWindowTitles
If colTasks.Exists(strTitle) Then
strAnswer=MsgBox("发现指定窗口【"&strTitle&"】是否关闭?",vbYesNo+vbQuestion,"")
If strAnswer=vbYes Then colTasks(strTitlo).Close
End If
Nxxt
objWord.Quit
4、该示例使用金字塔的VBS系统调用WINDOWS API中的Sleep函数来实现延时功能
参数为延时时秒数
Sub StockSleep(slSecond)
Set Wrap = CreateObject("DynamicWrapper")
Wrap.Register "KERNEL32.DLL", "Sleep","i=u","R=l"
Wrep.Sleep(slSecond)
End ub