Last Update : 2007/05/xx
各種フォルダ(ディレクトリ)のパス文字列を取得する関数です。命令名の由来は、「directory information」から。HSP3から新規に登場した関数ですが、HSP2時代はシステム変数として用意されていたものです。
第1パラメータに指定するタイプは下のようになります。タイプ0〜3は、各種フォルダのパス文字列が返ります。タイプ4は他とは種類が異なります。
タイプ | 取得フォルダパス | マクロ表記 | HSP2 システム変数 |
0 | 現在のフォルダ(カレントフォルダ)。 chdir命令、dialog命令(タイプ16・17)で変動します。 |
dir_cur | curdir |
1 | 自分自身(実行ファイル)が置かれているフォルダ。 実行ファイル起動時点のものなので固定。 |
dir_exe | exedir |
2 | Windowsフォルダ。常に固定。 一般的には、「C:\WINDOWS」か「C:\WINNT」。 |
dir_win | windir |
3 | システムフォルダ。常に固定。一般的には、 「C:\WINDOWS\System32」(Windows XP/Vista)、 「C:\WINNT\System32」(Windows NT/2k)、 「C:\WINDOWS\System」(Windows 95/98/Me)。 |
dir_sys | sysdir |
4 | コマンドライン文字列。 (ファイルを実行ファイルにD&Dした時のパスなど) |
dir_cmdline | cmdline |
- | デスクトップ フォルダ | dir_desktop | - |
- | マイドキュメント フォルダ | dir_mydoc | - |
基本的な取得タイプは計5種です。これ以外に「マイドキュメント」と「デスクトップ」がマクロ定義で用意されてます。また、「最近使ったファイル」、「お気に入り」、「スタートアップ」、「送るフォルダ」、「フォント」のようなWindowsの特殊なフォルダパスもdirinfo関数で取得できるので、HSP拡張プラグイン「hspext.dll」のfxdir命令とほぼ同等の結果を得られます。これについては、HSP3 あれこれ (フォルダ)のページにて紹介してます。
タイプ0〜3の各種フォルダパスの文字列を表示するサンプルスクリプトです。マクロ定義で書いた場合は、コンパイルの際にdirinfo関数へ置き換えられます。
; 各種フォルダパスの表示 mes "現在のカレントフォルダ: "+dirinfo(0) mes "実行ファイル(自分自身)のフォルダ: "+dirinfo(1) mes "Windowsフォルダ: "+dirinfo(2) mes "システムフォルダ: "+dirinfo(3)
; 各種フォルダパスの表示 (マクロ定義) mes "現在のカレントフォルダ: "+dir_cur mes "実行ファイル(自分自身)のフォルダ: "+dir_exe mes "Windowsフォルダ: "+dir_win mes "システムフォルダ: "+dir_sys
たとえば、実行ファイルと同じフォルダに存在している「readme.txt」ファイルをオープンしてみます。自分自身のパスに、「\\」(つまり「\」区切り)付きのファイル名を付け足すことで、ファイルのフルパス文字列になります。
filepath = dirinfo(1) + "\\readme.txt" mes "パス: "+filepath exec filepath, 16
ちなみに、区切りは「\\」の代わりに「/」と書くこともできます。(機能的な違いはありません)
filepath = dirinfo(1) + "/readme.txt" mes "パス: "+filepath exec filepath, 16
実行ファイル直下にある「image」フォルダ内の画像ファイル「hoge.bmp」のファイルパスは下のようになります。
filepath = dirinfo(1) + "\\image\\hoge.bmp" mes "パス: "+filepath
dirinfo関数のタイプ1(dir_exe)はフォルダパス文字列だけです。自分自身の実行ファイル名も取得したい場合は、Win32 API関数を利用する必要があります。(→ HSP3 あれこれ:ファイル編)
dirinfo関数のタイプ4(dir_cmdline)は、「コマンドライン」に渡された文字列を取得します。これは、自分自身の実行ファイル(*.exe)に、任意のファイルをドラッグ&ドロップした時、ファイルパスなどが格納されるものです。
下のようなスクリプトで実行ファイルを作成してください。エクスプローラ上で、実行ファイル(のアイコン)上に適当なファイルをドラッグ&ドロップすると、プログラムが起動してドラッグ&ドロップしたファイルパスが表示されます。
; dirinfo関数 タイプ4 mes "コマンドライン: "+dirinfo(4)
もし、HSPスクリプトエディタ上でテストしたい場合は、スクリプトエディタの[HSP]メニュー→[起動オプション]で仮想のコマンドライン文字列を指定できるようになってます。(通常は空欄にしておいてください)
ちなみに、HSPで作成した実行ファイルからコマンドラインに文字列を送るには、exec命令で可能です。下のスクリプトでは、「あいーん」という文字列がコマンドラインとして渡されることになります。
; 上のコードを実行ファイル自動作成(hsptmp.exe)しておいてください exec "hsptmp.exe あいーん"
◆ 雑多メモ
・ファイルパスにスペースが含まれている場合
Windows NT系OS(2000/XP/Vista/7)上では、ドラッグ&ドロップしたファイルパス文字列内にスペースが存在していた場合、ファイルパスが「"」(ダブルクォーテーション)でくくられる仕様があるので、「"」を取り除く処理が絶対に必要です。「"」が付いたまま状態で、たとえばnoteload命令に指定すると、HSP内部エラー12「ファイルが見つからないか無効な名前です」でプログラムが必ず落ちます。(→
参照、HSP Tips 2 : HSPシステム変数の仕様)
・HSPウィンドウ画面へのドラッグ&ドロップ
実行したプログラムのウィンドウ画面内にファイルをドラッグ&ドロップする。これは、dirinfo関数とは全く別の処理で、Win32
API関数を利用する必要があります。HSP自体にサンプルファイル「sample\new\dragdrop.hsp」が用意されてます。(HSP 3.2〜では「sample\misc\dragdrop.hsp)