<一般的な使用方法>
SFC ver0.3からの移行
SFC ver0.3でサポートしていた『'Begin Declaration』によるAPI及び構造体の宣言もほぼ同様に行えます。VBScriptの冒頭部分で、次のように記述してください。
VBScript
これで、以下に述べる『Win32APIの宣言』と『構造体の宣言』および、これらの使用が、SFC ver0.3と同じように可能になります。
Win32APIの宣言
APIの宣言方法は、VB6と殆ど同じです。ただ、全く同じように宣言するとスクリプトを実行する際にエラーになりますので、『'』でコメントアウトします。さらに、通常のコメントと区別するために、宣言文を『'Begin Declaration』と『'End Declaration』で挟みます。つまり、以下の例のように記述してください。
VBScript
上記のように宣言しておくと、MessageBox関数が以下のように使用可能です。
VBScript
構造体の宣言
構造体の宣言も、VB6と同じように行えます。以下の例のように記述してください。
VBScript
構造体は、クラスとして登録されます。使用する際は、以下の例のように記述します。
VBScript
サンプルコード
『'Begin Declaration』を用いてGetOpenFileName及びOPENFILENAMEを宣言して用いる例です。
VBScript
VBScript
Dim SFC
Set SFC = CreateObject("SfcMini.tools")
Execute SFC.Initialize
Set SFC = CreateObject("SfcMini.tools")
Execute SFC.Initialize
これで、以下に述べる『Win32APIの宣言』と『構造体の宣言』および、これらの使用が、SFC ver0.3と同じように可能になります。
Win32APIの宣言
APIの宣言方法は、VB6と殆ど同じです。ただ、全く同じように宣言するとスクリプトを実行する際にエラーになりますので、『'』でコメントアウトします。さらに、通常のコメントと区別するために、宣言文を『'Begin Declaration』と『'End Declaration』で挟みます。つまり、以下の例のように記述してください。
VBScript
'Begin Declaration
'
'Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
'
'End Declaration
'
'Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
'
'End Declaration
上記のように宣言しておくと、MessageBox関数が以下のように使用可能です。
VBScript
Call MessageBox(0, "Hello World!","MessageBox test", 0)
- 『'Declare』宣言は、一行で書いてください。『_』を用いて2行以上にすることは出来ません。
- 『Alias "XXXX"』は、宣言文によっては省略可能です。
構造体の宣言
構造体の宣言も、VB6と同じように行えます。以下の例のように記述してください。
VBScript
'Begin Declaration
'
'Type POINTAPI
' x as long
' y as long
'End Type
'
'End Declaration
'
'Type POINTAPI
' x as long
' y as long
'End Type
'
'End Declaration
構造体は、クラスとして登録されます。使用する際は、以下の例のように記述します。
VBScript
Dim pt
Set pt=new POINTAPI
Set pt=new POINTAPI
サンプルコード
『'Begin Declaration』を用いてGetOpenFileName及びOPENFILENAMEを宣言して用いる例です。
VBScript
option explicit
Dim SFC
Set SFC = CreateObject("SfcMini.tools")
Execute SFC.Initialize
'Begin Declaration
'
'Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
'
'Type OPENFILENAME
' lStructSize As Long
' hwndOwner As Long
' hInstance As Long
' lpstrFilter As String
' lpstrCustomFilter As String
' nMaxCustFilter As Long
' nFilterIndex As Long
' lpstrFile As String
' nMaxFile As Long
' lpstrFileTitle As String
' nMaxFileTitle As Long
' lpstrInitialDir As String
' lpstrTitle As String
' flags As Long
' nFileOffset As Integer
' nFileExtension As Integer
' lpstrDefExt As String
' lCustData As Long
' lpfnHook As Long
' lpTemplateName As String
'End Type
'
'End Declaration
Dim OpenFile
Set OpenFile=New OPENFILENAME
OpenFile.lpstrInitialDir = "C:\"
OpenFile.lStructSize = OpenFile.Length
OpenFile.hwndOwner = 0
OpenFile.lpstrFilter = "*.*"+chr(0)+"*.*"+chr(0)+chr(0)
OpenFile.nFilterIndex = 1
OpenFile.lpstrFile = "テスト.txt" + String(256, 0)
OpenFile.nMaxFile = 256
OpenFile.lpstrDefExt = ""
OpenFile.lpstrTitle = "Open File"
OpenFile.flags = 4 '//hide "Read Only" checkbox
Call GetOpenFileName(OpenFile)
msgbox OpenFile.lpstrFile
Dim SFC
Set SFC = CreateObject("SfcMini.tools")
Execute SFC.Initialize
'Begin Declaration
'
'Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
'
'Type OPENFILENAME
' lStructSize As Long
' hwndOwner As Long
' hInstance As Long
' lpstrFilter As String
' lpstrCustomFilter As String
' nMaxCustFilter As Long
' nFilterIndex As Long
' lpstrFile As String
' nMaxFile As Long
' lpstrFileTitle As String
' nMaxFileTitle As Long
' lpstrInitialDir As String
' lpstrTitle As String
' flags As Long
' nFileOffset As Integer
' nFileExtension As Integer
' lpstrDefExt As String
' lCustData As Long
' lpfnHook As Long
' lpTemplateName As String
'End Type
'
'End Declaration
Dim OpenFile
Set OpenFile=New OPENFILENAME
OpenFile.lpstrInitialDir = "C:\"
OpenFile.lStructSize = OpenFile.Length
OpenFile.hwndOwner = 0
OpenFile.lpstrFilter = "*.*"+chr(0)+"*.*"+chr(0)+chr(0)
OpenFile.nFilterIndex = 1
OpenFile.lpstrFile = "テスト.txt" + String(256, 0)
OpenFile.nMaxFile = 256
OpenFile.lpstrDefExt = ""
OpenFile.lpstrTitle = "Open File"
OpenFile.flags = 4 '//hide "Read Only" checkbox
Call GetOpenFileName(OpenFile)
msgbox OpenFile.lpstrFile