命令講座 <dirinfo関数>

Last Update : 2007/05/xx

dirinfo関数 (HSP 3.x)

 各種フォルダ(ディレクトリ)のパスを取得する関数です。命令名の由来は、「directory information」から。HSP3から新規に登場した関数ですが、HSP2時代はシステム変数として用意されていたものです。

 第1パラメータに指定するタイプは以下のとおりです。タイプ0〜3は、各種フォルダのパスが返ります。タイプ4は、他とは系統が異なります。

タイプ 取得フォルダパス マクロ表記 HSP2
システム変数
現在のフォルダ(カレントフォルダ)。
chdir命令dialog命令(タイプ16・17)で変動します。
dir_cur curdir
自分自身(実行ファイル)が置かれているフォルダ。
実行ファイル起動時点のものなので固定。
dir_exe exedir
Windowsフォルダ。常に固定。
一般的には、「C:\WINDOWS」か「C:\WINNT」。
dir_win windir
システムフォルダ。常に固定。一般的には、
C:\WINDOWS\System32」(Windows XP/Vista)、
C:\WINNT\System32」(Windows NT/2k)、
C:\WINDOWS\System」(Windows 95/98/Me)。
dir_sys sysdir
コマンドライン文字列。
(ファイルを実行ファイルにD&Dした時のパスなど)
dir_cmdline cmdline
- デスクトップ フォルダ dir_desktop -
- マイドキュメント フォルダ dir_mydoc -

 基本的な取得タイプは計5種です。ただ、これ以外に「マイドキュメント」、「デスクトップ」、「最近使ったファイル」、「スタートアップ」のようなWindowsの特殊なフォルダパスもdirinfo関数で取得できます。つまり、HSP拡張プラグイン hspext.dll のfxdir命令と全く同じ結果を得られます。これについては、HSP3 あれこれ (フォルダ編)のページにて紹介してます。

^

サンプルスクリプト (各種フォルダパスの取得)

 タイプ0〜3の各種フォルダパスの文字列を表示するサンプルスクリプトです。

;	各種フォルダパスの表示

	mes "現在のカレントフォルダ: "+dirinfo(0)

	mes "実行ファイル(自分自身)のフォルダ: "+dirinfo(1)

	mes "Windowsフォルダ: "+dirinfo(2)

	mes "システムフォルダ: "+dirinfo(3)

 たとえば、実行ファイルと同じフォルダに存在している readme.txt ファイルをオープンしてみます。自分自身のパスに、「\\」(つまり「\」)付きファイル名を付け足します。

	filepath = dirinfo(1) + "\\readme.txt"
	mes "パス: "+filepath

	exec filepath, 16

 たとえば、実行ファイル直下にある「image」フォルダ内の画像ファイルの場合は下のような感じです。

	filepath = dirinfo(1) + "\\image\\hoge.bmp"
	mes "パス: "+filepath

 ちなみに、自分自身の実行ファイル名(フルパス)も取得したい場合は、Win32 API関数を利用する必要があります。(→ HSP3 あれこれ:ファイル編

^

コマンドライン文字列 (タイプ4)

 dirinfo関数のタイプ4は、「コマンドライン」に渡された文字列を取得します。これは、自分自身の実行ファイル(*.exe)に、任意のファイルをドラッグ&ドロップした時、ファイルパスなどが格納されるものです。

 下のようなスクリプトで実行ファイルを作成してください。エクスプローラ上で、実行ファイル(のアイコン)上に適当なファイルをドラッグ&ドロップすると、プログラムが起動してドラッグ&ドロップしたファイルパスが表示されると思います。

;	dirinfo関数 タイプ4

	mes "コマンドライン: "+dirinfo(4)

 なお、実行ファイルを作成するまでもなく、HSPスクリプトエディタの[HSP]→[起動オプション]で仮想のコマンドライン文字列を指定できるので、エディタ上での動作テストが可能です。(通常は空欄にしておくことをお勧めします)

 ちなみに、HSPで作成した実行ファイルからコマンドラインに文字列を逆に送るには、exec命令で可能です。下のスクリプトでは、「あいーん」がコマンドライン文字列として渡されることになります。

;	上のコードを実行ファイル自動作成(hsptmp.exe)しておいてください

	exec "hsptmp.exe あいーん"

- - - - -

※ファイルパスにスペースが含まれている場合
 Windows NT系OS上では、ファイルパスの文字列内にスペースが含まれていると、パスが「"」(ダブルクォーテーション)でくくられる仕様があるので、それを取り除く処理が必要です。(→ 参照、HSP Tips 2 : HSPシステム変数の仕様

※ウィンドウ画面へのドラッグ&ドロップ
 実行したプログラムのウィンドウ画面内にファイルをドラッグ&ドロップする。これは、dirinfo関数とは全く別の処理で、Windows API(Win32 API)関数を利用する必要があります。HSP自体にサンプルファイル(sample\new\dragdrop.hsp)が用意されてます。

^

Copyright © 2005-2008 HSP情報サイト Let's HSP!. All rights reserved.