我也寫了一個可以調用 api 的類型庫,不過是針對腳本的,就是在腳本(VBScript/JScript) 中可以調用 api 函數, 而且可以讓 需要回調函數的 api 可以反調用 腳本裏自定義的函數. 或者需要接收或者傳送結構的函數. 這樣就可以在 Windows 下即使沒有安裝編程軟體,也可以打開個記事本來編寫一些有用的程式.
例如 EnumWindows, 在腳本裏可以按如下調用 (VBScript):
Dim hapi, ret
Dim pCallbackObj, lParam
Set hapi = CreateObject("Yeshirow.APIForScript")
Set pCallbackObj = New EnumWindowsProc
Set pCallbackObj.pCallback = GetRef("MyCallback")
ret = hapi.EnumWindows(pCallbackObj, lParam)
'下面是自定義回調 的 VBScript 函數
Public Function MyCallback(ByVal hWnd, ByRef lParam)
' 處理
MyCallback = 1
End Function
' 其中 EnumWindowsProc 也是 VBScript 寫的一個類, 我已經將它寫好在 Callbacks.vbs 裏
' 可以複製來用, 內容是:
Class EnumWindowsProc
Public hWnd, lParam ' lParam 是任意類型的數據,可以是 object 或者其他
Public pCallback
End Class
' 下面是一個傳送結構的 GetWindowRect 的 VBScript
Dim hapi, hRect, ret
Set hapi = CreateObject("Yeshirow.APIForScript")
Set hRect = New RECT
ret = hapi.GetWindowRect(hapi.GetDesktopWindow(), hRect)
MsgBox "窗口邊界: (" & hRect.Left & ", " & hRect.Top & ")-(" & hRect.Right & ", " & hRect.Bottom & ")"
' 其中 RECT 也是一個 VBScript 寫的類,已經寫好在 APITypes.vbs 中, 可以複製過來用, 定義如下
Class RECT
Public [Left], Top, [Right], Bottom
Private Sub Class_Initialize()
Me.Left = CLng(0)
Me.Top = CLng(0)
Me.Right =CLng(0)
Me.Bottom = CLng(0)
End Sub
End Class