HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0921
CEO関連付けでエラー15解決


CEO

リンク

2009/9/21(Mon) 02:50:51|NO.27841

質問です。
画像ビューアを作成したのですが、関連付けを設定しても画像ファイルをダブルクリックして開くと、
ダブルクォーテーションが付加されていて読み込みエラーになってしまいます。
プログラムへ直接画像ファイルをD&Dして起動すると、ダブルクォーテーションが抜かれており、きちんと表示されます。
どのように改善したらよいでしょうか?

file=dir_cmdline if peek(file, ) = '"' : getstr file, file, 1, '"' if file!"":goto*get_data dialog "jpg",16 file=refstr *get_data dialog file;ファイルパス確認 picload file stop



この記事に返信する


774

リンク

2009/9/21(Mon) 07:53:03|NO.27844

hsp dir_cmdline ダブルクォーテーション
でgoogle で検索すると、すぐに方法がみつかると思います。



CEO

リンク

2009/9/21(Mon) 10:04:18|NO.27847

検索して試してみましたところ、
関連付けのアクションを実行するアプリケーションで、
"C:\Program Files\hsp\TEST.exe" "%1"
を、
"C:\Program Files\hsp\TEST.exe" %1
にすると、ダブルクォーテーションは外れました。が、
今度は存在するはずのファイルが読み込めず、
またしてもエラーになってしまいます。



SYAM

リンク

2009/9/21(Mon) 11:31:35|NO.27848

渡されてきた文字列が半角 ”で始まっていたら、
strmid か何かで 2バイト目から元の文字数 -2 を取り出せば
ダブルクォーテーションが外れて使えるようになる かなー…

以前自分で使うツールではそーしてました。



シモン

リンク

2009/9/21(Mon) 16:54:49|NO.27853

今となっては特殊な環境なので参考にならないかもしれませんが、
Windows2000 SP4 HSP3.1
Windows2000 SP4 HSP3.2
どちらの環境でも
上記コードで実行ファイル化して関連付けをして起動すると

ソフト起動 > ファイル読み込み
ダブルクリック
D&D

全ての動作で全く問題なく期待通りに素直に開けます。

XPやVistaだとだめなのかな?



CEO

リンク

2009/9/21(Mon) 18:24:23|NO.27857

うーん、何度やっても読み込めないです。
プログラム側に問題がないとすれば、
関連付けの設定が悪いんでしょうか?
ちなみにOSはWinXP SP3です。



シモン

リンク

2009/9/21(Mon) 20:27:53|NO.27870

XP Pro SP3で試してみました。
[HSP拡張マクロを使用する]を有効で、
CEOさんと同様にダブルクリックで失敗しました。

http://hsp.tv/play/pforum.php?mode=pastwch&num=11662
http://hsp.tv/play/pforum.php?mode=pastwch&num=20222

上で、お歴々のかたがたが答えられているので処理については問題ないと思いますが、
私の場合だとほかの部分でも使っているので

http://scripttpircs.seesaa.net/article/112296780.html

のReplace使って処理してしまいそうな気がします。



ANTARES

リンク

2009/9/21(Mon) 23:40:18|NO.27873

 先頭に半角スペースが入るようです。



シモン

リンク

2009/9/22(Tue) 00:45:47|NO.27874

>ANTARESさん

検証能力が足りなくてすいません orz
ヒントありがとうございます。

>CEOさん


file=dir_cmdline repeat 2 if peek(file,cnt)='"' : getstr file, file, cnt+1, '"' loop if file!"":goto*get_data dialog "jpg",16 file=refstr *get_data ;dialog file;ファイルパス確認 bsave dirinfo(0)+"\\file.txt",file,strlen(file) picload file stop

一応説明しておくと、
Windows2000 SP4 では最初のコードで問題ありませんでした。
WindowsXP Pro SP3では、

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

なので、条件わけに
何もしなくて良いもの
ダブルクォーテーション分1ビットずらしたものと
スペースとダブルクォーテーション分2ビットずらしたもの
3種類必要なようです。
上のはリピート使ってまっすが、実行速度などで問題があればその辺は適当に

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


というか、この問題、Kpanさんのとこ経由して結構引っかかるかもしれませんね。



CEO

リンク

