# 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
示例

64位金字塔环境

  1. 查找某个标题特征窗口

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
  1. 从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
  1. 这个是用来检测是否有相应的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
  1. 该示例使用金字塔的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