vbscript,javascript 中调用 win32 API 的实现。

来源:互联网 发布:彩票在线关注源码 编辑:程序博客网 时间:2024/05/16 08:23

根据“脚本魔术师”的经验,发现用户只需要一种简单好用的脚本语言,并不需要很多语法的啰嗦。

“脚本魔术师”调用Win32 API 时只能做到传值的调用,对于要求用指针传递参数并未做合适的处理。

不过有上次的实现经验,这次写起来还是有一点信心。

先看一段vbscript 的代码:

dim Api

dim Param1

dim Param2

Set Api=NewObject("CCall") '获得CCall 实例

Set param1=NewObject("CMemory") '新增的内存管理对象

Set Param2=NewObject("CMemory")  '参数2

Param1.NewStructMemory "lpName=s255"  '  GetComputerName 函数 的第一个参数,分配255个字节

Param2.NewStructMemory "lpSize=p" ' GetComputerName 函数的第二个参数,该参数要求传指针

Param2.LetItemValue "lpSize",255 '赋值为255

dim addr

Api.LoadLib "Kernel32" 'GetComputerName 的库

addr=GetProcAddr("GetComputerNameA") '取得函数地址

Api.CallByAddress addr,Param1,Param2 '这样就完成了API的调用,其实可以用一个函数完成 CallApiByName(DllName,sFunctionName,Param....)

'取得计算机名

Computername=Param1.GetItemValue("lpName")'也可以用 0 作为参数,意指第一个参数,不过用伪名更可读

CMsgbox Computername 'NET-MANAGER

ComputernameLen=Param2.GetItemValue("lpSize")

CMsgbox ComputernameLen '11 接受到的实际长度

'清理现场

Set Param1=nothing

Set Param2=nothing

Set Api=nothing

 '虽然还是麻烦点,但还是实现了,有了这个基础,再做一个 Wraper 或 CodeGen 不是难事

有人会问,那么对结构体的参数呢,比如:GetWindowRect

其实很容易,认真看上面的代码

Param2.NewStructMemory "Left=p","Top=p","Right=p","Bottom=p"    '这样就完成了一个结构体的内存声明

我还是写写吧

dim Api

dim Param1

dim Param2

Dim Form1

Set Form=NewObject("Form","Form1")

Set Api=NewObject("CCall") '获得CCall 实例

Set param1=NewObject("CMemory") '新增的内存管理对象

Set Param2=NewObject("CMemory")  '参数2

Param1.NewStructMemory "hwnd=l"  '  函数 的第一个参数,该参数使用值传递 类型指定为 "l"

Param2.NewStructMemory "Left=p","Top=p","Right=p","Bottom=p"     函数的第二个参数,该参数要求传结构体指针

Param1.LetItemValue "hwnd",Form1.hwnd   '赋值为窗体的句柄

dim addr

Api.LoadLib "User32" 'GetWindowRect 的库

addr=GetProcAddr("'GetWindowRect ") '取得函数地址

Api.CallByAddress addr,Param1,Param2 '这样就完成了API的调用,其实可以用一个函数完成 CallApiByName(DllName,sFunctionName,Param....)

'取得计算机名

Left=Param2.GetItemValue("Left")'也可以用 0 作为参数,意指第一个参数,不过用伪名更可读

Top=Param2.GetItemValue("Top") '索引可用 1作为参数

......

CMsgbox  "Left=" & Left & vbcrlf & "Top=" & Top

'清理现场

Set Param1=nothing

Set Param2=nothing

Set Api=nothing

Set Form1=nothing

EndApp true '结束程序

 

 

日出脚本现在版本为1.0 下载地址见:http://download.csdn.net/user/fupozsl