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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0518
Aa実行ファイルへのドラックについて5解決


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



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