タスクスケジューラを使ってマクロを実行No.22914
じゅげむ さん 07/04/28 17:53
 
 いつもお世話になっています。
 じゅげむと申します。

 さて、私は、毎日同一時間にあるマクロを実行できるように、ウイン
ドウズの「タスク」を使っています。
 秀丸のパスに、/x ○○.mac をつけたものを登録し、指定した時間になると自動的
にウインドウズにログオンし、実行されるようにしていま
す。

 ところで、もともとログオンしている間にこのタスクが実行された場
合にはまったく問題ないのですが、ログオフした状態から、自動的にロ
グオンして実行した場合、秀丸が完全に終了しないままログオフし、次
回ログオン時には、秀丸の常駐ができないという現象が生じます。(も
ちろん再起動すれば直ります。)

 原因や解決策をご存知の方がおられたらご教示いただければ幸いで
す。

[ ]
RE:22914 タスクスケジューラを使ってマクNo.22927
秀丸担当 さん 07/05/01 11:44
 

> ところで、もともとログオンしている間にこのタスクが実行された場
>合にはまったく問題ないのですが、ログオフした状態から、自動的にロ
>グオンして実行した場合、秀丸が完全に終了しないままログオフし、次
>回ログオン時には、秀丸の常駐ができないという現象が生じます。(も
>ちろん再起動すれば直ります。)

試しにやってみましたが、問題を確認することはできませんでした。
常駐秀丸エディタができないというのは、おそらく秀丸エディタがどこかに既に
起動中であるため、常駐秀丸エディタが新規に起動しないのだと思います。
たぶん、タスクによって実行された秀丸エディタが終了しないまま、ずっとどこ
かで起動しているのだと思います。
こちらで試した限りではそういうふうにはなりませんでしたが、マクロの内容に
よってはなるのか、わかりません。どのようなマクロでしょうか。

[ ]
RE:22927 タスクスケジューラを使ってマクNo.22962
じゅげむ さん 07/05/08 01:54
 
こちらで試した限りではそういうふうにはなりませんでしたが、マクロの内容によっ
てはなるのか、わかりません。どのようなマクロでしょうか。

早々にコメントをいただきながら、レスポンスが遅れてすみません。
タスクで実行しているマクロは、以下のような自作ものです。
稚拙で恥ずかしい限りです。
runsyncで実行しているnikkei.batというバッチファイルでは、gethtmlというソフトを
使って、ネット上のファイル(本件では、nikkei.netのファイル)をダウンロードして
います。
また、send_nikkei.batというバッチファイルでは、sendmailというソフトを使って、作
成したファイルをメール送信しています。
このマクロは、

-----nikkei.bat-------------
ちなみにnikkei.batの中身は
@echo off
cd C:\inet
rd /s /q www.nikkei.co.jp
del gethtml.log
del gethtml.hif
del nikkei2.bat
del news.txt
del news2.txt
gethtml -C 1 -e gethtml.ext http://www.nikkei.co.jp/news/main/
gethtml -C 1 -e gethtml.ext http://www.nikkei.co.jp/news/keizai/
gethtml -C 1 -e gethtml.ext http://www.nikkei.co.jp/news/sangyo/
gethtml -C 1 -e gethtml.ext http://www.nikkei.co.jp/news/kaigai/
gethtml -C 1 -e gethtml.ext http://www.nikkei.co.jp/news/seiji/
gethtml -C 1 -e gethtml.ext http://www.nikkei.co.jp/news/shakai/
gethtml -C 1 -e gethtml.ext http://www.nikkei.co.jp/news/shasetsu/
ren C:\inet\www.nikkei.co.jp\news\shasetsu\*.html index.html
copy C:\inet\www.nikkei.co.jp\news\main\index.html+C:\inet\www.nikkei.co.jp\
news\keizai\index.html+C:\inet\www.nikkei.co.jp\news\sangyo\index.html+C:\in
et\www.nikkei.co.jp\news\kaigai\index.html+C:\inet\www.nikkei.co.jp\news\sei
ji\index.html+C:\inet\www.nikkei.co.jp\news\shakai\index.html+C:\inet\www.ni
kkei.co.jp\news\shasetsu\index.html C:\inet\news.txt
というものです。

-----send_nikkei.bat-------
@echo off
copy C:\Share\*.nik C:\Share\news\nikkei
smail -hsmtp.nifty.com -f"hoge<xxxx@hoge.ne.jp>" -s"07/05/07(月)付NIKKEI.NET
" -FC:\Share\nikkei.txt -aC:\Share\20070507.nik xxxx@hoge.nifty.com

