マクロ:添付ファイルの保存失敗No.38044
hirahira さん 10/03/12 09:21
 
いつもお世話になっております。

いまだに自分用のファイル保存マクロを作成しております。

大きな流れは以下のようなものなのですが、

添付ファイルによっては、うまくいくものと

上手く行かないものがあります。

「保存先のファイルが見つかりません。たぶん、保存に失敗しました。ファイル名○
○」

とのメッセージが出現します。


この現象は、最近というわけではなく、ずっと以前からのものです。

使用環境 秀丸メール 5.34b10 + XP sp3 +秀丸エディタ 8.00B44

ご迷惑をおかけしますが、よろしくお願いいたします。


添付ファイルがあった場合、保存処理を行うようなマクロです。
 
    if( #fcount > 0 ) {
        //添付ファイルがあった場合
//        message "添付ファイルが " + str(#fcount) + " 個ありますよ!保存し
てね";
        #n = dllfunc( "SelectPane", 3);
       
   
//次のV5.13βから、
//
//#n = sendmessage( hidemaruhandle(0), 0x0111, 40323, 0 );
//
// って文で「名前を付けて保存」が実行出来るようにします。
//
//#define IDM_ATTACHPANE_UNDOATTACH       40322
//#define IDM_ATTACHPANE_SAVEAS           40323
//#define IDM_ATTACHPANE_RENAME           40324
//#define IDM_ATTACHPANE_IMPORT           40325
//#define IDM_ATTACHPANE_FIND_RENAMED_FILE 40326
//#define IDM_ATTACHPANE_EXPLORER         40327

//ということで、今現在の枠上で「すべて選択」を実行する用の、
//SelectAllInCurrentPaneって関数を追加することにします。
//
//    loaddll "tkinfo.dll";
//    #n = dllfunc("SelectPane", 3);
//    #n = dllfunc("SelectAllInCurrentPane");
//    #n = sendmessage( hidemaruhandle(0), 0x111, 40323, 0 );
//    #n = dllfunc("SelectPane", 3);


        #n = dllfunc("SelectAllInCurrentPane");
        #n = dllfunc("SetAutoPushTimer", 1, "OK" );

        #n = dllfunc("SetAutoPushTimerEver", hidemaruhandle(0), "" );
        #n = sendmessage( hidemaruhandle(0), 0x0111, 40323, 0 );
        #n = dllfunc("StopAutoPushTimer");

    }

上手く行かなかったときのダンプを以下に添付します。


