実行ファイルへのドラックについて
Aa 2013/5/18(Sat) 20:02:07|NO.54121
実行ファイルを作成し、ほかのファイルを実行ファイルへドラックしてみたのですが、うまくいきません。
/*
--やりかた--
このソースをコンパイルし、作成された実行ファイルに他のファイルをドラックしてください。
*/
log=dir_cmdline;ログを取得
n=strlen(log);文字の長さを計測
sdim log2,n;結果取得用変数作成
indx=0
repeat
getstr ftt,log,indx,$20;スペースコードを区切りとして読み込む
log2+ftt+"\n";別の変数に書き込み、改行させる
indx+strsize;インデックスを処理
if strsize=0:break;これ以上無い場合は抜ける
loop
mes log2;結果を表示
;bsave "w.txt",log2;結果保存
dir_cmdlineで複数のファイルを取得し、ファイル名の区切りは$20[スペース]と帰ってきます。
しかし、ファイル名にスペースがあると、区切りコードと重複してしまいます。
どうすればうまく取得できるでしょうか?
test 2013/5/18(Sat) 20:33:30|NO.54123
試しにdir_cmdlineを表示するようにして、ファイル名にスペースを含むファイルをドラッグして試してみましょう。自然と解決策が見えてきます。
GrapeColor(DION) 2013/5/18(Sat) 23:52:34|NO.54130
Win32APIでコマンドラインを分解してくれる便利な関数があったよな(´Д`)
ちょっとサンプル探してきます。
無駄にレス数消費して申し訳無いです。
GrapeColor(DION) 2013/5/19(Sun) 00:07:44|NO.54133
先程のレスの続きです。
以前私が音楽プレイヤーを作っていた際に一緒に作ったコマンドラインを取得するモジュールです。
https://www.sugarsync.com/pf/D341570_79_36962581
上のリンクからモジュールファイル(asファイル)をダウンロードして、commonフォルダに入れて使ってください。
コマンド&ファイルパスの取得は以下のように行えます。
#include "GetCmdline.as"
mes GetCmdline()
以上のプログラムを実行させるとコマンド&ファイルパスの一覧が表示されます。
GetCmdline命令は関数型でパラメーターはありません。※括弧は必須です。
コマンドやファイルパスが複数ある場合、改行(\n)された状態で返されます。
ちなみにファイルパスの途中にスペースがある場合はパスの両端に"が付きます(念のため)
モジュールについて疑問点があればまた聞いてください。
Aa 2013/5/19(Sun) 13:15:22|NO.54148
ありがとうございます!
GrapeColor(DION)さんのモジュールをお借りしてみた結果、うまく取得することができました!
dir_cmdline以外の取得方法では考えていませんでした。
ご回答して下さった皆様に、ありがとうございました。
GrapeColor(DION) 2013/5/21(Tue) 00:18:55|NO.54180
解決したスレを上げてしまって申し訳無いのですが、よくよく考えてみたら、後にこのスレを誰かが見つけた時にモジュールのリンクを貼るだけでは不親切だと感じたので、モジュールの中身を貼らせていただきます。
#module "getcmd"
#uselib "kernel32"
#func GetCommandLineW "GetCommandLineW"
#func GetModuleFileName "GetModuleFileNameA" int, int, int
#func LocalFree "LocalFree" sptr
#uselib "shell32"
#func CommandLineToArgvW "CommandLineToArgvW" wptr, wptr
#defcfunc GetCmdline
sdim Result, 1024
sdim MyPath, 256
GetModuleFileName , varptr(MyPath), 256
GetCommandLineW
lpCmdLineW = stat
CommandLineToArgvW lpCmdLineW, varptr(NumArgs)
if stat {
pCmdList = stat
} else {
return -1
}
repeat NumArgs
dupptr p, pCmdList + cnt * 4, 4, vartype("int")
dupptr temp_CmdLineW, p, 256, vartype("str")
CmdLinesA(cnt) = cnvwtos(temp_CmdLineW)
if CmdLinesA(cnt) ! MyPath and CmdLinesA(cnt) ! "obj" {
Result += CmdLinesA(cnt) + "\n"
}
loop
LocalFree pCmdList
Result = strmid(Result, 0, strlen(Result) - 2)
return Result
#global