DisableDraw が効かない?No.01223
Iranoan さん 08/02/25 23:47
 
 秀まるおさん今日は、Iranoan です。
 まだ確りと調べていませんが、Delete() 関数を使うと、DisableDraw() を
使うと本文が書き換えられるような気がするのですが、この予想があっている
としてもこれは仕様でしょうか? 末尾のマクロが、今調べているマクロです。
 こちらの環境は、WindowsXP+IE6.0+秀丸メール Ver. 5.00beta32 です。
------------------------------------------------------------
Delete "tkinfo.dll";
if( !dllfunc( "IsHidemaruMailMain" ) )goto End;
call ChangeConf;
if( !dllfunc( "SelectFolder", "", "ゴミ箱" ) )call Error "ゴミ箱に移動";
while( 1 ){
  if( !dllfunc( "SetFindPack","(\"spam\", target=\"X-TuruKame-Filter:
  \", casesense, word ), flag=unread, inmail=0" ) )call Error "検索を
  設定";
  if( !dllfunc( "FindDown" ) )break;
  call CheckDuplication;
  if( ##return ){
    #tmp = dllfunc( "Delete", 2 );
    #tmp = dllfunc( "PrevMail" );
  }
}

Ending:
  #tmp = dllfunc( "SetFindPack", $s );
  #tmp = dllfunc( "SwitchHeaderView", #head );
  #tmp = dllfunc( "SetThreadView", #view );
  #tmp = dllfunc( "SelectFolder", "", $folder );
  setsearch $s2, #s2;
  setreplace $r2;
  openreg "CURRENTUSER","Software\\Hidemaruo\\TuruKame\\Config";
  writeregnum "UnreadSwitch", #UnreadSwitch;
  writeregnum "ActivateUnreadSwitch", #ActivateUnreadSwitch;
  writeregnum "AllViewUnreadSwitch", #AllViewUnreadSwitch;
  #tmp = dllfunc( "EnvChanged" );
  closereg;
  #tmp = dllfunc( "EnableDraw" );
End:
  freedll;
  endmacro;

Error:
  message $$1 + "できませんでした";
  goto Ending;

