VBSからAPI関数を呼び出す方法として、別途作成したDLL経由で呼び出す方法や”SFC mini“、”DynaCall“といったツールを使う方法がありますが、わりとよく使われるのが『Excel経由でCALL関数を使って呼び出す』方法です。
Dim h
CreateObject("WScript.Shell").Run "notepad", 1, False
With CreateObject("Excel.Application")
h = .ExecuteExcel4Macro("CALL(""user32"", ""FindWindowA"", ""JCJ"", ""Notepad"", 0)")
If h = 0 Then WScript.Quit
Call .ExecuteExcel4Macro("CALL(""user32"", ""SendMessageA"", ""JJJJJ"", " & h & ", 273, 65, 0)")
End With
上記コードを見るとExecuteExcel4MacroメソッドでExcel4.0マクロ関数を実行しているようですが、ここで使われているのが実は「CALL」関数です。この関数の引数でAPI関数名やDLL名を指定しているわけです。
CALL(モジュール名, プロシージャ名, タイプ, [引数 1], …, [引数 n])
「CALL 関数」より
第一引数でモジュール名、第二引数で関数名、これはすぐ分かると思いますが、問題なのが第三引数。上記コードを見ると「JJJJJ」となっていて、これが一体何を表しているのかよく分からない人も多いだろうと思います。
そこでMicrosoftの説明ページを見てみると、下記のような記述があります。
http://office.microsoft.com/ja-jp/excel-help/HP010343000.aspx?CTT=5&origin=HP010342224
“タイプ” の先頭の文字では、戻り値のデータ型を指定します。残りの文字では、すべての引数のデータ型を指定します。たとえば、戻り値が浮動小数点数、引数が整数と浮動小数点数である DLL 関数は、”タイプ” 引数として “BIB” を取ります。
この「JJJJJ」というのは戻り値と引数のデータ型を文字列で表しているわけです。
そこで、改めて上記コードが一体どのような処理を行っているのかというと、
1. メモ帳を起動します。
2. FindWindowでメモ帳のウィンドウハンドルを取得します。
3. 2.で取得したハンドルを元にウィンドウに対してSendMessageでWM_COMMAND(&H111(273))、wParam:&H41(65)を送り、メモ帳のバージョン情報を表示します。
といった処理を行っているわけです。
上記のようなVBSからAPI関数を呼び出す処理は、ウィンドウズスクリプトプログラマさんのブログ「Windows Script Programming」にて多数紹介されていますので、興味がある方は参考にされてはいかがでしょうか。
分享到:
相关推荐
VBS(Visual Basic Scripting Edition)是微软推出的一种脚本语言,主要应用于Windows系统中,尤其在...同时,理解VBS如何与其他Windows组件交互,如COM对象和系统API,将使你在系统管理和自动化任务中更加得心应手。
最后,VBScript与Windows API的交互是通过`CreateObject`函数来实现的,可以创建和控制各种系统对象,如WMI(Windows Management Instrumentation)用于系统管理和监控,或者FSO(File System Object)用于文件和...
- `Call` 语句: 用于调用函数,例如`Call fZip ("C:\vbs","c:\vbs.zip")` 和 `Call fUnzip ("C:\vbs.zip","C:\unzipped")` 分别调用了压缩和解压缩函数,传入了相应的源文件夹或ZIP文件和目标路径。 8. **循环等待...
在VB中,我们可以使用Windows API函数来实现这一功能。 API(Application Programming Interface)是操作系统提供给程序员的一组预定义函数,允许程序调用操作系统内部的功能。在VB中,调用API函数需要声明函数并...
在VB中,我们可以通过Windows API(应用程序接口)来访问和操作剪贴板,从而实现同样的效果。 API函数在VB中使用前需要先进行声明,声明过程如下: ```vb Private Declare Function OpenClipboard Lib "user32" ...
`ExitWindowsEx` 是一个Windows API函数,它允许程序请求系统执行诸如注销、重启或关闭等操作。在VB中,我们首先需要声明这个函数,并通过调用来完成相应的任务。 ##### 声明 `ExitWindowsEx` 函数 ```vb Private ...
PDFBox和IText是纯Java实现,跨平台性好,但功能可能不如基于Windows API的Jacob强大。Jacob则依赖于特定的操作系统和环境,但能提供更精细的控制。 在实际应用中,应根据项目需求和环境选择合适的方法。同时,确保...
要实现这个功能,我们需要使用Windows API(应用程序接口),API函数提供了对操作系统底层功能的访问。以下是一个简单的步骤来解释如何在VB中实现这个功能: 1. **导入API函数**: 首先,我们需要在VB项目中导入...
常见的远程登录工具包括Windows自带的Telnet程序、Putty以及本文将重点介绍的SecureCRT。SecureCRT因其强大的功能和灵活性,在网络工程师和技术人员中广受欢迎。 #### 二、SecureCRT对比其他工具 ##### 1. Telnet ...
WinCC,全称Siemens WinCC (Windows Control Center),是西门子公司推出的一款基于Windows操作系统的可视化软件,主要用于工业自动化领域的监控与数据采集系统(SCADA)。WinCC提供了丰富的功能,包括图形化界面设计...
Call Windows API - **定义**: 如何在 QTP 脚本中调用 Windows API 函数。 - **示例**: 提供具体的调用示例和注意事项。 #### 31. Global 和 Local 区别 - **概念对比**: 解释全局变量和局部变量在 QTP 中的区别...
12. **Windows批处理**:VBScript也可以用于编写简单的批处理脚本,通过`.vbs`文件在Windows环境中执行自动化任务。 学习VBScript不仅需要理解其语法和结构,还需要熟悉与之交互的各种对象和API。`VBSCRIPT 速查...
dynlistmnu.zip While trying to come up with a Dynamic menu in VB, I decided that VBs menu object was just too much of a pain to work with This project contains a form to mimic the functionality ...