08:55:17.687 (   0) ExecCommandMacroSub mail-2010-03-08.mac
08:55:18.421 (8133) FrameWnd:TKINFO 34
08:55:18.421 (2463) TKINFO 34
08:55:18.421 (5071) tkinfo 34
08:55:18.421 (8136) FrameWnd:TKINFO 34 return 00000000
08:55:19.546 (   0) DdeCallback, i=0, hconv=0x02000580
08:55:24.531 (   0) DdeCallback, i=0, hconv=0x02000580
08:55:24.593 (   0) DdeCallback, i=0, hconv=0x02000580
08:55:24.609 (8133) FrameWnd:TKINFO 4
08:55:24.609 (2463) TKINFO 4
08:55:24.609 (5071) tkinfo 4
08:55:24.609 (8136) FrameWnd:TKINFO 4 return 00000001
08:55:24.609 (8133) FrameWnd:TKINFO 3
08:55:24.609 (2463) TKINFO 3
08:55:24.609 (5071) tkinfo 3
08:55:24.609 (8136) FrameWnd:TKINFO 3 return 00000000
08:55:24.609 (8133) FrameWnd:TKINFO 3
08:55:24.609 (2463) TKINFO 3
08:55:24.609 (5071) tkinfo 3
08:55:24.609 (8136) FrameWnd:TKINFO 3 return 00000001
08:55:24.609 (8133) FrameWnd:TKINFO 3
08:55:24.609 (2463) TKINFO 3
08:55:24.609 (5071) tkinfo 3
08:55:24.609 (8136) FrameWnd:TKINFO 3 return 00000001
08:55:24.609 (8133) FrameWnd:TKINFO 16
08:55:24.609 (2463) TKINFO 16
08:55:24.609 (8136) FrameWnd:TKINFO 16 return 00000003
08:55:24.609 (8133) FrameWnd:TKINFO 95
08:55:24.609 (2463) TKINFO 95
08:55:24.609 (5071) tkinfo 95
08:55:24.609 (20368) MuteOther()
08:55:24.609 (20431) MuteOther: OBJECT_0
08:55:24.609 ( 685) ProcessExecEvent
08:55:24.609 (1288) ProcessExecEvent exit
08:55:24.609 ( 685) ProcessExecEvent
08:55:24.609 (1288) ProcessExecEvent exit
08:55:24.609 (20518) ReleaseMuteOther()
08:55:24.609 (8136) FrameWnd:TKINFO 95 return 00000000
08:55:24.609 (8133) FrameWnd:TKINFO 96
08:55:24.609 (2463) TKINFO 96
08:55:24.609 (5071) tkinfo 96
08:55:24.609 (20368) MuteOther()
08:55:24.609 (20431) MuteOther: OBJECT_0
08:55:24.609 ( 685) ProcessExecEvent
08:55:24.609 (1288) ProcessExecEvent exit
08:55:24.609 ( 685) ProcessExecEvent
08:55:24.609 (12954) NotifyListCacheOffsetMoved
08:55:24.640 (1288) ProcessExecEvent exit
08:55:24.640 (20518) ReleaseMuteOther()
08:55:24.640 (8136) FrameWnd:TKINFO 96 return 00000001
08:55:24.656 (8133) FrameWnd:TKINFO 3
08:55:24.656 (2463) TKINFO 3
08:55:24.656 (5071) tkinfo 3
08:55:24.656 (8136) FrameWnd:TKINFO 3 return 00000001
08:55:24.656 (8133) FrameWnd:TKINFO 95
08:55:24.656 (2463) TKINFO 95
08:55:24.656 (5071) tkinfo 95
08:55:24.656 (20368) MuteOther()
08:55:24.656 (20431) MuteOther: OBJECT_0
08:55:24.656 ( 685) ProcessExecEvent
08:55:24.656 (1288) ProcessExecEvent exit
08:55:24.656 ( 685) ProcessExecEvent
08:55:24.656 (1288) ProcessExecEvent exit
08:55:24.656 (20518) ReleaseMuteOther()
08:55:24.656 (8136) FrameWnd:TKINFO 95 return 0000000E
08:55:24.656 (8133) FrameWnd:TKINFO 96
08:55:24.656 (2463) TKINFO 96
08:55:24.656 (5071) tkinfo 96
08:55:24.656 (20368) MuteOther()
08:55:24.656 (20431) MuteOther: OBJECT_0
08:55:24.656 ( 685) ProcessExecEvent
08:55:24.656 (1288) ProcessExecEvent exit
08:55:24.656 ( 685) ProcessExecEvent
08:55:24.656 (1288) ProcessExecEvent exit
08:55:24.656 (20518) ReleaseMuteOther()
08:55:24.656 (8136) FrameWnd:TKINFO 96 return 00000001
08:55:24.671 (8133) FrameWnd:TKINFO 3
08:55:24.671 (2463) TKINFO 3
08:55:24.671 (5071) tkinfo 3
08:55:24.671 (8136) FrameWnd:TKINFO 3 return 00000001
08:55:24.671 (8133) FrameWnd:TKINFO 3
08:55:24.671 (2463) TKINFO 3
08:55:24.671 (5071) tkinfo 3
08:55:24.671 (8136) FrameWnd:TKINFO 3 return 00000001
08:55:24.671 (8133) FrameWnd:TKINFO 3
08:55:24.671 (2463) TKINFO 3
08:55:24.671 (5071) tkinfo 3
08:55:24.671 (8136) FrameWnd:TKINFO 3 return 00000001
08:55:24.671 (8133) FrameWnd:TKINFO 99
08:55:24.671 (2463) TKINFO 99
08:55:24.671 (5071) tkinfo 99
08:55:24.671 (8136) FrameWnd:TKINFO 99 return 005A7FB8
08:55:27.687 (2845) tkinfo.dll: EnvChagned called
08:55:27.687 (8133) FrameWnd:TKINFO 70
08:55:27.687 (2463) TKINFO 70
08:55:27.687 (9151) EnterTrans
08:55:27.687 (9179) Trans mutex
08:55:27.734 (8665) -
08:55:27.765 (13598) EnvChagned fFilterLog=0
08:55:27.765 (9254) LeaveTrans()
08:55:27.765 (8136) FrameWnd:TKINFO 70 return 00000001
08:55:27.765 (2847) tkinfo.dll: EnvChanged return
08:55:30.640 (8133) FrameWnd:TKINFO 18
08:55:30.640 (2463) TKINFO 18
08:55:30.640 (8136) FrameWnd:TKINFO 18 return 00000001
08:55:30.640 (8133) FrameWnd:TKINFO 245
08:55:30.640 (2463) TKINFO 245
08:55:30.640 (8136) FrameWnd:TKINFO 245 return 00000001
08:55:30.640 (13636) Cmd 40323
08:55:30.640 (3241) CAttachPane::SaveAs()
08:55:30.656 (3385) will GetSaveFileNameW
08:55:30.718 (3062) SaveAsHookProc: initdialog
08:55:30.734 (3148) SaveAsHistoryHookProc: initdone
08:55:30.734 (3081) SaveAsHookProc: initdone
08:55:31.171 (3162) SaveAsHistoryHookProc: fileok
08:55:31.171 (3087) SaveAsHookProc: fileok
08:55:31.203 (3387) done
08:55:31.296 (3622) will SaveAttachAfter
08:55:31.296 (10099) DialogBox2Param() template=454
08:55:31.328 (10137) DialogBox2Param() exit
08:55:31.328 (3624) done
08:55:31.343 (15154) 40323 ret 1
08:55:31.343 (8133) FrameWnd:TKINFO 212
08:55:31.343 (2463) TKINFO 212
08:55:31.343 (2819) DisableDraw
08:55:31.343 (9919) AlterSave ○○○○/0/ file=受信201003_02.txt offset=2978
3 prevsize=2854
08:55:31.359 (12954) NotifyListCacheOffsetMoved
08:55:31.359 (9981) SetView pTitle=001B99FC cb=2868 off=29783
08:55:31.359 ( 993) f:\TuruKameData\○○○○\受信添付\100312_00\○○○○.pdf
08:55:31.359 (2119) SetText at pHidemaruView
08:55:31.359 (2151) cmdReasonCreated=open
08:55:31.359 (2819) EnableDraw
08:55:31.375 (8136) FrameWnd:TKINFO 212 return 00000001
08:55:31.406 (8160) leave
08:55:31.406 (15154) 42001 ret 1
08:55:31.453 (   0) DdeCallback, i=0, hconv=0x00000000
08:55:34.062 (9981) SetView pTitle=001B9A88 cb=3099 off=32653
08:55:34.062 ( 993) f:\TuruKameData\○○○○\受信添付\100312_01\○○○○.zip
08:55:34.062 (2119) SetText at pHidemaruView
08:55:34.062 (2151) cmdReasonCreated=open
08:55:34.078 (9981) SetView pTitle=001B9A88 cb=3099 off=32653
08:55:34.078 (10064) same return
08:55:37.343 (13636) Cmd 42001
08:55:37.343 (8130) entered
08:55:37.343 (   0) ExecCommandMacroSub mail-2010-03-08.mac
08:55:37.484 (8133) FrameWnd:TKINFO 34
08:55:37.484 (2463) TKINFO 34
08:55:37.484 (5071) tkinfo 34
08:55:37.484 (8136) FrameWnd:TKINFO 34 return 00000000
08:55:39.703 (   0) DdeCallback, i=0, hconv=0x72000580
08:55:41.375 (   0) DdeCallback, i=0, hconv=0x72000580
08:55:41.406 (   0) DdeCallback, i=0, hconv=0x72000580
08:55:41.406 (8133) FrameWnd:TKINFO 4
08:55:41.406 (2463) TKINFO 4
08:55:41.421 (5071) tkinfo 4
08:55:41.421 (8136) FrameWnd:TKINFO 4 return 00000001
08:55:41.421 (8133) FrameWnd:TKINFO 3
08:55:41.421 (2463) TKINFO 3
08:55:41.421 (5071) tkinfo 3
08:55:41.421 (8136) FrameWnd:TKINFO 3 return 00000000
08:55:41.421 (8133) FrameWnd:TKINFO 3
08:55:41.421 (2463) TKINFO 3
08:55:41.421 (5071) tkinfo 3
08:55:41.421 (8136) FrameWnd:TKINFO 3 return 00000001
08:55:41.421 (8133) FrameWnd:TKINFO 3
08:55:41.421 (2463) TKINFO 3
08:55:41.421 (5071) tkinfo 3
08:55:41.421 (8136) FrameWnd:TKINFO 3 return 00000001
08:55:41.421 (8133) FrameWnd:TKINFO 16
08:55:41.421 (2463) TKINFO 16
08:55:41.421 (8136) FrameWnd:TKINFO 16 return 00000003
08:55:41.421 (8133) FrameWnd:TKINFO 95
08:55:41.421 (2463) TKINFO 95
08:55:41.421 (5071) tkinfo 95
08:55:41.421 (20368) MuteOther()
08:55:41.421 (20431) MuteOther: OBJECT_0
08:55:41.421 ( 685) ProcessExecEvent
08:55:41.421 (1288) ProcessExecEvent exit
08:55:41.421 ( 685) ProcessExecEvent
08:55:41.421 (1288) ProcessExecEvent exit
08:55:41.421 (20518) ReleaseMuteOther()
08:55:41.421 (8136) FrameWnd:TKINFO 95 return 00000000
08:55:41.421 (8133) FrameWnd:TKINFO 96
08:55:41.421 (2463) TKINFO 96
08:55:41.421 (5071) tkinfo 96
08:55:41.421 (20368) MuteOther()
08:55:41.421 (20431) MuteOther: OBJECT_0
08:55:41.421 ( 685) ProcessExecEvent
08:55:41.421 (1288) ProcessExecEvent exit
08:55:41.421 ( 685) ProcessExecEvent
08:55:41.421 (12954) NotifyListCacheOffsetMoved
08:55:41.421 (1288) ProcessExecEvent exit
08:55:41.421 (20518) ReleaseMuteOther()
08:55:41.421 (8136) FrameWnd:TKINFO 96 return 00000001
08:55:41.437 (8133) FrameWnd:TKINFO 3
08:55:41.437 (2463) TKINFO 3
08:55:41.437 (5071) tkinfo 3
08:55:41.437 (8136) FrameWnd:TKINFO 3 return 00000001
08:55:41.437 (8133) FrameWnd:TKINFO 95
08:55:41.437 (2463) TKINFO 95
08:55:41.437 (5071) tkinfo 95
08:55:41.437 (20368) MuteOther()
08:55:41.437 (20431) MuteOther: OBJECT_0
08:55:41.437 ( 685) ProcessExecEvent
08:55:41.437 (1288) ProcessExecEvent exit
08:55:41.437 ( 685) ProcessExecEvent
08:55:41.437 (1288) ProcessExecEvent exit
08:55:41.437 (20518) ReleaseMuteOther()
08:55:41.437 (8136) FrameWnd:TKINFO 95 return 0000000E
08:55:41.437 (8133) FrameWnd:TKINFO 96
08:55:41.437 (2463) TKINFO 96
08:55:41.437 (5071) tkinfo 96
08:55:41.437 (20368) MuteOther()
08:55:41.437 (20431) MuteOther: OBJECT_0
08:55:41.437 ( 685) ProcessExecEvent
08:55:41.437 (1288) ProcessExecEvent exit
08:55:41.437 ( 685) ProcessExecEvent
08:55:41.437 (1288) ProcessExecEvent exit
08:55:41.437 (20518) ReleaseMuteOther()
08:55:41.437 (8136) FrameWnd:TKINFO 96 return 00000001
08:55:41.453 (8133) FrameWnd:TKINFO 3
08:55:41.453 (2463) TKINFO 3
08:55:41.453 (5071) tkinfo 3
08:55:41.453 (8136) FrameWnd:TKINFO 3 return 00000001
08:55:41.453 (8133) FrameWnd:TKINFO 3
08:55:41.453 (2463) TKINFO 3
08:55:41.453 (5071) tkinfo 3
08:55:41.453 (8136) FrameWnd:TKINFO 3 return 00000001
08:55:41.453 (8133) FrameWnd:TKINFO 3
08:55:41.453 (2463) TKINFO 3
08:55:41.453 (5071) tkinfo 3
08:55:41.453 (8136) FrameWnd:TKINFO 3 return 00000001
08:55:41.453 (8133) FrameWnd:TKINFO 99
08:55:41.453 (2463) TKINFO 99
08:55:41.453 (5071) tkinfo 99
08:55:41.453 (8136) FrameWnd:TKINFO 99 return 005A7FB8
08:55:43.937 (2845) tkinfo.dll: EnvChagned called
08:55:43.937 (8133) FrameWnd:TKINFO 70
08:55:43.937 (2463) TKINFO 70
08:55:43.937 (9151) EnterTrans
08:55:43.937 (9179) Trans mutex
08:55:43.984 (8665) -
08:55:44.015 (13598) EnvChagned fFilterLog=0
08:55:44.015 (9254) LeaveTrans()
08:55:44.015 (8136) FrameWnd:TKINFO 70 return 00000001
08:55:44.015 (2847) tkinfo.dll: EnvChanged return
08:55:45.031 (8133) FrameWnd:TKINFO 18
08:55:45.031 (2463) TKINFO 18
08:55:45.031 (8136) FrameWnd:TKINFO 18 return 00000001
08:55:45.031 (8133) FrameWnd:TKINFO 245
08:55:45.031 (2463) TKINFO 245
08:55:45.031 (8136) FrameWnd:TKINFO 245 return 00000001
08:55:45.031 (13636) Cmd 40323
08:55:45.031 (3241) CAttachPane::SaveAs()
08:55:45.031 (3385) will GetSaveFileNameW
08:55:45.078 (3062) SaveAsHookProc: initdialog
08:55:45.078 (3148) SaveAsHistoryHookProc: initdone
08:55:45.078 (3081) SaveAsHookProc: initdone
08:55:45.203 (3162) SaveAsHistoryHookProc: fileok
08:55:45.203 (3087) SaveAsHookProc: fileok
08:55:45.234 (3387) done
08:55:48.343 (3622) will SaveAttachAfter
08:55:48.343 (10099) DialogBox2Param() template=454
08:55:48.437 (10137) DialogBox2Param() exit
08:55:48.437 (3624) done
08:55:48.437 (15154) 40323 ret 1
08:55:48.453 (8133) FrameWnd:TKINFO 212
08:55:48.453 (2463) TKINFO 212
08:55:48.453 (2819) DisableDraw
08:55:48.453 (9919) AlterSave ○○○○/0/ file=受信201003_02.txt offset=3265
3 prevsize=3099
08:55:48.453 (12954) NotifyListCacheOffsetMoved
08:55:48.453 (9981) SetView pTitle=001B9A88 cb=3113 off=32653
08:55:48.453 ( 993) f:\TuruKameData\○○○○\受信添付\100312_01\○○○○.zip
08:55:48.453 (2119) SetText at pHidemaruView
08:55:48.453 (2151) cmdReasonCreated=open
08:55:48.453 (2819) EnableDraw
08:55:48.468 (8136) FrameWnd:TKINFO 212 return 00000001
08:55:48.515 (   0) DdeCallback, i=0, hconv=0x72000580
08:55:48.531 (8160) leave
08:55:48.531 (15154) 42001 ret 1
08:55:48.531 (   0) DdeCallback, i=0, hconv=0x00000000
08:55:52.984 (7408) syscommand 0xF095
08:55:52.984 (7469) will DefWindowProc
08:55:58.125 (7473) DefWindowProc done nRet = 00000000
08:55:58.125 (13636) Cmd 40017
08:55:58.156 (9151) EnterTrans
08:55:58.156 (9179) Trans mutex
08:55:58.156 (8491) InitPatrol

