コールバック関数を使用するにはまず、以下の例のようにコールバック関数を含むクラスオブジェクトを作成します。
VBScript
Class EnumWindowsProc
Public Function CallBack(hWnd,lParam)
  Dim wName
  if IsWindowVisible(hWnd) then
    wName=space(256)
    if GetWindowText(hWnd,wName,256)<>0 then
      wName=left(wName,instr(1,wName+chr(0),chr(0))-1)
      T=T+wName+vbcrlf
    end if
  End If
  CallBack=1
End Function
End Class














JScript
var EnumWindowsProc=new Object();
EnumWindowsProc.CallBack=
function CallBack(hWnd,lParam) {
  if (IsWindowVisible(hWnd)) {
    if (GetWindowText(hWnd,wName,256)) {
      var wName2=wName.str;
      wName2=wName2.substring(0,wName2.indexOf("\0",0));
      T=T+wName2+"\r\n";
    }
  }
}











  • 関数名は必ず『CallBack』。


 API呼び出しは、次の例のように行ってください。

VBScript
EnumWindows EnumWindows.CallBack(new EnumWindowsProc,2),0


JScript
EnumWindows(EnumWindows.CallBack(EnumWindowsProc,2),0)

  • 『EnumWindows.CallBack()』の2番目の引数には、コールバック関数の引数の数(EnumWindowsProcの場合は2)を指定。


サンプルコード

 EnumWindwsの使用例です。サンプルプログラムとして、ダウンロードファイルに含まれています。
VBScript
option explicit
dim EnumWindows,IsWindowVisible,GetWindowText

Sub Declare(obj,dll,proc)
  set obj=CreateObject("SfcMini.DynaCall")
  obj.Declare dll,proc
End Sub
Declare EnumWindows, "user32","EnumWindows"
Declare IsWindowVisible, "user32","IsWindowVisible"
Declare GetWindowText, "user32","GetWindowTextA"

Dim T
T=""
EnumWindows EnumWindows.CallBack(new EnumWindowsProc,2),0
MsgBox T

Class EnumWindowsProc
Public Function CallBack(hWnd,lParam)
  Dim wName
  if IsWindowVisible(hWnd) then
    wName=space(256)
    if GetWindowText(hWnd,wName,256)<>0 then
      wName=left(wName,instr(1,wName+chr(0),chr(0))-1)
      T=T+wName+vbcrlf
    end if
  End If
  CallBack=1
End Function
End Class






























JScript
var EnumWindows=WScript.CreateObject("SfcMini.DynaCall");
var IsWindowVisible=WScript.CreateObject("SfcMini.DynaCall");
var GetWindowText=WScript.CreateObject("SfcMini.DynaCall");
EnumWindows.Declare("user32","EnumWindows");
IsWindowVisible.Declare("user32","IsWindowVisible");
GetWindowText.Declare("user32","GetWindowTextA");

var wName=WScript.CreateObject("SfcMini.Structure");
wName("str","String*256");

var T="";

var EnumWindowsProc=new Object();
EnumWindowsProc.CallBack=
function CallBack(hWnd,lParam) {
  if (IsWindowVisible(hWnd)) {
    if (GetWindowText(hWnd,wName,256)) {
      var wName2=wName.str;
      wName2=wName2.substring(0,wName2.indexOf("\0",0));
      T=T+wName2+"\r\n";
    }
  }
}

EnumWindows(EnumWindows.CallBack(EnumWindowsProc,2),0);
WScript.Echo(T);



























実行結果
EnumWindows