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


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
1128
アティエックexecの相対パス指定13未解決


アティエック

リンク

2009/11/28(Sat) 12:30:25|NO.29033

HSPの解説サイトで、「exec」のスクリプトでWindowsのプログラム実行できることを
知って、試しにシンプルなランチャープログラムを作って見ようと思いますが、
「ファイル名の指定」とは、HDD内全体から探されるのですか?
それとも一定のフォルダ内から探されるのでしょうか?

「ファイル名」欄に絶対パス又は、相対パスを入れることはできないのですか?
僕は、どのPCでも使えるように、相対パスを入れたいのですが・・・



この記事に返信する


undefined

リンク

2009/11/28(Sat) 14:55:06|NO.29038

「ファイル名」とは、実行したいプログラムの名前ですか?
それとも実行したいプログラムで開くファイルの名前ですか?

前者の場合、メモ帳やペイントなどアクセサリに入っているようなプログラムなら
パスが通っているので

exec "notepad.exe"//メモ帳
exec "mspaint.exe"//ペイント exec "calc.exe"//電卓
というようにできます。

後者の場合、そのユーザーのドキュメントフォルダから探されるようです。
C:\Users\%username%\Documents




アティエック

リンク

2009/11/28(Sat) 15:36:46|NO.29040

返信ありがとうございます。
とても分かりやすい説明でした。

ですが、パスが通っているとはどういうことでしょうか?

それと、相対パスを入れることは可能でしょうか?



inovia

リンク

2009/11/28(Sat) 19:11:13|NO.29044

> そのユーザーのドキュメントフォルダから探されるようです。

とありますが、正確にはカレントディレクトリから探されます。
カレントディレクトリは動きますので、常にドキュメントフォルダとは限りません。
実行ファイルにしたときは、カレントは実行ファイルのあるディレクトリになります。

現在のカレントディレクトリを調べるには dir_cur マクロを使用します。

ファイル名のときのみで exec を使ったときのファイルの検索順序は
1. カレントディレクトリ
2. パスが通ったディレクトリ

となります。


パスを通すについては以下のサイトが激しく参考になります。
http://pocketstudio.jp/win/xp/path.html

PCによってパスは違います。
私のPCの場合は以下のようになりました。

D:\Program Files\Microsoft DirectX SDK (June 2006)\Utilities\Bin\x86
D:\Perl\site\bin
D:\Perl\bin
%SystemRoot%\system32
%SystemRoot%
%SystemRoot%\System32\Wbem
D:\Program Files\QuickTime\QTSystem\
D:\Program Files\Microsoft Network Monitor 3\



inovia

リンク

2009/11/28(Sat) 19:20:00|NO.29046

相対パスも使えます。

chdir dir_exe ;HSP のフォルダに移動 (コンパイル+実行時のみ有効) mes dir_cur exec "sample\\hspcv\\bgsamp.jpg",16 chdir dir_exe+"\\sample\\hspcv\\" mes dir_cur exec "..\\demo\\jp6girl.bmp",16



荒河軒持

リンク

2009/11/28(Sat) 19:22:39|NO.29047

>>20922
>>20938
ワンキーヘルプをよく読み分からない単語はインターネット検索で調べましょう。
HSP3.2の標準ヘルプブラウザには調べた命令が使われているサンプルスクリプトを表示する機能があるので活用しましょう。



アティエック

リンク

2009/11/28(Sat) 19:47:30|NO.29048

inovia 様

それはexecの前に
;HSP のフォルダに移動

mes dir_cur
を入れればいいということですか?
あと相対パスって、"/"で区切るんじゃなくて"\\"で区切るんですか?



inovia

リンク

2009/11/28(Sat) 20:00:57|NO.29049

> あと相対パスって、"/"で区切るんじゃなくて"\\"で区切るんですか?
どちらでもOKです。
HSPの仕様というよりかは、Windowsの仕様です。
どちらでも問題なく動きます。
exec "C:\\test\\test.exe"
exec "C:/test/test.exe"



inovia

リンク

2009/11/28(Sat) 20:07:01|NO.29050


chdir dir_exe
は コンパイル+実行時 のときは HSPのインストールフォルダになり、
実行ファイルにしたときは 実行ファイルのディレクトリになります。

