Windows API

Windows API

Previous pageReturn to chapter overviewNext page

金字塔的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