HSP!ファイルをD&Dしてそのパスを知るには?フリーウェアなWindowsプログラミングツール『HSP』(公式サイト「HSPTV!」)。ドラッグ&ドロップ(D&D)したファイルのパスを取得する方法です。これには大きく2つの状態が想定されます。HSP製実行ファイル(のアイコン)にファイルをドラッグ&ドロップscreen命令で用意したHSPのウィンドウ上にファイルをドラッグ&ドロップ実行ファイル(のアイコン)にファイルをD&Dエクスプローラなどのファイラー上で、HSPで作成した実行ファイルのアイコンに、何かしらファイルをドラッグ&ドロップ(D&D)したとします。すると、実行ファイルが起動しますが、ここでドラッグ&ドロップされたファイルパス文字列を取得します。システム変数「dir_cmdline」を利用します。これは「コマンドライン」(コマンドライン引数)の文字列です。dirinfo(4)ちなみに、HSPスクリプトエディタ上では仮想のコマンドライン文字列を指定できるようになってます。[HSP]メニューの[起動オプション]です。これを利用すればエディタ上での動作テストが可能です。(利用しない場合は空欄にしておくことをオススメします。スペースが含まれてた場合、パスの前後が「"」で括られる仕様があります。Files\〜」)「"」付きのままのファイルパスだと、exist命令で存在しないと判定されます。込み関連命令(noteload命令、bload命令、picload命令など)に指定すると、確実にHSPエラー12になります。備えて、「"」を取り除く処理を必ず用意してください。'"'上のHSP3コードはpeek関数で先頭バイトを取得し「"」ならば、getstr命令で前の「"」分(1バイト)をスキップさせて後ろの「"」までを切り出す、という処理になってます。screen命令で用意したウィンドウ上にファイルをD&DHSPのscreen命令やbgscr命令で用意したウィンドウ上にファイルがドラッグ&ドロップ(D&D)された場合に、このファイルパス文字列を取得します。API関数を利用する必要があります。HSP本体の「sample\new\dragdrop.hsp」にサンプルスクリプトが用意されてます。3.2〜では「sample\misc\dragdrop.hsp」)簡単に流れを書くと、DragAcceptFiles関数で自ウィンドウにドロップを許可します。ファイルがドロップされると、ウィンドウメッセージ「WM_DROPFILES」がWindowsから通知されるので、これを捕らえるためあらかじめHSPのoncmd命令を用意しておいて、この通知があった時のラベルジャンプ先を指定しておきます。ジャンプ先では、wParamにドロップされたファイルの情報が含まれてる構造体のハンドルが返るので、これをDragQueryFile関数に指定して、ドロップされたファイルパスを取得します。ドロップされたウィンドウ内の位置を知りたければ、標準のシステム変数「mousex」「mousey」を見ます。最後にDragFinish関数でハンドルを開放します。機械語(マシン語)を埋め込んで処理を実現してました。使えるようになってはいますが、利用価値がないので使わないでください。