-----news.mac--------------
runsync "c:\\inet\\nikkei.bat";
openfile "C:\\inet\\news.txt";
#news = hidemaruhandle(0);
localgrep "http://rd.nikkei.co.jp/net/news/.+news.+20[0-9][0-9].+html",regular;
replaceallfast "^news.+?headline/u=","",regular;
replaceallfast "\">.+$","",regular;
replaceallfast "^\\f","gethtml -C 1 -e gethtml.ext \\1",regular;
gofiletop;
insert "cd C:\\inet";
insertreturn;
gofileend;
insert "del C:\\inet\\www.nikkei.co.jp\\news\\main\\index.html\n";
insert "del C:\\inet\\www.nikkei.co.jp\\news\\keizai\\index.html\n";
insert "del C:\\inet\\www.nikkei.co.jp\\news\\sangyo\\index.html\n";
insert "del C:\\inet\\www.nikkei.co.jp\\news\\kaigai\\index.html\n";
insert "del C:\\inet\\www.nikkei.co.jp\\news\\seiji\\index.html\n";
insert "del C:\\inet\\www.nikkei.co.jp\\news\\shakai\\index.html\n";
insert "del C:\\inet\\www.nikkei.co.jp\\news\\shasetsu\\index.html\n";
insert "copy C:\\inet\\www.nikkei.co.jp\\news\\main\\*.html C:\\inet\\www.ni
kkei.co.jp\\news\\main\\index.html\n";
insert "copy C:\\inet\\www.nikkei.co.jp\\news\\keizai\\*.html C:\\inet\\www.
nikkei.co.jp\\news\\keizai\\index.html\n";
insert "copy C:\\inet\\www.nikkei.co.jp\\news\\sangyo\\*.html C:\\inet\\www.
nikkei.co.jp\\news\\sangyo\\index.html\n";
insert "copy C:\\inet\\www.nikkei.co.jp\\news\\kaigai\\*.html C:\\inet\\www.
nikkei.co.jp\\news\\kaigai\\index.html\n";
insert "copy C:\\inet\\www.nikkei.co.jp\\news\\seiji\\*.html C:\\inet\\www.n
ikkei.co.jp\\news\\seiji\\index.html\n";
insert "copy C:\\inet\\www.nikkei.co.jp\\news\\shakai\\*.html C:\\inet\\www.
nikkei.co.jp\\news\\shakai\\index.html\n";
insert "copy C:\\inet\\www.nikkei.co.jp\\news\\shasetsu\\*.html C:\\inet\\ww
w.nikkei.co.jp\\news\\shasetsu\\index.html\n";
insert "rem copy C:\\inet\\www.nikkei.co.jp\\news\\main\\index.html+C:\\inet
\\www.nikkei.co.jp\\news\\keizai\\index.html+C:\\inet\\www.nikkei.co.jp\\new
s\\sangyo\\index.html+C:\\inet\\www.nikkei.co.jp\\news\\kaigai\\index.html+
C:\\inet\\www.nikkei.co.jp\\news\\seiji\\index.html+C:\\inet\\www.nikkei.co.
jp\\news\\shakai\\index.html+C:\\inet\\www.nikkei.co.jp\\news\\shasetsu\\ind
ex.html C:\\inet\\news2.txt\n";
insert "copy C:\\inet\\www.nikkei.co.jp\\news\\keizai\\index.html+C:\\inet\\
www.nikkei.co.jp\\news\\sangyo\\index.html+C:\\inet\\www.nikkei.co.jp\\news\
\kaigai\\index.html+C:\\inet\\www.nikkei.co.jp\\news\\seiji\\index.html+C:\\
inet\\www.nikkei.co.jp\\news\\shakai\\index.html+C:\\inet\\www.nikkei.co.jp\
\news\\shasetsu\\index.html C:\\inet\\news2.txt\n";
saveas "c:\\inet\\nikkei2.bat";
#2bat = hidemaruhandle(0);
closehidemaru #news;
runsync "c:\\inet\\nikkei2.bat";
openfile "C:\\inet\\news2.txt";
#handle1 = hidemaruhandle(0);

closehidemaru #2bat;

openfile "/h";
#handle2 = hidemaruhandle(0);

setactivehidemaru #handle1;

gofiletop;
while(1){
 searchdown "<title>",noregular;
 if(result == true){
  beginsel;
  searchdown "</title>",noregular;
  right 8;
  copy;
  setactivehidemaru #handle2;
  paste;
  insertreturn;
  insertreturn;
  setactivehidemaru #handle1;
  searchdown "<!--FJZONE START NAME=\"MIDASHI\" -->",noregular;
  beginsel;
  searchdown "<!--FJZONE END NAME=\"HONBUN\" -->",noregular;
  copy;
  setactivehidemaru #handle2;
  paste;
  insertreturn;
  insertreturn;
  setactivehidemaru #handle1;
 }
 else
  break;
}
setactivehidemaru #handle2;
replaceallfast "<title>","■□■",noregular;
replaceallfast "</title>","■□■",noregular;
replaceallfast "<!--FJZONE START NAME=\"MIDASHI\" -->","■",noregular;
replaceallfast "<p>","\n\n",regular;
replaceallfast "<br>","\n",regular;
replaceallfast "<.+?>","",regular;
replaceallfast " +","",regular;
gofiletop;
while(1){
 searchdown2 "■□■";
 if(result == true){
  beginsel;
  golineend;
  $title = gettext(seltopx,seltopy,selendx,selendy);
  escape;
  while(1){
   searchdown $title;
    if(result == true)
     deleteline;
    else
     break;
  }
 }
 else
  break;
}
while(1){
 replaceallfast "\n\n\n","\n\n",regular;
 if( !result ){
  break;
 }
}

