VBS调用系统API

如Beep的API声明为

Public Declare Function Beep Lib “kernel32″ Alias “Beep” (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long

则使用方法如下

‘创建对象
Set Wrap = CreateObject("DynamicWrapper")
‘注册API
Wrap.Register "KERNEL32.DLL", "Beep", "i=ll", "f=s", "r=l"
‘调用API
Wrap.Beep(500, 100)

其中注册API中, “i=ll”是API的参数类型, “f=s”是调用方式, “r=l”是返回类型
这些可以参考下面的说明。

REM i: (Argument Type)
REM ‘a‘, sizeof(IDispatch*), VT_DISPATCH}	// a IDispatch*
REM ‘c‘, sizeof(unsigned char), VT_I4}		// c signed char
REM ‘d‘, sizeof(double), VT_R8}			// d 8 byte real
REM ‘f‘, sizeof(float), VT_R4}			// f 4 byte real
REM ‘k‘, sizeof(IUnknown*), VT_UNKNOWN}		// k IUnknown*
REM ‘h‘, sizeof(long), VT_I4}			// h HANDLE
REM ‘l‘, sizeof(long), VT_I4}			// l long
REM ‘p‘, sizeof(void*), VT_PTR}			// p pointer
REM ‘s‘, sizeof(BSTR), VT_LPSTR}		// s string
REM ‘t‘, sizeof(short), VT_I2}			// t short
REM ‘u‘, sizeof(UINT), VT_UINT}			// u unsigned int
REM ‘w‘, sizeof(BSTR), VT_LPWSTR}		// w wide string

REM f: (Call Method)
REM ‘m‘ - DC_MICROSOFT 0x0000, Default
REM ‘b‘ - DC_BORLAND 0x0001, Borland compat
REM ‘s‘ - DC_CALL_STD 0x0020, __stdcall
REM ‘c‘ - DC_CALL_CDECL 0x0010, __cdecl
REM ‘4‘ - DC_RETVAL_MATH4 0x0100, Return value in ST
REM ‘8‘ - DC_RETVAL_MATH8 0x0200, Return value in ST

REM r: (Return Type)
REM Same as i

示例:

‘用机箱内的蜂鸣器播放音乐
Sub BeepMusic()
	Set Wrap = CreateObject("DynamicWrapper")
	Wrap.Register "KERNEL32.DLL", "Beep", "i=ll", "f=s", "r=l"
	res = Wrap.Beep(500, 100)
	res = Wrap.Beep(550, 100)
	res = Wrap.Beep(600, 100)
	res = Wrap.Beep(650, 100)
	res = Wrap.Beep(700, 700)
	WScript.Sleep 200
	res = Wrap.Beep(700, 100)
	res = Wrap.Beep(650, 100)
	res = Wrap.Beep(600, 100)
	res = Wrap.Beep(550, 100)
	res = Wrap.Beep(500, 700)
End Sub
BeepMusic
‘取前景窗体标题
Sub GetForeWindowCaption()
	Const WM_GETTEXT = &HD
	Set Wrap = CreateObject("DynamicWrapper")
	Wrap.Register "USER32.DLL", "GetForegroundWindow", "f=s", "r=l"
	Wrap.Register "USER32.DLL", "SendMessage", "i=lllr", "f=s", "r=l"
	Title = Space(100)
	res = Wrap.SendMessage(Wrap.GetForegroundWindow(), WM_GETTEXT , 100, Title)
	GetForeWindowCaption = Title
End Sub
MsgBox GetForeWindowCaption
‘发送键盘消息,显示桌面
Sub ShowDesktop()
	Const VK_LWIN = &H5B
	Const VK_D = &H44
	Public Const KEYEVENTF_KEYUP = &H2
	Set Wrap = CreateObject("DynamicWrapper")
	Wrap.Register "USER32.DLL", "keybd_event", "i=ccll", "f=s"
	Wrap.keybd_event VK_LWIN, 0, 0, 0
	Wrap.keybd_event VK_D, 0, 0, 0
	Wrap.keybd_event VK_D, 0, KEYEVENTF_KEYUP, 0
	Wrap.keybd_event VK_LWIN, 0, KEYEVENTF_KEYUP, 0
