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


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0422
SquidSkypipeexecで、16bit以外でも実行できないアプリが存在する?3未解決


SquidSky

リンク

2017/4/22(Sat) 18:23:19|NO.79205

とある複数人で書いているブログで、記事の中で7zipアーカイブを解凍する作業が必要な
場面があるのですが、どうやらコメントする人がほとんど小学生のようで、やり方が分からない
というコメントが多く殺到しているため、自分で作ってなんとかできないかと思って
hspextにあるpipeexecを活用して、7z.exeを遠隔操作して自動で解凍してやろうかと思ったのですが

pipeexec res,"7z.exe"
でのstatの値が0以上で、なぜかエラーになります。
しっかりソースフォルダには7z.exeを配置しているにも関わらず、エラーになるのです。
res変数を参照しても中身は空でした。

どうしてなんでしょうか?16ビットアプリケーションではないんですけど・・・。



この記事に返信する


リンク

2017/4/22(Sat) 19:04:21|NO.79206

 こんにちは。

 ちょっとやりたいことをうまく理解できてないかもしれないんですが、これで解凍できませんかね。

----------


#uselib "hspext.dll" #func pipeexec pipeexec 5 #func pipeput pipeput 0 #func pipeget pipeget $83 exist "7z.exe" if (strsize <= 0){ dialog "「7z.exe」が存在しません。", 1, "エラー" end }else{ exist "test.7z" if (strsize <= 0){ dialog "解凍するアーカイブが存在しません。", 1, "エラー end }else{ filename = "./7z.exe x \"" + dirinfo(0) + "\\test.7z\" -o\"" + dirinfo(0) + "\\test\\\" -y" sdim ln,4096 sdim buf,32000 pipeexec buf, filename, 1 if stat : dialog "実行できませんでした", 1, "エラー" : end repeat pipeget ln if stat=0 : break await 5 loop dialog "解凍が完了しました。", 0, "完了" end } }

----------

 以上、参考になれば幸いです。



SquidSky

リンク

2017/4/22(Sat) 19:12:27|NO.79207

やはり「実行できませんでした」で止まりますねぇ・・・。



inovia

リンク

2017/4/22(Sat) 21:17:55|NO.79214

自分の手元の環境では動作してますね。
とりあえず、陸さんのソースにpipeexecの詳細エラーを取得するように修正してみた。


#include "hspext.as" #module #uselib "kernel32" #func FormatMessage "FormatMessageA" int, int, int, int, var, int, int #cfunc GetLastError "GetLastError" #defcfunc GetAPIError local strErr, local errCode sdim strErr, 261 : errCode = GetLastError() FormatMessage 0x1200, 0, errCode, 0, strErr, 260, 0 return strf("0x%08x : %s", errCode, strErr) #global exist "7z.exe" if (strsize <= 0){ dialog "「7z.exe」が存在しません。", 1, "エラー" end }else{ exist "test.7z" if (strsize <= 0){ dialog "解凍するアーカイブが存在しません。", 1, "エラー end }else{ filename = "./7z.exe x \"" + dirinfo(0) + "\\test.7z\" -o\"" + dirinfo(0) + "\\test\\\" -y" sdim ln,4096 sdim buf,32000 pipeexec buf, filename, 1 if stat { dialog "実行できませんでした\r\n" + GetAPIError(), 1, "エラー" : end } repeat pipeget ln if stat=0 : break await 5 loop dialog "解凍が完了しました。", 0, "完了" end } }

---------------------------
エラー
---------------------------
実行できませんでした
0x00000002 : 指定されたファイルが見つかりません。
---------------------------
OK
---------------------------

みたいな感じで何か返ってくるはず (´・ω・`)



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