`
kakueiken
  • 浏览: 18390 次
  • 性别: Icon_minigender_1
  • 来自: 无线
最近访客 更多访客>>
社区版块
存档分类
最新评论

VBS Call Windows API

 
阅读更多
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帮助手册

    VBS(Visual Basic Scripting Edition)是微软推出的一种脚本语言,主要应用于Windows系统中,尤其在...同时,理解VBS如何与其他Windows组件交互,如COM对象和系统API,将使你在系统管理和自动化任务中更加得心应手。

    VBS参考手册

    最后,VBScript与Windows API的交互是通过`CreateObject`函数来实现的,可以创建和控制各种系统对象,如WMI(Windows Management Instrumentation)用于系统管理和监控,或者FSO(File System Object)用于文件和...

    用vbs实现zip功能的脚本

    - `Call` 语句: 用于调用函数,例如`Call fZip ("C:\vbs","c:\vbs.zip")` 和 `Call fUnzip ("C:\vbs.zip","C:\unzipped")` 分别调用了压缩和解压缩函数,传入了相应的源文件夹或ZIP文件和目标路径。 8. **循环等待...

    vb获取句柄

    在VB中,我们可以使用Windows API函数来实现这一功能。 API(Application Programming Interface)是操作系统提供给程序员的一组预定义函数,允许程序调用操作系统内部的功能。在VB中,调用API函数需要声明函数并...

    VB截屏保存为文件(最简单的方法)

    在VB中,我们可以通过Windows API(应用程序接口)来访问和操作剪贴板,从而实现同样的效果。 API函数在VB中使用前需要先进行声明,声明过程如下: ```vb Private Declare Function OpenClipboard Lib "user32" ...

    VB中注销, 重启和关闭计算机

    `ExitWindowsEx` 是一个Windows API函数,它允许程序请求系统执行诸如注销、重启或关闭等操作。在VB中,我们首先需要声明这个函数,并通过调用来完成相应的任务。 ##### 声明 `ExitWindowsEx` 函数 ```vb Private ...

    pdf转图片输出(3种方式)附带jar包等

    PDFBox和IText是纯Java实现,跨平台性好,但功能可能不如基于Windows API的Jacob强大。Jacob则依赖于特定的操作系统和环境,但能提供更精细的控制。 在实际应用中,应根据项目需求和环境选择合适的方法。同时,确保...

    vb 缩小到托盘

    要实现这个功能,我们需要使用Windows API(应用程序接口),API函数提供了对操作系统底层功能的访问。以下是一个简单的步骤来解释如何在VB中实现这个功能: 1. **导入API函数**: 首先,我们需要在VB项目中导入...

    使用SecureCRT登录路由器.pdf

    常见的远程登录工具包括Windows自带的Telnet程序、Putty以及本文将重点介绍的SecureCRT。SecureCRT因其强大的功能和灵活性,在网络工程师和技术人员中广受欢迎。 #### 二、SecureCRT对比其他工具 ##### 1. Telnet ...

    wincc.rar_Windows编程_Others_

    WinCC,全称Siemens WinCC (Windows Control Center),是西门子公司推出的一款基于Windows操作系统的可视化软件,主要用于工业自动化领域的监控与数据采集系统(SCADA)。WinCC提供了丰富的功能,包括图形化界面设计...

    QTP 技术集锦 学习QTP的好东东

    Call Windows API - **定义**: 如何在 QTP 脚本中调用 Windows API 函数。 - **示例**: 提供具体的调用示例和注意事项。 #### 31. Global 和 Local 区别 - **概念对比**: 解释全局变量和局部变量在 QTP 中的区别...

    VBSCRIPT 速查手册

    12. **Windows批处理**:VBScript也可以用于编写简单的批处理脚本,通过`.vbs`文件在Windows环境中执行自动化任务。 学习VBScript不仅需要理解其语法和结构,还需要熟悉与之交互的各种对象和API。`VBSCRIPT 速查...

    VB编程资源大全(英文源码 控制)

    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 ...

Global site tag (gtag.js) - Google Analytics