GetWindowsDirectory関数は、WindowsAPIの一つで、Windowsのシステムフォルダが格納されている場所を取得するために使用される関数です。Windowsのシステムフォルダには、Windowsの動作に必要なファイルやドライバーが格納されています。この関数を使うことで、プログラムからWindowsのシステムフォルダの場所を取得することができます。
API宣言
ExcelVBAでは、GetWindowsDirectory関数を使用する前にAPI宣言を行う必要があります。API宣言を行うことで、ExcelVBAがWindowsAPI関数を認識することができるようになります。API宣言は次のように行います。
Alias "GetWindowsDirectoryA" _
(ByVal lpBuffer As String, ByVal nSize As Long) As Long
解説
パラメータ | 内容 |
Lib | 使用する動的リンクライブラリ(DLL)の名前を指定します。ここでは "kernel32.dll"となります。 |
Alias | API関数名を指定します。ここでは"GetWindowsDirectoryA"という関数名が指定されています。 |
引数については以下の通りです。
引数 | 内容 |
lpBuffer | Windowsディレクトリのパスが格納される文字列へのポインタです。この引数には、関数が呼び出される前に十分なメモリが確保されている必要があります。関数が成功すると、この文字列にディレクトリパスが格納されます。 |
nSize | lpBufferが指すバッファのサイズを指定します。バイト単位でのサイズを表す整数型です。関数が呼び出されると、nSizeに実際に必要なサイズが格納されます。もしlpBufferがNULLの場合、この引数は無視されます。バッファが十分なサイズでない場合、関数はERROR_INSUFFICIENT_BUFFERを返し、nSizeに必要なサイズが格納されます。 |
使い方
GetWindowsDirectory関数を使うには、以下のように関数を呼び出します。
Dim lSize As Long
sBuffer = String$(255, 0)
lSize = Len(sBuffer)
Call GetWindowsDirectory(sBuffer, lSize)
sBuffer = Left$(sBuffer, lSize)
MsgBox "Windowsのシステムフォルダは、" & sBuffer & "です。
この例では、String$関数を使ってsBuffer変数に255バイトの空の文字列を作成し、Len関数で文字列の長さを取得してlSize変数に代入します。次に、GetWindowsDirectory関数を呼び出して、Windowsのシステムフォルダの場所を取得します。取得した場所は、sBuffer変数に格納されます。最後に、MsgBox関数を使って取得した場所を表示します。
プログラミング例
以下は、GetWindowsDirectory関数を使用して、Windowsのシステムフォルダにあるcmd.exeファイルを起動するプログラムの例です。
Alias "ShellExecuteA" _
(ByVal hwnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Declare Function GetWindowsDirectory Lib "kernel32" _
Alias "GetWindowsDirectoryA" _
(ByVal lpBuffer As String, ByVal nSize As Long) As Long
Sub StartCmd()
Dim sBuffer As String
Dim lSize As Long
Dim sCmdPath As String
sBuffer = String$(255, 0)
lSize = Len(sBuffer)
Call GetWindowsDirectory(sBuffer, lSize)
sBuffer = Left$(sBuffer, lSize)
sCmdPath = sBuffer & "\System32\cmd.exe"
Call ShellExecute(0&, "open", sCmdPath, "", sBuffer, vbNormalFocus)
End Sub
この例では、ShellExecute関数を使用して、Windowsのシステムフォルダにあるcmd.exeファイルを起動します。GetWindowsDirectory関数を使用して、Windowsのシステムフォルダの場所を取得し、それをsBuffer変数に代入します。次に、sBuffer変数と"\System32\cmd.exe"を結合して、sCmdPath変数にcmd.exeファイルのパスを作成します。最後に、ShellExecute関数を呼び出して、sCmdPath変数の値を使ってcmd.exeファイルを起動します。
まとめ
GetWindowsDirectory関数を使う方法について解説しました。Windowsのシステムフォルダの場所を取得することで、プログラムの開発や実行に必要なファイルやドライバーを取得することができます。