openfile /h のファイルハンドルNo.03205
げっちゅー さん 02/06/26 12:25
 
げっちゅーです。以下のことで困っています。

// マクロの一部
$temp="temp.vbs";
#p=hidemaruhandle(0);
openfile "/h "+$temp;
#a=hidemaruhandle(0);

#aにはステルスで開いた$tempのファイルハンドルが入るはずです。
メニューの「マクロ」−「マクロ実行」から行うとうまくいくのですが、キー割り当
てをして(ctrl+4)実行すると失敗(#a=-1)します。
何が原因なのでしょうか。教えてください。


[ ]
RE:03205 openfile /h のファイルハンドルNo.03206
ひろ さん 02/06/26 12:53
 
 げっちゅーさん今日は、ひろです。
> #aにはステルスで開いた$tempのファイルハンドルが入るはずです。
> メニューの「マクロ」−「マクロ実行」から行うとうまくいくのですが、キー割り当
> てをして(ctrl+4)実行すると失敗(#a=-1)します。
 再現しません。私の環境は、Windows98+秀丸 Ver.3.17 Float-Macro です
が、そちらの環境は?
 ##ひょっとして、瞬間移動などの動作環境によって変わるのかな?

[ ]
RE:03206 openfile /h のファイルハンドルNo.03207
げっちゅー さん 02/06/26 16:06
 
げっちゅ−です。
> 再現しません。私の環境は、Windows98+秀丸 Ver.3.17 Float-Macro です
>が、そちらの環境は?
> ##ひょっとして、瞬間移動などの動作環境によって変わるのかな?
こちらの環境はWindows2000Pro+秀丸 Ver.3.17です。
問題のマクロは以下のようなものです。
load = abc.exe
のような行をもつテキストファイルからマクロを実行するとそのテキストファイルを
第1引数にしてabc.exeを起動させようとしています。abc.exeは実行時間が長いため、
マクロから直接起動しないでWSHをかませています。

gofiletop;
searchdown "^[\t ]*[lL][oO][aA][dD][\t ]*=[\t ]*",regular;
if(result) {
$file=filename2;
$temp="temp.vbs";
searchdown "=";
searchdown "[^\t ]",regular;
$load="\"\"\""+gettext(x,y,linelen,y)+"\"\" \"\""+$file+"\"\"\"";
#p=hidemaruhandle(0);
openfile "/h "+$temp;
#a=hidemaruhandle(0);
insert "Dim WS,iRtn\n";
insert "Set WS=WScript.CreateObject(\"WScript.Shell\")\n";
insert "iRtn=WS.Run("+$load+",0,False)\n";
insert "WScript.Quit\n";
save;
setactivehidemaru #p;
closehidemaru #a;
runsync2 "wscript.exe "+$temp;
run "cmd.exe /c del "+$temp+">nul";
} else {
message "実行モジュールを指定していません。\nマクロを終了します。";
}
endmacro;

[ ]
RE:03207 openfile /h のファイルハンドルNo.03208
ひろ さん 02/06/26 17:50
 
 げっちゅーさん今日は、ひろです。
> こちらの環境はWindows2000Pro+秀丸 Ver.3.17です。
 環境を聞く前に確認すべきだったのですが、openfile, setactivehidemaru,
closehidemaru は、間違いなく成功するのでしょうか? その確認をしてから残
りの処理をしないと、意味がありません。

[ ]
RE:03207 openfile /h のファイルハンドルNo.03209
ENCODINGSHIFTJIS さん 02/06/26 18:26
 
>ファイルを第1引数にしてabc.exeを起動させようとしています。abc.exe
> は実行時間が長いため、マクロから直接起動しないでWSHをかませて

ヘルプの説明では、
 run文はプログラムを起動したあとで,すぐにマクロの実行を続行します。
ですが ??  直接 run $load; で良いのでは、
見え方の調整なら、他にもあると思います

WSHスクリプト発生、起動、消去 はともかく
処理対象データのテキスト の save 確認/確定が
必要では。

[ ]
RE:03209 openfile /h のファイルハンドルNo.03210
ENCODINGSHIFTJIS さん 02/06/26 18:48
 
すぐできる解決策は
temp.vbs を 消去せずに使いまわすことです。

openfile "temp.vbs";     // 見た目より、確実な動作を
selectall; // 次の insert で 前VBSは消える
// 以下 スクリプト  を 発生
save;
setactivehidemaru 1;
closehidemaru 1;


[ ]
RE:03208 openfile /h のファイルハンドルNo.03211
げっちゅー さん 02/06/26 23:17
 
> げっちゅーさん今日は、ひろです。
>> こちらの環境はWindows2000Pro+秀丸 Ver.3.17です。
> 環境を聞く前に確認すべきだったのですが、openfile, setactivehidemaru,
>closehidemaru は、間違いなく成功するのでしょうか? その確認をしてから残
>りの処理をしないと、意味がありません。
キー割り当てした場合はopenfileが失敗するようで、そのあとのinsertは$tempでは
なく開いているファイルに行われてしまいます。openfileの後にhidemarucountを見
ると、キー割り当てした場合は2(マクロを実行した秀丸と$temp)になるはずですが、
1が返ってきます。

[ ]
RE:03209 openfile /h のファイルハンドルNo.03212
げっちゅー さん 02/06/26 23:26
 
>ヘルプの説明では、
> run文はプログラムを起動したあとで,すぐにマクロの実行を続行します。
>ですが ??  直接 run $load; で良いのでは、
>見え方の調整なら、他にもあると思います
helpを見る限りおっしゃる通りで、こちらとしてもrun $load; で実行したいのです
が、abc.exe(自作のものです)を起動するとどうもrunsync2と同じ動作になってし
まうので、わざわざWSHをかましているのです。この動作はやはりおかしいのでしょ
うか。

>WSHスクリプト発生、起動、消去 はともかく
>処理対象データのテキスト の save 確認/確定が
>必要では。
そうですね。付け足しておきます。

[ ]
RE:03211 openfile /h のファイルハンドルNo.03213
ひろ さん 02/06/27 12:54
 
 げっちゅーさん今日は、ひろです。
> キー割り当てした場合はopenfileが失敗する
 やはり私の環境では再現しませんし、何故こんなことがおきるか解りませ
ん。私ではお手上げですm(__)m。

[ ]
RE:03212 openfile /h のファイルハンドルNo.03216
encodingshiftjis さん 02/06/27 23:56
 
>のですが、abc.exe(自作のものです)を起動するとどうもrunsync2と同じ
>動作になってしまうので、わざわざWSHをかましているのです。この動作はや
>はりおかしいのでしょうか。

たしかに、リソースが極端に不足しているようにみえますが。
他の大きなソフトでシステムが止まりやすくないですか
常駐ソフト本数が多いとか

[ ]