gofiletop;
insert "NIKKEI NET "+ date;
insertreturn;
insertreturn;

closehidemaru #handle1;

//保存した日をファイル名として保存(ファイル名がある場合には、上書き保存)
if( filename == "" ){
 $str = "C:\\Share\\" + year + month + day + ".nik";
 saveas $str;
}
else
 save;

//コピー&メール送信用batファイルを修正する。
openfile "C:\\Share\\send_nikkei.bat";
#handle3 = hidemaruhandle(0);
closehidemaru #handle2;

movetolineno 1,3;
selectline;
delete;
insertreturn;
up;
insert "smail -hsmtp.nifty.com -f\"hoge<xxxx@hoge.ne.jp>\" -s\""+ date + "付
NIKKEI.NET\" -FC:\\Share\\nikkei.txt -aC:\\Share\\" + year + month + day + ".
nik" + " xxxx@hoge.ne.jp

save;

//NIKKEI.NETメールを送信するバッチファイルを実行

run "C:\\Share\\send_nikkei.bat";

exit;

[ ]
RE:22962 タスクスケジューラを使ってマクNo.22963
秀丸担当 さん 07/05/08 18:32
 

>タスクで実行しているマクロは、以下のような自作ものです。

マクロをありがとうございます。
見たところ非常に複雑で、同じことをこちらで再現するのは一苦労になりそうで
す。
1つ思ったことは、最後のrun文をrucsyncにしたら変化があるかもしれないとは
思いましたが、関係ないかもしれません。

ところでタスクが終了するタイミングというのは、Windowsはどのように判断し
ているかご存知でしょうか。…と聞いてもわからないかもしれないですが。
タスクで起動した「hidemaru.exe /x...」からは、常駐秀丸エディタも起動する
と思います。
これは終了するタイミングは無いです。
Windowsから見たら、openfile "..."; で起動した秀丸エディタも、自動的に常
駐する秀丸エディタも同じ hidemaru.exe が起動していて区別は無いはずです。

ですがこちらでは問題が起きないということは終了するタイミングがどこかにあ
るはずで、CPU使用率やプロセスのアイドル状態を適当に判断してタスクが終了
しているのか気になります。
問題が再現するような簡単なマクロでもあると非常に助かるのですが。

[ ]
RE:22963 タスクスケジューラを使ってマクNo.22966
じゅげむ さん 07/05/09 21:27
 
 ありがとうございます。
 runをrunsyncにしてみましたが、結果は同じでした。
 かなりごちゃごちゃなマクロになってしまっていますので、もっと簡
単なマクロで、少しずつ試してみます。
 今後ともよろしくお願い致します。

じゅげむ

[ ]
RE:22966 タスクスケジューラを使ってマクNo.22969
秀丸担当 さん 07/05/09 22:49
 
また試してみたところ、再現させることができました。
再現するときとしないときの違いがよくわからないのですが、どうも常駐秀丸エディ
タのプロセスが残っていて、タスクが終了しないままになっているようです。
起動オプションで常駐秀丸エディタを起動しないようにするのが必要かもしれません。
とりあえずマクロ最後のexit;の前に以下のような感じで常駐秀丸エディタを無理矢
理終わらせるようにすると回避することができるのではないかと思います。

#hResident = findwindow("秀丸エディタ","Hidemaru32Class");
if( #hResident ) {
    #a = sendmessage( #hResident,
        0x0112, //WM_SYSCOMMAND
        0xF060, //SC_CLOSE
        0 );
}
exit;

[ ]
RE:22969 タスクスケジューラを使ってマクNo.22970
じゅげむ さん 07/05/10 08:38
 
 いつも迅速なご対応をありがとうございます。
 教えていただいたとおりのスクリプトを書き足すことで解決できまし
た。
 ただ、こうしてしまうと、普通にログオンしているときにも、マクロ
終了後に常駐が解除されてしまいますので、起動オプションで常駐秀丸
エディタを起動させないようにしていただけるとなお助かります。
(当面の対処法として、普通にウインドウズにログオンする際にはスタ
ートアップでなんらかのファイルを作成し、ログオフ時に削除するよう
にしておき、そのファイルの存否を判定することでタスクでログオンし
たかどうか判定するようにしようかと考えています。タスクで自動ログ
オンした場合にもスタートアップが実行されてしまうのであれば使えま
せんが。)

じゅげむ

[ ]
RE:22970 タスクスケジューラを使ってマクNo.22973
秀丸担当 さん 07/05/10 15:52
 

> ただ、こうしてしまうと、普通にログオンしているときにも、マクロ
>終了後に常駐が解除されてしまいますので、起動オプションで常駐秀丸
>エディタを起動させないようにしていただけるとなお助かります。

V7.00βのほうで、そういうオプションを追加しておこうと思います。

[ ]
RE:22973 タスクスケジューラを使ってマクNo.22991
じゅげむ さん 07/05/13 20:21
 
>V7.00βのほうで、そういうオプションを追加しておこうと思います。

/zオプションですね。
さっそくのご対応ありがとうございました。

じゅげむ


[ ]