# DynamicWrapper 调用WIN32_API
64位金字塔
CreateObject("DynamicWrapperX")
32位金字塔CreateObject("DynamicWrapper")
金字塔的Visual Basic系统同样支持调用WIN32 API的各种函数功能,用户可以像普通VB程序一样使用金字塔的WIN32 API。
输入参数
- i= 描述输入参数数量和类型,如前面的"i=ssssls"表示GetPrivateProfileString这个API函数前面有4个字符参数一个整型数值和最后一个字符串参数
- f= 调用方式描述,动态库有_stdcall 和_cdecl这两种方式,跟据调用方式不同选择合理的方式,一般是_stdcall方式§
输出参数
- r= 输出类型
变量类型描述:
const ARGTYPEINFO ArgInfo[] =
{
{'a', sizeof(IDispatch*), VT_DISPATCH}, // a IDispatch*
{'c', sizeof(unsigned char), VT_I4}, // c 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 IUnknown*
{'h', sizeof(long), VT_I4}, // h HANDLE
{'l', sizeof(long), VT_I4}, // l long
{'p', sizeof(void*), VT_PTR}, // p pointer
{'s', sizeof(BSTR), VT_LPSTR}, // s string
{'t', sizeof(short), VT_I2}, // t short
{'u', sizeof(UINT), VT_UINT}, // u unsigned int
{'w', sizeof(BSTR), VT_LPWSTR}, // w wide string
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
示例
64位金字塔环境
- 查找某个标题特征窗口
Set Wrap = CreateObject("DynamicWrapperX")
Wrap.Register"user32.dll","FindWindow","i=ss","f=s", "r=l"
WindowHandle = Wrap.FindWindow("Notepad", "无标题 - 记事本")
If WindowHandle<>0 then
MsgBox "发现窗口"
Else
MsgBox "没发现"
End If
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
- 从C盘拷贝文件
Set Wrap = CreateObject("DynamicWrapper")
Wrap.Register"KERNEL32.DLL","CopyFileA","i=ssl","r=l"
a=Wrap.CopyFileA ("c:\cctv.txt","c:\22.txt",1)
If a=1 Then MsgBox "copy 成功"
1
2
3
4
5
6
2
3
4
5
6
- 这个是用来检测是否有相应的Word已运行程序的标题,有则提示关闭。
strWindowTitle="QQ2009;计算器;a.txt - 记事本" '要关闭的窗口标题多个用;分隔开
Set objWord = CreateObject("Word.Application")
Set colTasks = objWord.Tasks
strWindowTitles=Split(strWindowTitle,";")
For Each strTitle In strWindowTitles
If colTasks.Exists(strTitle) Then
strAnswer=MsgBox("发现指定窗口【"&strTitle&"】是否关闭?",vbYesNo+vbQuestion,"")
If strAnswer=vbYes Then colTasks(strTitle).Close
End If
Next
objWord.Quit
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
- 该示例使用金字塔的VBS系统调用WINDOWS API中的Sleep函数来实现延时功能,参数为延时毫秒数.
Sub StockSleep(slSecond)
Set Wrap = CreateObject("DynamicWrapperX")
Wrap.Register"KERNEL32.DLL","Sleep","i=u","r=l"
Wrap.Sleep(slSecond)
End Sub
1
2
3
4
5
2
3
4
5