例えば、プログラムが"C:\program"というフォルダーに入っているとします。
この時、プログラムでC:\programを特定してメッセージボックスで表示するにはどうすればいいですか。
プログラム自身のフォルダー
Re: プログラム自身のフォルダー
もっとも簡単な方法はWIN32 API GetCurrentDirectoryでプログラム自身のフォルダーを特定できます。
ただしプログラム実行中にカレントディレクトリが移動するとまったく違う結果が返ってきます。
なのでソースコードのステップが増えますが以下の方法でプログラム自身のフォルダーを特定できます。
①WIN32 API GetModuleFileNameで指定されたモジュールのファイルパスを取得します。
第一パラメータの0を指定すると自身のモジュールのファイルパスを取得できます。
Dim Path[255] As Byte
Dim Leng As Long
Leng = GetModuleFileName(0,Path,255)
②ABで定義されている_splitpath関数でファイルパスをドライブ名、パス名、ファイル名、拡張子に分解します。
Dim Drv[255] As Byte
Dim Dir[255] As Byte
Dim File[255] As Byte
Dim Ext[255] As Byte
_splitpath(Path,Drv,Dir,File,Ext)
③上記で分解したドライブ名、パス名を連結します
lstrcpy(Path,Drv)
lstrcat(Path,Dir)
④上記で取得した結果をメッセージボックスで表示します
MessageBox(NULL,Path,"TEST",MB_OK)
よろしくお願いします。
ただしプログラム実行中にカレントディレクトリが移動するとまったく違う結果が返ってきます。
なのでソースコードのステップが増えますが以下の方法でプログラム自身のフォルダーを特定できます。
①WIN32 API GetModuleFileNameで指定されたモジュールのファイルパスを取得します。
第一パラメータの0を指定すると自身のモジュールのファイルパスを取得できます。
Dim Path[255] As Byte
Dim Leng As Long
Leng = GetModuleFileName(0,Path,255)
②ABで定義されている_splitpath関数でファイルパスをドライブ名、パス名、ファイル名、拡張子に分解します。
Dim Drv[255] As Byte
Dim Dir[255] As Byte
Dim File[255] As Byte
Dim Ext[255] As Byte
_splitpath(Path,Drv,Dir,File,Ext)
③上記で分解したドライブ名、パス名を連結します
lstrcpy(Path,Drv)
lstrcat(Path,Dir)
④上記で取得した結果をメッセージボックスで表示します
MessageBox(NULL,Path,"TEST",MB_OK)
よろしくお願いします。