2009/9/22(Tue) 00:50:43|NO.27875

ANTARESさんの回答を元に、
左端の半角スペースを削除することで表示することができました!
回答してくださった皆さん、本当にありがとうございました。

file=dir_cmdline if peek(file, ) = '"' : getstr file, file, 1, '"' if file!"":goto*get_data dialog "jpg",16 file=refstr *get_data file=strtrim(file,1) picload file stop



CEO

リンク

2009/9/22(Tue) 01:11:02|NO.27876

すいません、付け足しとして・・・
関連付けのアクションを実行するアプリケーションが
"C:\Program Files\hsp\TEST.exe" %1
だと、左端のスペースを削除することできちんと読み込めるようですが、
"C:\Program Files\hsp\TEST.exe" "%1"
にすると、左端のスペースを削除しても読み込むことができません。

先ほどシモンさんが載せてくださったスクリプトは、
"C:\Program Files\hsp\TEST.exe" "%1"
にすると読み込めるようです。

・・・なんかややこしいですね



シモン

リンク

2009/9/22(Tue) 02:00:45|NO.27877

以下の場所にstrtrim入れたらどうでしょう?
最初に両側のスペース外しておけば、条件分けが一箇所ですむので、
%1、"%1"のどちらの場合でも対応できるのではないでしょうか?

HSP3.2なら形的にこの方が綺麗ですね。

HSP3.2用

file=dir_cmdline file=strtrim(file,3) ;file=strtrim(file,1)でも可 if peek(file, ) = '"' : getstr file, file, 1, '"' if file!"":goto*get_data dialog "jpg",16 file=refstr *get_data bsave dirinfo(0)+"\\file.txt",file,strlen(file) picload file stop


私はまだHSP3.1を中心に使用しているので、
strtrimは3.2から対応ですから使えないんです。

HSP3.1用

file=dir_cmdline repeat 2 if peek(file,cnt)='"' : getstr file, file, cnt+1, '"' loop if file!"":goto*get_data dialog "jpg",16 file=refstr *get_data ;dialog file;ファイルパス確認 bsave dirinfo(0)+"\\file.txt",file,strlen(file) picload file stop



シモン

リンク

2009/9/22(Tue) 15:26:22|NO.27881

解決している件をしつこく追いまわして申し訳ないのですが、追記です。

リピートで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の記述のほうが速度が速いようなので、
素直に記述したほうがいいようです。

Windows2000+SP4、WindowsXPPro+SP3で確認済みの
HSP3.1以降3.2にも適用できる方法として


file=dir_cmdline if peek(file,)='"' : getstr file, file, 1, '"' if peek(file,)=' ' : getstr file, file, 2, '"' ;以下の二つもやっていることはほぼ一緒です。 ;if peek(file,0)='"' : getstr file, file, 1, '"' ;if peek(file,1)='"' : getstr file, file, 2, '"' if file!"":goto*get_data dialog "jpg",16 file=refstr *get_data ;dialog file;ファイルパス確認 bsave dirinfo(0)+"\\file.txt",file,strlen(file) picload file stop

をお勧めします。

Vistaとか7とかはどうなんでしょうね?



CEO

リンク

2009/9/22(Tue) 20:04:46|NO.27892

シモンさん、検証ありがとうございました。
VistaのPCがあるので、時間を見つけて調べてみたいと思います。



CEO

リンク

2009/9/24(Thu) 11:03:04|NO.27944

WindowsVistaBusinessで確認しました。
どうやら、先頭に半角スペースが入らないようです。
ダブルクォーテーションを抜くだけで表示できました。

file=dir_cmdline if file!"":goto*get_data end *get_data if peek(file,)='"' : getstr file, file, 1, '"' notesel file notesave "data.txt" picload file stop
data.txtに書きこまれたデータ
C:\Users\CEO\Desktop\TESTPIC\001.jpg



シモン

リンク

2009/9/24(Thu) 22:47:07|NO.27965

>ダブルクォーテーションを抜くだけで表示できました。

検証確認、お疲れ様です。

すると、WindowsXPのみ、
もしくは、WindowsXPのサービスパックを当てていることにより
バグが発生しているのかもしれませんね。



ONION software Copyright 1997-2023(c) All rights reserved.