可以用DynamicWrapper,但它好象不支持参数为struct的函数。 金字塔帮助文件关于DynamicWrapper的说明: 金字塔的Visual Basic系统同样支持调用WIN32 API的各种函数功能,用户可以像普通VB程序一样使用金字塔的WIN32 API。 使用方式示例如下: Dim UserWrap Set UserWrap = CreateObject("DynamicWrapper") '准备使用GetPrivateProfileString这个API函数 UserWrap.Register "kernel32.DLL", "GetPrivateProfileString", "i=ssssls","f=s", "r=l" 输入参数: 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 } 对象标识 "DynamicWrapper" 示例: 1、查找某个标题特征窗口 Set Wrap = CreateObject("DynamicWrapper") Wrap.Register "user32.dll","FindWindow","i=ss","f=s", "r=l" WindowHandle = Wrap.FindWindow("", "无标题 - 记事本") If WindowHandle=0 then MsgBox "发现窗口" Else MsgBox "没发现" End If 2、从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 成功" 3、这个是用来检测是否有相应的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 4、该示例使用金字塔的VBS系统调用WINDOWS API中的Sleep函数来实现延时功能 参数为延时毫秒数 Sub StockSleep(slSecond) Set Wrap = CreateObject("DynamicWrapper") Wrap.Register "KERNEL32.DLL", "Sleep","i=u","R=l" Wrap.Sleep(slSecond) End Sub