先ほども書きましたが、カレントディレクトリは
dialog 16などの命令を使うとパスが動きますので
exec の前に使っておくと安全です。

やっていることは以下のものと一緒ですが。

exec dir_exe+"\\sample\\hspcv\\bgsamp.jpg",16


mes dir_cur
これは現在のカレントディレクトリを表示しているだけですので、
消しても問題ありません。



アティエック

リンク

2009/11/28(Sat) 23:03:42|NO.29057

ちょっと応用して相対パス入れようと思ったのですが、内部エラーとか出てきました。

chdir dir_exe
をパスの前に入れればいいんですよね?



残酷な淳のテーゼ

リンク

2009/12/7(Mon) 16:26:05|NO.29183

chdir dir_exe
は、コンパイル・実行したときは、HSPがあるフォルダにカレントフォルダを移動します。
実行ファイルにしたときは、実行ファイルの場所になります。



アティック

リンク

2009/12/16(Wed) 11:37:48|NO.29292

残酷な淳のテーゼ 様

例えば、
chdir dir_exe
って入力したとして、実行ファイルを作成したとします。
その後で作成した実行ファイルを移動させたら、カレントディレクトリも変わるので しょうか? inovia 様
chdir dir_exe+""
と打つと、カレントフォルダというものを追加できるん ですよね?そのときって絶対パスで打たないといけなんですか?ご回答いただいたものを
見ると相対パスのように思えるのですが・・・



ANTARES

リンク

2009/12/17(Thu) 00:37:31|NO.29307

>chdir dir_exe
>って入力したとして、実行ファイルを作成したとします。
>その後で作成した実行ファイルを移動させたら、
>カレントディレクトリも変わるのでしょうか?
 実行ファイルの場合、dir_cur(=カレントディレクトリ)の初期値とdir_exeは同じです。
したがって、答はchdirしても変わりますが、しなくても変わります。

>chdir dir_exe+""
>
>と打つと、カレントフォルダというものを追加できるんですよね?
>そのときって絶対パスで打た>ないといけなんですか?
>ご回答いただいたものを
>見ると相対パスのように思えるのですが・・・
 「カレントフォルダというものを追加できる」とはどういう意味なのか
わかりませんが、何か誤解している匂いがします。
カレントディレクトリは常に存在するものであり、
後から追加したり削除したりできるようなものではありません。


chdir dir_exe exec "hogehoge.exe"
と書いた場合、chdirには絶対パスを使っています。
execには相対パスを使っています。


exec dir_exe+"\\sample\\hspcv\\bgsamp.jpg",16
と書いた場合、chdirは使わず、execに絶対パスを使っています。

dir_exeの中身は、例えば
C:\Program Files\hsp
です。
したがって、
exec dir_exe+"\\sample\\hspcv\\bgsamp.jpg",16
は、この例の場合
exec "C:\\Program Files\\hsp\\sample\\hspcv\\bgsamp.jpg",16
と書いたのと同じことになります。


 しかし、ランチャーを作りたいということなので、
やや論点が的はずれになっていると思います。

 例えば、メモ帳を起動する場合は
exec "notepad.exe"
で起動できますが、
例えばエクセルを起動する場合、
exec "excel.exe"

exec dir_exe+"\\excel.exe"
では起動できません。

私の環境の場合、
exec "C:\\Program Files\\Microsoft Office\\OFFICE11\\EXCEL.EXE"
と書く必要がありますが、もちろん、ランチャーにこう書くわけにはいきません。

 最も安直な解決法は、dialog ,16で起動したいプログラムが
どこにあるかユーザーに指定してもらうことです。
この場合、相対パスを使うことは寧ろ問題を難しくするだけで、
絶対パスを使う方が簡単です。



ANTARES

リンク

2009/12/17(Thu) 00:59:30|NO.29311

 2番目の質問の答を書くのを忘れました。
chdirにしろ、execにしろ、他の命令にしろ、
常に絶対パスも相対パスも使えます。

 ただ、絶対パスはパス自体が正しければ必ず正しく動くのに対して、
相対パスはパス自体が正しくてもカレントディレクトリが
想定と違っていたりして正しく動かない場合があります。
相対パスを使う前に必ずchdirを実行すれば防げますが、
それなら絶対パスを使う方が話が早いということになります。



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