[ ]
RE:38044 マクロ:添付ファイルの保存失敗No.38045
秀まるお2 さん 10/03/12 10:30
 
 保存後の確認の時に、保存したファイルの存在が確認出来ないとそのエラーが
出てしまうのですが、なぜ出てしまうのかというと…

 添付ファイルの保存には、実はWindowsのSHFileOperationというAPIを使って
いるんですけど、たぶんこAPIは、ファイルのコピーが完了する前に返ってきて
しまうんじゃないかと思います。

 ファイルの保存自体は遅延して実行されてしまうのかなぁと…。

 そういう場合にエラーになってしまうのかなぁと思います。ということで、確
認をもうちょっと遅延して実行するように直してみようかなぁと思います。

 ですが、とりあえす回避方法があります。まず手作業にて、添付ファイルを1
つ選択して、マウス右ボタンメニューから「添付ファイルの保存...」を実行し
ます。すると、そのダイアログボックスの左下に「保存後に確認する」というチ
ェックマークがあるので、それをOFFにして、それで適当に保存を実行します。

 すると以後はこの「保存後に確認する」がOFF扱いになるので、マクロで添付
ファイルを保存した時もエラーは出なくなると思います。

 ということでどうでしょ?

[ ]
RE:38045 マクロ:添付ファイルの保存失敗No.38046
hirahira さん 10/03/12 11:00
 
> すると以後はこの「保存後に確認する」がOFF扱いになるので、マクロで添付
>ファイルを保存した時もエラーは出なくなると思います。
>
> ということでどうでしょ?

わかりました。

ありがとうございます。

しばらく、これでやってみようと思います。

お忙しい中、申し訳ありませんでした。m(_ _)m

[ ]
RE:38046 マクロ:添付ファイルの保存失敗No.38047
秀まるお2 さん 10/03/12 11:44
 
 ファイルの存在確認でエラーになるケースがあるというのは僕も知らなかった
ので、こういう問題を報告いただけることは大変助かります。

 次のβ版では、保存されたファイルの存在確認でエラーになった場合は、1秒
待ってから再試行し、それでもなお存在が確認出来なかった場合に限りエラーメ
ッセージを出すように修正させていただきます。

[ ]