End Sub
ShowDesktop

VBS调用系统API

时间: 2024-10-10 10:11:02

VBS调用系统API的相关文章

VBS调用windows api函数(postmessage)实现后台发送按键脚本

'=========================================================================='' VBScript Source File -- Created with SAPIEN Technologies PrimalScript 4.0'' NAME: '' AUTHOR: Microsoft , Microsoft' DATE : 2014/8/10'' COMMENT: ''===================定义变量,注册

实例365(2)---------调用系统api修改系统时间

一:截图 二:代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; namespace SetDate { public partial cl

调用系统API还是很高效的,不必担心性能

代码如下: void MainWindow::on_pushButton_2_clicked() { QTime total; total.start(); int nCount=0; for (int i=1; i<=1000*1000; i++) { QTime t1; t1.start(); int nUse = t1.elapsed(); if (nUse <1000) nCount++; } qDebug() << QString::number(total.elapse

Android连接wifi,调用系统API【转】

本文转载自:http://blog.csdn.net/aaa1050070637/article/details/54136472 直接上代码,简单粗暴,一看就懂 [java] view plain copy import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.wifi.ScanResult; impor

C#调用Windows API详解(上)

以前我写过通过WMI来获取有关系统信息的系列文章,确实通过WMI能够恨轻易地实现很多我们想实现的功能,不过有些情况下我们很难利用WMI来实现一些 复杂的功能,比如最近我做的一个项目,其中有一个功能就是要更改系统当前时间,利用WMI就很难实现(我没有找到相关的方法),还有一些其它方面的功能, 也比较难以通过WMI来实现,也许是WMI需要较高的权限才能执行的原因吧.所以,尽管我们不愿意,但是又不得不通过调用Windows 的API来实现.本文的目的就是讲述如何在C#中调用Windows的系统API.

C#在winform中调用系统控制台输出

在Winform程序中有时候调试会通过Console.Write()方式输出一些信息,这些信息是在Visual Studio的输出窗口显示. 所以就会想,能不能调用系统的Cmd窗口输出呢,经过一番查阅,发现是可以的,现在就把方法写下了: 主要用到的是win32 API函数实现的: 1 [DllImport("kernel32.dll")] 2 static extern bool FreeConsole(); 3 [DllImport("kernel32.dll")

如何调用系统隐藏的API,或者使用系统未开放的类

一.反射 可以通过反射来调用系统隐藏的API, 但对于已经被系统隐藏的类似乎不太行得通. 二.使用系统源码编译后的classes.jar 路径:out/target/common/obj/JAVA_LIBRARIES/framework_intermediates 将此jar包添加到项目中后,在使用系统相关类或者隐藏的API时,就不会出现错误标识的小红点提示. 需要注意的是: 1,在manifest中标识:android:sharedUserId="android.uid.system"

python 中调用windows系统api操作剪贴版

# -*- coding: utf-8 -*- ''' Created on 2013-11-26 @author: Chengshaoling ''' import win32clipboard as w32 import win32con class OperateClipboard(object): def __init__(self): # print "OperateClipboard" pass def getText(self): w32.OpenClipboard()

Android调用系统相机、自定义相机、处理大图片

Android调用系统相机和自定义相机实例 本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显示出来,该例子也会涉及到Android加载大图片时候的处理(避免OOM),还有简要提一下有些人SurfaceView出现黑屏的原因. Android应用拍照的两种方式,下面为两种形式的Demo展示出来的效果.    知识点: 一.调用系统自带的相机应用 二.自定义我们自己的拍照界面 三.关于计算机解析图片原理(如何正确加载图片到Android应用中) 所需