CheckDuplication:
  ##id = dllfunc( "MailIndex" );
  call MakeFile;
  call GetSearchStr;
  if( $$return == "" ){
    if( dllfunc( "GetMailFlag", "html" ) )return true;
    return false;
  }
  $$search_str = dllfuncstr( "YenEncode", $$return );
  run "md5sum \"" + "duplicate_spam.tmp" + "\" > " + "\"" +
   "duplicate_spam.md5" + "\"";
  #tmp = dllfunc( "CancelEditMail" );
  while( 1 ){
    if( !dllfunc( "SetFindPack","(\"" + $$search_str + "\",  target
    =body ), inmail=0" ) )call Error "検索を設定";
    ##result = dllfunc( "FindUp" );
    if( !##result )break;
    call MakeFile;
    ##x = x;
    ##y = y;
    beginsel;
    run "md5sum -c \"" + "duplicate_spam.md5" + "\" > con";
    moveto ##x, ##y;
    searchdown "OK\n", regular, word;
    ##result = result;
    if( ##result )break;
    #tmp = dllfunc( "CancelEditMail" );
  }
  #tmp = dllfunc( "SetMailIndex", ##id );
  return ##result;

MakeFile:
  if( !dllfunc( "BeginEditMail" ) )call Error "編集可能に";
  if( readonly)readonlyswitch;
  if( browsemode )browsemodeswitch;
  gofiletop;
  replacedown "((\\[a:)?https?://[a-z0-9_\\./%&\\-\\+=\\?]+(\\])?|
  (Dear )?[a-z0-9_\\.\\-]+@[a-z0-9_\\.\\-]+|[_-]+\n EMAIL ID:[a-z0-9 ]
  +|^[ \t ]+|^[━\\--〓==★☆◆◇□■●○◎\\*・‥…─]{3,}|[ \t ]+
  $|^Thanks\n*.+[\n\n\n]*.+ wrote:\n*>.*\n*.+-\n*out me now\n*)", "",
  regular, nocasesense;
  while( result )finddown;
  gofiletop;
  replacedown "^\n", "", regular;
  while( result )finddown;
  if( gettext( 0, 0, 0, 1 ) == "" )return;
  gofileend;
  if( linelen2 )insert "\n";
  saveas "duplicate_spam.tmp", utf8;
  return;

GetSearchStr:
  ##line = 0;
  while( 1 ){
    $$s = gettext( 0, ##line, 0, ##line + 1 );
    if( ascii( rightstr( $$s, 1 ) ) == 0x0A )$$s = leftstr( $$s,
    strlen( $$s ) - 1 );
    if( ascii( rightstr( $$s, 1 ) ) == 0x0D )$$s = leftstr( $$s,
    strlen( $$s ) - 1 );
    if( strlen( $$s ) > 10 )return $$s;
    if( ##line == linecount )return "";
    ##line = ##line + 1;
  }

ChangeConf:
  openreg "CURRENTUSER","Software\\Hidemaruo\\TuruKame\\Config";
  #UnreadSwitch = getregnum( "UnreadSwitch" );
  #ActivateUnreadSwitch = getregnum( "ActivateUnreadSwitch" );
  #AllViewUnreadSwitch = getregnum( "AllViewUnreadSwitch" );
  writeregnum "UnreadSwitch", 0xFFFFFFFF;
  writeregnum "ActivateUnreadSwitch", 0;
  writeregnum "AllViewUnreadSwitch", 0;
  closereg;
  #tmp = dllfunc( "EnvChanged" );
  $folder = dllfuncstr( "CurrentFolder" );
  $s = dllfuncstr( "GetFindPack" );
  $s2 = searchbuffer;
  #s2 = searchoption;
  $r2 = replacebuffer;
  #head = dllfunc( "HeaderView" );
  #view = dllfunc( "IsThreadView" );
  #tmp = dllfunc( "DisableDraw" , 1);
  #tmp = dllfunc( "SetThreadView", 0 );
  #tmp = dllfunc( "SwitchHeaderView", 0 );
  return;

[ ]
RE:01223 DisableDraw が効かない?No.01224
秀まるお さん 08/02/26 13:33
 
 マクロの中身が非常に難しいのでちょっとテストが難しいんですが、マクロ
を見た所、BeginEditMail/SaveEditMail/CancelEditMailの使い方が僕の予想
の範囲を超えてます。

 いきなりCancelEditMailされてるみたいだし、BeginEditMailした後
SaveEditMailしてないで終わってたりしてるし…。

 BeginEditMailした状態でメールの選択状態が変化してしまうのも予想外で
して、そういうことをされてしまうとメール内容が壊れてしまうかもしれない
です。

 BeginEditMailしたままDelete関数を呼ぶのも含めて、その辺を直していた
だければ普通に動作するんじゃないかと思います。

 今のところそこまでしか言えないです。

 もうちょっと簡単なマクロにしていただくか、または再現手順を教えてもら
えればなんとかテストしますけど。

[ ]
RE:01224 BeginEditMail/CancelEditMail/SNo.01227
Iranoan さん 08/02/26 15:25
 
 秀まるおさん今日は、Iranoan です。
>  いきなりCancelEditMailされてるみたいだし、BeginEditMailした後
> SaveEditMailしてないで終わってたりしてるし…。
 空の HTML メールの処理で一箇所おかしな場所はあったので、それは直した
のですが、上記の点について確認です。BeginEditMail した後に編集し、選択
メールが変わらないうちに CancelEditMail/SaveEditMail のどちらか一方を
呼び出せばよいんですよね。
 ##BeginEditMail と CancelEditMail が同じサブルーチン内で使われていな
いので解りにくいわけですが....。

[ ]
RE:01227 BeginEditMail/CancelEditMail/SNo.01228
秀まるお さん 08/02/26 15:41
 
 ソースコードを見直したんですが、CancelEditMailが呼ばれておかしくなっ
たり、呼び忘れておかしくなるってことは無いようです。(呼び忘れるとメモ
リリークはするけども)

 BeginEditMailしたままメールを削除したり他のメールを選択したりすると
ダメな気がします。

 とりあえずそういうことで、とにかくマクロだけ提示されてもちょっとテス
トが難しいので、例えばこういうメールでこういうテストをしたらこういう結
果になる、みたいな再現手順とセットで教えていただければ、こちらでもテス
ト出来ると思います。
 (特にDelete関数を使ってるマクロはテスト方法が分からないと怖いで
す。)

[ ]
RE:01228 BeginEditMail/CancelEditMail/SNo.01229
Iranoan さん 08/02/26 15:47
 
 秀まるおさん今日は、Iranoan です。
>  BeginEditMailしたままメールを削除したり他のメールを選択したりすると
> ダメな気がします。
 取り敢えずこの点をまず確認したかったので、表題を変えてお聞きしました。
 問題の本文エリアが書き換わっている点に関しては、これから調べます。

 お返事ありがとうございました。

[ ]