スクリプトプリクス トップ >> HSP3 >> HSP3でファイルパスを取得する時の問題

HSP3でファイルパスを取得する時の問題

スポンサーリンク

HSP掲示板で質問に答えていたときに気が付いた問題。

Windows2000SP4とWindowsXPProSP3でファイルパスを取得するときに違いがあり問題が発生することに気が付いた。


Windows2000SP4では以下のコードで、
 ソフト起動 > ダイアログからファイル読み込み
 D&D
 関連付けからダブルクリック
どれも、問題なくファイルパスが取得できる

[HSP拡張マクロを使用する]を有効で

file=dir_cmdline
if peek(file, ) = '"' : getstr file, file, 1, '"'



ところが、WindowsXPProSP3では、
 ソフト起動 > ダイアログからファイル読み込み
 D&D
は問題なくファイルパスが取得できるが
 関連付けからダブルクリック
は取得できない。

ANTARESさんからヒントを頂いたので検証したところ、以下のようだった。


ソフト起動 > ダイアログからファイル読み込み
 :fileに只のファイルパスが入る
D&D
 :fileにダブルクォーテーションで括られたファイルパスが入る
ダブルクリック
 :fileに最初に半角スペース、ダブルクォーテーションで括られたファイルパスが入る

つまり、条件わけに
何もしなくて良いもの
ダブルクォーテーション分1ビットずらしたもの
スペースとダブルクォーテーション分2ビットずらしたもの
3種類必要。


HSP3.1用以降3.2にも適用
[HSP拡張マクロを使用する]を有効で

file=dir_cmdline
if peek(file,0)='"' : getstr file, file, 1, '"'
if peek(file,1)='"' : getstr file, file, 2, '"'

リピートの記述から変更しました。
理由は追記を読んでください。



HSP3.2用
HSP3.2ではstrtrimという空白を削除する命令が使えるのでそれを使用
[HSP拡張マクロを使用する]を有効で

file=dir_cmdline
file=strtrim(file,3) ;file=strtrim(file,1)でも可
if peek(file,)='"' : getstr file, file, 1, '"'


上のコードでWindows2000もWindowsXPも問題なく開くことが出来るようになった。

http://hsptv.sakura.ne.jp/play/pforum.php?mode=all&num=27841
/////////////////////////////////////////
2009年9月22日追記

リピートで10000回回して時間測定してみた。
HSP3.2で実行ファイルを作って、各関連付けして測定


;1. 8.5ms〜9.5ms
if peek(file,0)='"' : getstr file, file, 1, '"'
if peek(file,0)=' ' : getstr file, file, 2, '"'

;2. 8.5ms〜9.5ms
if peek(file,0)='"' : getstr file, file, 1, '"'
if peek(file,1)='"' : getstr file, file, 2, '"'

;3. 11.5ms〜12.5ms ;リピート使ってますから…orz
repeat 2
if peek(file,cnt)='"' : getstr file, file, cnt+1, '"'
loop

;4. 19.5ms〜20.5ms ;時間倍かかってますが…orz
file=strtrim(file,3) ;file=strtrim(file,1)でも可
if peek(file,)='"' : getstr file, file, 1, '"'


素直に1か2の記述のほうが速度が速いようなので、
素直に記述したほうがいいようだ。

/////////////////////////////////////////



スポンサーリンク
posted by シモン at 01:18 | Comment(0) | TrackBack(0) | HSP3
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。