HSP3命令入門講座 <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 あれこれ (フォルダ)のページにて紹介してます。

↑TOP↑

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

 タイプ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 あれこれ:ファイル編

↑TOP↑

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

 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)

↑TOP↑

〜HSP3 あれこれ〜
ウィンドウ | オブジェクト | ファイル | フォルダ | キーボード | マウス | メニュー | システム | 文字列 | COM | その他

Copyright © 2005-2011 ゲーム作成ソフトHSPの情報をいろいろと Let's HSP!. All rights reserved.