|
Wordファイルじゃない場合の動作がいまいち不明なんですが、とりあえず以下のよ
うにしてみました。こんなんでどうでしょうか。
Wordファイルが無い場合にどうしたらいいかとか、細かく指摘していただければま
た修正できると思います。
---------------------------------------------------------------------
// 添付ファイルを編集用に開く.mac
//
loaddll "tkinfo.dll";
#cAttach = dllfunc("CountCurrentHeader", "X-Attach");
if( #cAttach == 0 ) {
message "添付ファイルはありません。";
endmacro;
}
#cAttachDoc = 0;
#i = 0;
while( #i < #cAttach ) {
$attach = dllfuncstr("CurrentHeader2", "X-Attach", #i);
if( rightstr( $attach, 4 ) == ".doc"
|| rightstr( $attach, 5 ) == ".docx"
|| rightstr( $attach, 5 ) == ".docm"
) {
//Wordファイル発見
$attach[#cAttachDoc] = $attach;
#cAttachDoc = #cAttachDoc + 1;
message "#cAttachDoc = " + str(#cAttachDoc);
}
#i = #i + 1;
}
if( #cAttachDoc == 0 ) {
//普通にファイルを開く?
#i = 0;
if( #cAttach > 1 ) {
#i = 0;
$menu[0] = "編集する添付ファイルを選択してください。";
$menu[1] = "\x01";
while( #i < #cAttach ) {
$attach = dllfuncstr("CurrentHeader2", "X-Attach", #i);
$attach = midstr( $attach, strrstr( $attach, "\\" ) + 1 );
$menu[2 + #i] = $attach;
#i = #i + 1;
}
menuarray $menu, #cAttach + 2;
if( result <= 2 ) {
endmacro;
}
#i = result - 3;
}
$attach = dllfuncstr("CurrentHeader2", "X-Attach", #i);
} else if( #cAttachDoc == 1 ) {
//Word添付ファイルが1つだけならそれを開く。
$attach = $attach[0];
} else {
//選択?
$menu[0] = "編集する添付ファイルを選択してください。";
$menu[1] = "\x01";
#i = 0;
while( #i < #cAttachDoc ) {
$menu[2 + #i] = midstr( $attach[#i], strrstr( $attach[#i], "\\"
) + 1 );
#i = #i + 1;
}
menuarray $menu, #cAttachDoc + 2;
if( result <= 2 ) {
endmacro;
}
#i = result - 3;
$attach = $attach[#i];
}
$attachbase = midstr( $attach, strrstr( $attach, "\\" ) + 1 );
$path = dllfuncstr("HomeDir") + dllfuncstr("CurrentAccount") + "\\" + $a
ttach;
$desktop = getenv("USERPROFILE") + "\\Desktop";
if( !existfile($desktop) ) {
message "デスクトップフォルダが特定できませんでした。";
endmacro;
}
$destdir = $desktop;
$destpath = $destdir + "\\" + $attachbase;
#n = dllfunc("Bypass_CopyFile", $path, $destpath, 1);
if( #n == 0 ) {
message "添付ファイルをデスクトップの一時編集用フォルダにコピーする
のが失敗しました。";
endmacro;
}
#attr = dllfunc("Bypass_GetFileAttributes", $destpath);
if( (#attr & 1) != 0 ) {
#n = dllfunc("Bypass_SetFileAttributes", $destpath, #attr & 0xFFFE);
}
//ファイルの更新日時を比較する
#fso = createobject("Scripting.FileSystemObject");
#fo = member(#fso, "GetFile", $destpath);
$datePrev = member(#fo, "DateLastModified");
message $datePrev;
openbyshell $destpath;
if( result != yes ) {
message "添付ファイルをデスクトップの一時編集用フォルダに保存しまし
たが、ファイルを開くことに失敗しました。";
endmacro;
}
#ret = dllfunc("Bypass_MessageBox", hidemaruhandle(0), "ファイルを開きま
した。編集が終わったら、\n「はい」を押すと編集したファイルに置き換え動作。\n
「いいえ」を押すと置き換えなし。", "添付ファイルを編集用に開くマクロ", 0x20
+ 3 + 0x100);
$dateNew = member(#fo, "DateLastModified");
if( $dateNew != "" && $dateNew == $datePrev ) {
question "添付ファイルは更新されていません。デスクトップ上の一時ファ
イルを削除していいですか?";
if( result == yes ) {
#n = dllfunc("Bypass_DeleteFile", $destpath);
}
endmacro;
}
if( #ret == 6 ) { //「はい」ボタンを押した場合
#n = dllfunc("Bypass_SetFileAttributes", $path, #attr & 0xFFFE);
#n = dllfunc("Bypass_CopyFile", $destpath, $path, 0);
if( #n == 0 ) {
message "添付ファイルをデスクトップの一時編集用フォルダから戻す
用のコピーに失敗しました。";
endmacro;
}
#n = dllfunc("Bypass_DeleteFile", $destpath);
message "編集した添付ファイルで置き換えました。";
} else {
question "デスクトップ上の一時ファイルを削除していいですか?";
if( result == yes ) {
#n = dllfunc("Bypass_DeleteFile", $destpath);
}
endmacro;
}
|
|