|
今トライしてみて、簡単に修正できました。失礼しました。
次のβ版(V7.13β6)にて対応させていただきます。
09768 22/06/07 16:18 さかみつ RE:09767 エディタ側でのマクロについて
分りにくくてすみません。
引用記号は私がつけました。
画面キャプチャをメールしました。
よろしくお願いします <m(__)m>
> もしかしてメール本文の文面自体に引用記号が付いてるのやら?
> ......
> よろしくお願いします。
09769 22/06/07 16:44 秀まるお2 RE:09768 エディタ側でのマクロについて
伏せ字にした上で画面ハードコピー送っていただきありがとうございます。見た感
じ、特に僕の想定外のことは無いみたいでした。
文面的に何もイレギュラーなことは無くて、なぜうまくいかないのかよく分からず
です。とりあえず、もっと寛容性の高い別の仕組みに直してみます。
09770 22/06/07 17:28 秀まるお2 RE:09769 エディタ側でのマクロについて
もっとシンプルにしてみました。これでどうでしょうか。
----------------------------------------------------------------------------
-----------------
//暗号化Zipの自動解凍 PasswordZipExtract.mac
// 2019.02.12
// 2019.03.07 Version 1.1 パスワードの形式追加。
// 2019.03.12 Version 1.2 パスワードの形式さらに追加。
// 2021.04.26 Version 1.3
// 7-Zipの代わりにunzip.exeでも解凍できるようにした。
// パスワードの形式にもっといろいろ追加。&、複数候補あった場合は
メニュー表示するようにした。
// 2021.05.10 Version 1.4 さらに形式追加。11〜12
// unzip.exeまたは7zip.exeの終了コードを見て、成功してる場合は結
果表示しないようにした。
// 2021.05.11 Version 1.5 PasswordZipTempフォルダにサブフォルダのゴミが残る
バグ修正。
// 2021.05.13 Version 1.6 メール本文にユニコード文字(Shift-JIS範囲外の文
字)があるとパスワードがおかしくなるバグ修正。
// 2021.05.18 Version 1.7 パスワードの中に「%」があると失敗するバグ修正。
// 2021.06.04 Version 1.8 新しいパスワード形式対応。
// 2022.06.06 Version 1.9 固定の形式になってない所からなんとかパスワードを
抽出する対応。
// パスワードを範囲選択してから実行してもいいように
する。
//
// by 秀まるお
// hidesoft.8:04704| 暗号化zip自動解凍マクロ
//
//
//説明:
// このマクロはパスワード付きzipの添付ファイルを簡単に解凍する用のマクロです。
// パスワード付きzipの添付ファイル入りメールは、そのメールとは別便でパスワード
// を通知してきます。このマクロはその別便メールの中からパスワードを取り出して、
// 自動で解凍します。
//
// マクロを実行する前に、zip添付ファイル付きのメールとパスワード通知メールの
// 2通を選択して実行する必要があります。
//解凍したファイルは「ドキュメント」フォルダ配下のPasswordZipTempフォルダに
// 作成されます。古いファイルが残ってる場合はマクロ実行のタイミングで削除され
// てから解凍されます。
//
// unzip.exeのダウンロード場所: http://gnuwin32.sourceforge.net/packages/unzip.htm
// 7-Zipのダウンロード場所: https://sevenzip.osdn.jp/
loaddll "tkinfo.dll";
// 秀丸メールの検索パック復元予約
#n = dllfunc("AutoRestoreFindPack");
// 秀丸エディタの検索条件復元予約
setcompatiblemode 0x00020000;
#n = dllfunc("SetJapaneseCodePageMode", 1);
#n = dllfunc("SelectedMailCount");
if( #n != 2 ) {
message "このマクロは暗号化zip付きメールと、その解凍用パスワード通知
メールの2通を選択した状態で実行してください。";
endmacro;
}
$selectedtext = "";
if( selecting ) {
$selectedtext = gettext( seltopx, seltopy, selendx, selendy, 1 );
}
//対象のzipとパスワードを取り出す。
$zipfile = "";
$password = "";
#n = dllfunc("LockSelection");
while(1) {
#n = dllfunc("EnumSelection", 1);
if( #n == 0 ) {
break;
}
#foundzip = 0;
if( $zipfile == "" ) {
#count = dllfunc("CountCurrentHeader", "X-Attach");
if( #count != 0 ) {
#i = 0;
while( #i < #count ) {
$attach = dllfuncstr("CurrentHeader2", "X-Attach", #i);
$ext = dllfuncstr("ToLower", rightstr( $attach, 4 ) );
if( $ext == ".zip" ) {
$zipfile = dllfuncstr("HomeDir") + dllfuncstr("Curre
ntAccount") + "\\" + $attach;
#foundzip = 1;
break;
}
#i = #i + 1;
}
}
}
if( $password == "" && #foundzip == 0 ) {
$text = gettext( 0, 0, 999, linecount ); //メール本文全部
loaddll "HmJre.dll";
#n = dllfunc("SetUnicodeIndexAutoConvert", 1); //V1.6 バグ修正
$text = dllfuncstr("ReplaceRegularNoCaseSense", "[\\r\\n]+", $te
xt, 0, " ", 2);
//改行を空白に変換しておく。
$text = dllfuncstr("ReplaceRegularNoCaseSense", " +", $text, 0,
" ", 2);
//全角空白を半角空白に変換しておく。
$text = $text + " "; //末端に空白を付けておく。
$pattern[0] = " 【パスワード】 *[::]? *([^ \x81\x40-\xFC\xFF]
+?) ";
$pattern[1] = " 解凍パスワード *[::]? *([^ \x81\x40-\xFC\xFF]
+?) ";
$pattern[2] = " Password *: *([^ \x81\x40-\xFC\xFF]+?) ";
$pattern[3] = " \\[パスワード/Password\\] *([^ \x81\x40-\xFC\xF
F]+?) ";
$pattern[4] = " 【暗号化パスワード\\(password\\)】 *([^ \x81\x40
-\xFC\xFF]+?) ";
$pattern[5] = " パスワードは「([^ \x81\x40-\xFC\xFF]+?)」";
$pattern[6] = " 解凍パスワード +([^ \x81\x40-\xFC\xFF]+?) ";
$pattern[7] = " パスワード *[::] *([^ \x81\x40-\xFC\xFF]+?) ";
$pattern[8] = " 添付ファイルパスワード *[::]? *([^ \x81\x40-\xF
C\xFF]+?) ";
$pattern[9] = " \\[(?:パスワード|Password)\\] *([^ \x81\x40-\xFC
\xFF]+?) ";
$pattern[10] = " パスワード *\\(Password\\) *[::]? *([^ \x81\x4
0-\xFC\xFF]+?) ";
$pattern[11] = " \\[password information\\] *([^ \x81\x40-\xFC\x
FF]+?) ";
$pattern[12] = " パスワード[ ]*([0-9]+桁) *[::]? *([^ \x81\
x40-\xFC\xFF]+?) ";
$pattern[13] = " パスワード[ ]*\\([0-9]+桁\\) *[::]? *([^ \x8
1\x40-\xFC\xFF]+?) ";
$pattern[14] = " PASSWORD for .{1,255} is below: +([^ \x81\x40-\
xFC\xFF]+?) ";
#NeedConfirmIndex = 15; //これ以降のパターンについては確認メ
ッセージを出す。
$pattern[15] = "パスワード[^ ]*? +([!-~]{4,20})( |$)";
//V1.9寛容性が一番高い。「パスワード」って文字列
があってその後パスワードが別行になってる。
#iPattern = 0;
#cPassword = 0;
while(1) {
$pattern = $pattern[#iPattern];
if( $pattern == "" ) {
break;
}
//2021.04.28 新しい方式
#x = 0;
while(1) {
#x = dllfunc("FindRegularNoCaseSense", $pattern, $text,
#x );
if( #x >= 0 ) {
Label_EnterHit: ;
$hit = midstr( $text, #x, dllfunc("GetLastMatchLengt
h") );
#tag1 = dllfunc("GetLastMatchTagPosition", 1);
#tag1len = dllfunc("GetLastMatchTagLength", 1);
$pass = midstr( $text, #tag1, #tag1len );
//message $hit + "\n" + $pass;
if( strlen($pass) >= 4 ) { //4文字以上でないと
ダメ。
//同じパスワードがあれば追加しない。
#iFindPass = 0;
while( #iFindPass < #cPassword ) {
if( $password[#iFindPass+1] == $pass ) {
//スキップ
goto Label_SkipAddPass;
}
#iFindPass = #iFindPass + 1;
}
$password[#cPassword+1] = $pass; //注意:
+1した所にセットする。
$whole[#cPassword+1] = $hit + "\t" + $pass;
//注意: +1した所にセットする。
#cPassword = #cPassword + 1;
if( #cPassword == 1 && #iPattern >= #NeedConfirm
Index ) {
#ConfirmPassword = 1;
}
Label_SkipAddPass:
}
#x = #x + 1;
} else {
break;
}
}
#iPattern = #iPattern + 1;
}
loaddll "tkinfo.dll"; //元に戻す。
}
}
#n = dllfunc("UnlockSelection", 1);
if( $zipfile == "" ) {
message "zip形式ファイルが見つかりませんでした。";
endmacro;
}
//V1.9 作ったけど没
// if( #cPassword == 0 ) {
// ...中身削除。
// }
if( #cPassword > 1 ) {
$whole[0] = "パスワードの候補が複数見つかりました。どれを使うか選択
してください。";
menuarray $whole, #cPassword + 1;
if( result <= 1 ) {
message "メールを2通選択して、さらにパスワードの文字列をメール
内容枠中で選択してからマクロ実行すれば、その文字列をパスワードとして解凍しま
す。";
endmacro;
}
$password = $password[result-1]; //result == 1の時に$password
[1]を選択する。
} else {
$password = $password[1];
if( #ConfirmPassword == 1 ) {
question "パスワードは「" + $password + "」でいいですか?";
if( result != yes ) {
message "メールを2通選択して、さらにパスワードの文字列を
メール内容枠中で選択してからマクロ実行すれば、その文字列をパスワードとして解
凍します。";
endmacro;
}
}
}
Label_PasswordDetermined: ;
if( strstr( $password, "\"" ) >= 0 ) {
message "パスワードの中にダブルクォーテーションの文字が含まれてます。
このマクロではダブルクォーテーション入りのパスワードで解凍することは出来ませ
ん。手作業で解凍お願いします。";
endmacro;
}
//2021.04.26 unzip.exeがあればそっちを使う。
// http://gnuwin32.sourceforge.net/packages/unzip.htm
//
$unzip = "C:\\Program Files\\GnuWin32\\bin\\unzip.exe";
if( ! existfile( $unzip ) ) {
$unzip = "C:\\Program Files (x86)\\GnuWin32\\bin\\unzip.exe";
if( ! existfile( $unzip ) ) {
$unzip = "";
}
}
if( $unzip == "" ) {
$7zip = "C:\\Program files\\7-Zip\\7z.exe";
if( ! existfile( $7zip ) ) {
$7zip = "C:\\Program files (x86)\\7-Zip\\7z.exe";
if( ! existfile( $7zip ) ) {
message "7-Zipのプログラム用ファイルが見つかりません。7-Zip
をインストールしてください。\n\n" +
"7-Zipは、C:\\Program files\\7-Zip またはC:\\Program
files (x86)\\7-Zip にインストールされてる必要があります。";
endmacro;
}
}
}
openreg "CURRENTUSER","Software\\Microsoft\\Windows\\CurrentVersion\\Exp
lorer\\Shell Folders";
$outfolder = getregstr("Personal");
closereg;
$outfolder = $outfolder + "\\PasswordZipTemp";
#fsobj = createobject("Scripting.FileSystemObject");
#folderobj = callmethod_returnobj(#fsobj, "GetFolder", $outfolder + "\\");
if( #folderobj != 0 ) {
#subfolderobj = getpropobj(#folderobj, "SubFolders");
if( #subfolderobj != 0 ) {
#onefolder = getcollection(#subfolderobj, 2);
while(1) {
#onefolder = getcollection(#subfolderobj);
if( #onefolder == 0 ) {
break;
}
$subfolder = member(#onefolder, "Name");
$path = $outfolder + "\\" + $subfolder;
//テストmessage $path;
runsync2 "cmd.exe /c rmdir /s /q \"" + $path + "\"";
}
}
}
#n = dllfunc("Bypass_CreateDirectory", $outfolder);
if( existfile( $outfolder + "\\*.*" ) ) {
runsync2 "cmd.exe /c del /f /s /q \"" + $outfolder + "\\*.*\"";
//古いファイルのゴミを削除
}
#n = dllfunc("Bypass_CreateDirectory", $outfolder);
if( $unzip != "" ) {
$command = "\"" + $unzip + "\"" + " -P\"" + $password + "\"" + " -d\
"" + $outfolder + "\" \"" + $zipfile + "\"";
} else {
$command = "\"" + $7zip + "\" x -p\"" + $password + "\"" + " -o\"" +
$outfolder + "\" \"" + $zipfile + "\"";
}
#homehidemaru = hidemaruhandle(0);
#n = dllfunc("NewMail");
#n = dllfunc("SwitchHeaderView", 0); //ヘッダ表示なし
gofiletop;
beginsel;
gofileend;
insert $command + "\n\n";
gofileend;
runex $command
, 1 //同期
, 0 //標準入力なし
, ""
, 5 //標準出力をカーソル位置へ挿入
, ""
, 5 //標準エラー出力もカーソル位置へ挿入
, ""
, 0 //作業フォルダ指定なし
, ""
, 1 //表示あり
, 0 //描画あり
, 0 //ANSIで受け取り
, 0x0001 //2021.05.18 拡張フラグで「%」をそのまま書けるようにする
;
if( !result ) {
message "unzip.exeまたは7zipの実行に失敗しました。プログラムからの出
力内容を確認してください。";
endmacro;
}
#exitcode = getresultex(9);
gofileend;
clearupdated;
if( #exitcode == 0 || #exitcode == 1 ) {
//終了コード 参照:
// 7zip ... https://sevenzip.osdn.jp/chm/cmdline/exit_codes.htm
// unzip.exe ... https://community.progress.com/s/article/What-does-Error-Code-mean-on-a-un-Zip-Advanced-Script-1307565966255
openbyshell $outfolder;
quit;
}
message "unzip.exeまたは7zipからエラーが返っていると思われます。出力結果
を確認してください。";
09771 22/06/07 18:11 さかみつ RE:09770 エディタ側でのマクロについて
ありがとうございます!!
2つの例で試してみました。
ともにバッチリです!
> もっとシンプルにしてみました。これでどうでしょうか。
> ......
> message "unzip.exeまたは7zipからエラーが返っていると思われます。出力結
>果を確認してください。";
09772 22/06/07 18:31 秀まるお2 RE:09771 エディタ側でのマクロについて
確認ありがとうございます。
・送っていただいた画面ハードコピーのメールは念のため完全削除しました。
・ライブラリの方も明日更新します。
09773 22/06/08 11:11 kurin メールエディタ(送信用)でのツールバー
いつもお世話になります。
メールエディタ(送信用)にマクロを登録し、それを「ツールバー詳細」にてツール
バーに表示させています。
メール本体のツールバーデザインでコマンド名を表示するとしておりますが、エディ
タ上のアイコンにはコマンド名(マクロのタイトル)ではなく、”マクロ1”と表示
されてしまいます。
ちなみにメール本体でのアイコンにはちゃんとコマンド名が表示されます。
色々と設定を探したのですが見つかりませんでした。
設定方法をご教示いただけないでしょうか。
よろしくお願いいたします。
09774 22/06/08 16:08 秀まるお2 RE:09773 メールエディタ(送信用)でのツ
テストしてみたら再現できましたが、条件があるようでした。
まず、「マクロ・マクロ登録...」の「エディタ側」の「秀丸エディタのマクロメ
ニューをそのまま出す」がONになってることと、「全般的な設定・ウィンドウ」の
「メニューバー表示」がOFFだとダメみたいです。
マクロ1〜マクロ10に登録されてるマクロ名をメニューから取得しようとして、メ
ニューが無くて失敗してるようでした。なんとか修正してみます。
もしかして上記条件と違ってるようでしたら、例えばどういう設定でも起きてるか
等教えてほしいです。
09775 22/06/09 07:03 勝ちゃん Gmailからのメール受信できない
おはようございます。
今朝Gmailからメールを受信しようとしたら以下のようなエラーとなりました。
確かGoogleから認証について厳しくなるようなことを見ましたがこの影響ですか。
pop3のPasswordは変更していませんがこのようになりました。
秀丸メール側またはGoogle側ではどのような設定が必要ですか?
■アカウント: xxxxxxxx@gmail.com でのエラー。
POP3用のパスワードが間違っているか、または認証に失敗しました。
エラー内容 = [AUTH] Username and password not accepted.
詳細の内容
開始時刻: 2022/06/09 06:52:09
****送信:xxxxxxxx@gmail.com
I 送信対象無し
****受信:xxxxxxxx@gmail.com (高速化ON)
I サーバーを検索中 - pop.gmail.com
I 接続中 - 142.250.157.108 (port=995,POP3)
I 接続完了
I SSL初期化中(TLS1.0/TLS1.1/TLS1.2)
I 暗号化開始 (TLS1.2/AES_128/128bit)
R +OK Gpop ready for requests from 110.67.119.222 j10mb113832336ioq
I ユーザーアカウントを送信
S USER xxxxxxxx@gmail.com
I パスワードを送信
S PASS ****
R +OK send PASS
R -ERR [AUTH] Username and password not accepted.
E POP3用のパスワードが間違っているか、または認証に失敗しました。
エラー内容 = [AUTH] Username and password not accepted.
終了時刻: 2022/06/09 06:52:13
---以下の内容はコミュニテックス会議室システムにより付加されました。
本文中のメールアドレスは伏せ字に変換されました。伏せ字にしたくない場合
はメールアドレスを""で囲んで書き込んでください。
09776 22/06/09 07:24 陸 RE:09775 Gmailからのメール受信できない
こんにちは、1ユーザーの陸といいます。
秀丸メールのアカウント毎の設定でOAuthを利用するように変更すればよいかと思
います。
1.対象のGmailアカウントを右クリックして、「プロパティ(アカウント毎の設
定)」をクリックする。
2.設定の一覧のツリーから「メールサーバー」を選択する。
3.表示された画面の「OAuth認証」にチェックをつけ、その横がGoogleになってい
ることを確認し、「OAuthログイン」をクリックする。
4.指示に従ってアプリケーションの認証を行う。
これでどうでしょうか。
参考になれば幸いです。
それでは。
09777 22/06/09 08:51 秀まるお2 RE:09776 Gmailからのメール受信できない
補足ですが、秀丸メールのバージョンが古いとダメで、古い場合は最新版をインス
トールしてもらわないとダメです。
詳しい説明:
https://hide.maruo.co.jp/news/gmail20211224.html
09778 22/06/09 09:55 kurin RE:09774 メールエディタ(送信用)でのツ
ご回答ありがとうございます。
現在の設定ですが、「秀丸エディタのマクロメニューをそのまま出す」、「メニュー
バー表示」ともにONの状態です。
使用している秀丸メールは「7.12β11」になります。
よろしくお願いします。
09779 22/06/09 10:18 秀まるお2 RE:09778 メールエディタ(送信用)でのツ
僕の所だと「メニューバー表示」がONだと再現しないみたいです。
とりあえず、今日中にVersion 7.12の正式版をアップロードしますので、それに入
れ替えて直るかどうか試してみてほしいです。それでもし直ってないようでしたら、
また連絡お願いしたいです。今現在のツールバーの表示の「マクロ1」が半角カナに
なってるなら、一応V7.12正式版で直るはずだと思います。
それと、Version 7.11(7.12βも含む)で仮に正しく表示されたとすると、例えば
マクロのタイトルが「タイトル」だったとすると、ツールバーの表示は
タイトル(秀丸エディタ側)
のようになってました。これを、V7.12正式版では「秀丸エディタ側」の表記は無
しで、タイトルのみ表示にします。
09780 22/06/09 11:18 秀まるお2 Version 7.12正式版など
秀丸メールのVersion 7.12の正式版をアップロードしました。いちいちさんから連
絡いただいたバグがちょっとまずいので、一回正式版としてアップロードしました。
32bit版:
https://hide.maruo.co.jp/software/bin/hmmail712_signed.exe
64bit版:
https://hide.maruo.co.jp/software/bin/hmmail712_x64_signed.exe
HTMLメール編集アドインも正式版にしました。HTMLメール編集をON/OFF切り替えで
カーソル位置が可能な限りキープされるようにしています。
32bit/64bit版共通:
https://hide.maruo.co.jp/software/bin/hmmhtmle158_signed.exe
HTMLメールViewerを正式版にしました。Edgeブラウザエンジン時に検索コマンドが
効かないバグ修正だけしています。
32bit/64bit版共通:
https://hide.maruo.co.jp/software/bin/hmmhtmlv408_signed.exe
HTMLメール編集でのカーソル位置関係はまだ問題のあるケースもあるので、またぼ
ちぼち修正する予定です。
よろしくお願いします。
09781 22/06/09 11:51 陸 RE:09780 Version 7.12正式版など
お世話になります。
ものすごく細かいことですが、一応報告です。
HTMLメール編集アドインのインストーラですが、インストールダイアログのタイト
ルが「HTMLメールViewer for 秀丸メール」になっているようです。
手元にあるインストーラを実行して調べてみたところ、V1.50あたりからおかしい
ようです。
インストール自体には問題ないと思います。
ご確認いただけると幸いです。
それでは。
09782 22/06/09 12:28 勝ちゃん RE:09777 Gmailからのメール受信できない
> 補足ですが、秀丸メールのバージョンが古いとダメで、古い場合は最新版をイン
>ストールしてもらわないとダメです。
>
> 詳しい説明:
> https://hide.maruo.co.jp/news/gmail20211224.html
陸さまのご指示成功しました。
因みにVersionはV7.12b11x64で使用しています。
有難うございました。
09783 22/06/09 12:40 さかみつ RE:09772 エディタ側でのマクロについて
なんどもすみません。
パスワードを選択した状態でマクロ実行するとうまく動かないようです。
"C:\Program Files (x86)\GnuWin32\bin\unzip.exe" -P"" **以下省略**
error: must give decryption password with -P option
とパスワードが入っていないようです。
ちなみに、先ほど以下のような新しいパターンでパスワードの通知があり、
パスワードという言葉がないので"abc0609"を選択してマクロ実行したところ
うまく動かないことがわかりました。
--
先ほどのファイルには「abc0609」を
ご利用くださいませ。
--
ちなみに、掲示していただいた一つ前のバージョンでは選択しての解答は
うまくいきました。
なんどもすみません。よろしくおねがいいたします。
> 確認ありがとうございます。
>
> ・送っていただいた画面ハードコピーのメールは念のため完全削除しました。
> ・ライブラリの方も明日更新します。
09784 22/06/09 14:00 さかみつ RE:09783 エディタ側でのマクロについて
誤解のないように付け加えます。
さきのようなパスワードの連絡はパスワードという文字が入っていないので
自動でパスワード部分を検出するのは難しいと思っています。
なので、うまく動かないということについては、パスワード部分を選択した
のにunzipにパスワードが引継がれていないという部分になります。
よろしくおねがいいたします。
>なんどもすみません。
> ......
>> ・ライブラリの方も明日更新します。
09785 22/06/09 14:44 秀まるお2 RE:09784 エディタ側でのマクロについて
範囲選択の処理ですが、すみませんが抜けてしまってました。
それと、「abc0000」みたいな「」で囲むの書き方についても対応できました。
あと、ライブラリにアップロードしようと思ってて忘れてました。けがの功名じゃ
ないですが、どっちにしてもまた直すことになったのでアップロード忘れて良かった
気もします。
マクロは以下のような感じになりました。すみませんがまた動作確認お願いします。
さらにはこれでもまだダメなパターンがあったとしても、とにかくヒットしまくるよ
うな対応をすれば対応できそうな気がするので、また面倒なケースがあったら連絡く
ださい。
----------------------------------------------------------------
//暗号化Zipの自動解凍 PasswordZipExtract.mac
// 2019.02.12
// 2019.03.07 Version 1.1 パスワードの形式追加。
// 2019.03.12 Version 1.2 パスワードの形式さらに追加。
// 2021.04.26 Version 1.3
// 7-Zipの代わりにunzip.exeでも解凍できるようにした。
// パスワードの形式にもっといろいろ追加。&、複数候補あった場合は
メニュー表示するようにした。
// 2021.05.10 Version 1.4 さらに形式追加。11〜12
// unzip.exeまたは7zip.exeの終了コードを見て、成功してる場合は結
果表示しないようにした。
// 2021.05.11 Version 1.5 PasswordZipTempフォルダにサブフォルダのゴミが残る
バグ修正。
// 2021.05.13 Version 1.6 メール本文にユニコード文字(Shift-JIS範囲外の文
字)があるとパスワードがおかしくなるバグ修正。
// 2021.05.18 Version 1.7 パスワードの中に「%」があると失敗するバグ修正。
// 2021.06.04 Version 1.8 新しいパスワード形式対応。
// 2022.06.06 Version 1.9 固定の形式になってない所からなんとかパスワードを
抽出する対応。
// パスワードを範囲選択してから実行してもいいように
する。
//
// by 秀まるお
// hidesoft.8:04704| 暗号化zip自動解凍マクロ
//
//
//説明:
// このマクロはパスワード付きzipの添付ファイルを簡単に解凍する用のマクロです。
// パスワード付きzipの添付ファイル入りメールは、そのメールとは別便でパスワード
// を通知してきます。このマクロはその別便メールの中からパスワードを取り出して、
// 自動で解凍します。
//
// マクロを実行する前に、zip添付ファイル付きのメールとパスワード通知メールの
// 2通を選択して実行する必要があります。
//解凍したファイルは「ドキュメント」フォルダ配下のPasswordZipTempフォルダに
// 作成されます。古いファイルが残ってる場合はマクロ実行のタイミングで削除され
// てから解凍されます。
//
// unzip.exeのダウンロード場所: http://gnuwin32.sourceforge.net/packages/unzip.htm
// 7-Zipのダウンロード場所: https://sevenzip.osdn.jp/
loaddll "tkinfo.dll";
// 秀丸メールの検索パック復元予約
#n = dllfunc("AutoRestoreFindPack");
// 秀丸エディタの検索条件復元予約
setcompatiblemode 0x00020000;
#n = dllfunc("SetJapaneseCodePageMode", 1);
#n = dllfunc("SelectedMailCount");
if( #n != 2 ) {
message "このマクロは暗号化zip付きメールと、その解凍用パスワード通知
メールの2通を選択した状態で実行してください。";
endmacro;
}
$selectedtext = "";
if( selecting ) {
$selectedtext = gettext( seltopx, seltopy, selendx, selendy, 1 );
}
//対象のzipとパスワードを取り出す。
$zipfile = "";
$password = "";
#n = dllfunc("LockSelection");
while(1) {
#n = dllfunc("EnumSelection", 1);
if( #n == 0 ) {
break;
}
#foundzip = 0;
if( $zipfile == "" ) {
#count = dllfunc("CountCurrentHeader", "X-Attach");
if( #count != 0 ) {
#i = 0;
while( #i < #count ) {
$attach = dllfuncstr("CurrentHeader2", "X-Attach", #i);
$ext = dllfuncstr("ToLower", rightstr( $attach, 4 ) );
if( $ext == ".zip" ) {
$zipfile = dllfuncstr("HomeDir") + dllfuncstr("Curre
ntAccount") + "\\" + $attach;
#foundzip = 1;
break;
}
#i = #i + 1;
}
}
}
if( $password == "" && #foundzip == 0 ) {
$text = gettext( 0, 0, 999, linecount ); //メール本文全部
loaddll "HmJre.dll";
#n = dllfunc("SetUnicodeIndexAutoConvert", 1); //V1.6 バグ修正
$text = dllfuncstr("ReplaceRegularNoCaseSense", "[\\r\\n]+", $te
xt, 0, " ", 2);
//改行を空白に変換しておく。
$text = dllfuncstr("ReplaceRegularNoCaseSense", " +", $text, 0,
" ", 2);
//全角空白を半角空白に変換しておく。
$text = $text + " "; //末端に空白を付けておく。
$pattern[0] = " 【パスワード】 *[::]? *([^ \x81\x40-\xFC\xFF]
+?) ";
$pattern[1] = " 解凍パスワード *[::]? *([^ \x81\x40-\xFC\xFF]
+?) ";
$pattern[2] = " Password *: *([^ \x81\x40-\xFC\xFF]+?) ";
$pattern[3] = " \\[パスワード/Password\\] *([^ \x81\x40-\xFC\xF
F]+?) ";
$pattern[4] = " 【暗号化パスワード\\(password\\)】 *([^ \x81\x40
-\xFC\xFF]+?) ";
$pattern[5] = " パスワードは「([^ \x81\x40-\xFC\xFF]+?)」";
$pattern[6] = " 解凍パスワード +([^ \x81\x40-\xFC\xFF]+?) ";
$pattern[7] = " パスワード *[::] *([^ \x81\x40-\xFC\xFF]+?) ";
$pattern[8] = " 添付ファイルパスワード *[::]? *([^ \x81\x40-\xF
C\xFF]+?) ";
$pattern[9] = " \\[(?:パスワード|Password)\\] *([^ \x81\x40-\xFC
\xFF]+?) ";
$pattern[10] = " パスワード *\\(Password\\) *[::]? *([^ \x81\x4
0-\xFC\xFF]+?) ";
$pattern[11] = " \\[password information\\] *([^ \x81\x40-\xFC\x
FF]+?) ";
$pattern[12] = " パスワード[ ]*([0-9]+桁) *[::]? *([^ \x81\
x40-\xFC\xFF]+?) ";
$pattern[13] = " パスワード[ ]*\\([0-9]+桁\\) *[::]? *([^ \x8
1\x40-\xFC\xFF]+?) ";
$pattern[14] = " PASSWORD for .{1,255} is below: +([^ \x81\x40-\
xFC\xFF]+?) ";
#NeedConfirmIndex = 15; //これ以降のパターンについては確認メ
ッセージを出す。
$pattern[15] = "パスワード[^ ]*? +([!-~]{4,20}) ";
//V1.9寛容性が一番高い。「パスワード」って文字列
があってその後パスワードが別行になってる。
$pattern[16] = "「+([!-~]{4,20})」";
//V1.9「」で囲んだ中にパスワードらしき文字列があ
る場合対応。
#iPattern = 0;
#cPassword = 0;
while(1) {
$pattern = $pattern[#iPattern];
if( $pattern == "" ) {
break;
}
//2021.04.28 新しい方式
#x = 0;
while(1) {
#x = dllfunc("FindRegularNoCaseSense", $pattern, $text,
#x );
if( #x >= 0 ) {
Label_EnterHit: ;
$hit = midstr( $text, #x, dllfunc("GetLastMatchLengt
h") );
#tag1 = dllfunc("GetLastMatchTagPosition", 1);
#tag1len = dllfunc("GetLastMatchTagLength", 1);
$pass = midstr( $text, #tag1, #tag1len );
//message $hit + "\n" + $pass;
if( strlen($pass) >= 4 ) { //4文字以上でないと
ダメ。
//同じパスワードがあれば追加しない。
#iFindPass = 0;
while( #iFindPass < #cPassword ) {
if( $password[#iFindPass+1] == $pass ) {
//スキップ
goto Label_SkipAddPass;
}
#iFindPass = #iFindPass + 1;
}
$password[#cPassword+1] = $pass; //注意:
+1した所にセットする。
$whole[#cPassword+1] = $hit + "\t" + $pass;
//注意: +1した所にセットする。
#cPassword = #cPassword + 1;
if( #cPassword == 1 && #iPattern >= #NeedConfirm
Index ) {
#ConfirmPassword = 1;
}
Label_SkipAddPass:
}
#x = #x + 1;
} else {
break;
}
}
#iPattern = #iPattern + 1;
}
loaddll "tkinfo.dll"; //元に戻す。
}
}
#n = dllfunc("UnlockSelection", 1);
if( $zipfile == "" ) {
message "zip形式ファイルが見つかりませんでした。";
endmacro;
}
//V1.9 作ったけど没
// if( #cPassword == 0 ) {
// ...中身削除。
// }
if( $selectedtext != "" ) {
$password[#cPassword+1] = $selectedtext; //注意: +1した所にセ
ットする。
$whole[#cPassword+1] = "(範囲選択した文字列)" + "\t" + $selectedtex
t; //注意: +1した所にセットする。
#cPassword = #cPassword + 1;
#ConfirmPassword = 1;
}
if( #cPassword > 1 ) {
$whole[0] = "パスワードの候補が複数見つかりました。どれを使うか選択
してください。";
menuarray $whole, #cPassword + 1;
if( result <= 1 ) {
message "メールを2通選択して、さらにパスワードの文字列をメール
内容枠中で選択してからマクロ実行すれば、その文字列をパスワードとして解凍しま
す。";
endmacro;
}
$password = $password[result-1]; //result == 1の時に$password
[1]を選択する。
} else {
$password = $password[1];
if( #ConfirmPassword == 1 ) {
question "パスワードは「" + $password + "」でいいですか?";
if( result != yes ) {
message "メールを2通選択して、さらにパスワードの文字列を
メール内容枠中で選択してからマクロ実行すれば、その文字列をパスワードとして解
凍します。";
endmacro;
}
}
}
Label_PasswordDetermined: ;
if( strstr( $password, "\"" ) >= 0 ) {
message "パスワードの中にダブルクォーテーションの文字が含まれてます。
このマクロではダブルクォーテーション入りのパスワードで解凍することは出来ませ
ん。手作業で解凍お願いします。";
endmacro;
}
//2021.04.26 unzip.exeがあればそっちを使う。
// http://gnuwin32.sourceforge.net/packages/unzip.htm
//
$unzip = "C:\\Program Files\\GnuWin32\\bin\\unzip.exe";
if( ! existfile( $unzip ) ) {
$unzip = "C:\\Program Files (x86)\\GnuWin32\\bin\\unzip.exe";
if( ! existfile( $unzip ) ) {
$unzip = "";
}
}
if( $unzip == "" ) {
$7zip = "C:\\Program files\\7-Zip\\7z.exe";
if( ! existfile( $7zip ) ) {
$7zip = "C:\\Program files (x86)\\7-Zip\\7z.exe";
if( ! existfile( $7zip ) ) {
message "7-Zipのプログラム用ファイルが見つかりません。7-Zip
をインストールしてください。\n\n" +
"7-Zipは、C:\\Program files\\7-Zip またはC:\\Program
files (x86)\\7-Zip にインストールされてる必要があります。";
endmacro;
}
}
}
openreg "CURRENTUSER","Software\\Microsoft\\Windows\\CurrentVersion\\Exp
lorer\\Shell Folders";
$outfolder = getregstr("Personal");
closereg;
$outfolder = $outfolder + "\\PasswordZipTemp";
#fsobj = createobject("Scripting.FileSystemObject");
#folderobj = callmethod_returnobj(#fsobj, "GetFolder", $outfolder + "\\");
if( #folderobj != 0 ) {
#subfolderobj = getpropobj(#folderobj, "SubFolders");
if( #subfolderobj != 0 ) {
#onefolder = getcollection(#subfolderobj, 2);
while(1) {
#onefolder = getcollection(#subfolderobj);
if( #onefolder == 0 ) {
break;
}
$subfolder = member(#onefolder, "Name");
$path = $outfolder + "\\" + $subfolder;
//テストmessage $path;
runsync2 "cmd.exe /c rmdir /s /q \"" + $path + "\"";
}
}
}
#n = dllfunc("Bypass_CreateDirectory", $outfolder);
if( existfile( $outfolder + "\\*.*" ) ) {
runsync2 "cmd.exe /c del /f /s /q \"" + $outfolder + "\\*.*\"";
//古いファイルのゴミを削除
}
#n = dllfunc("Bypass_CreateDirectory", $outfolder);
if( $unzip != "" ) {
$command = "\"" + $unzip + "\"" + " -P\"" + $password + "\"" + " -d\
"" + $outfolder + "\" \"" + $zipfile + "\"";
} else {
$command = "\"" + $7zip + "\" x -p\"" + $password + "\"" + " -o\"" +
$outfolder + "\" \"" + $zipfile + "\"";
}
#homehidemaru = hidemaruhandle(0);
#n = dllfunc("NewMail");
#n = dllfunc("SwitchHeaderView", 0); //ヘッダ表示なし
gofiletop;
beginsel;
gofileend;
insert $command + "\n\n";
gofileend;
runex $command
, 1 //同期
, 0 //標準入力なし
, ""
, 5 //標準出力をカーソル位置へ挿入
, ""
, 5 //標準エラー出力もカーソル位置へ挿入
, ""
, 0 //作業フォルダ指定なし
, ""
, 1 //表示あり
, 0 //描画あり
, 0 //ANSIで受け取り
, 0x0001 //2021.05.18 拡張フラグで「%」をそのまま書けるようにする
;
if( !result ) {
message "unzip.exeまたは7zipの実行に失敗しました。プログラムからの出
力内容を確認してください。";
endmacro;
}
#exitcode = getresultex(9);
gofileend;
clearupdated;
if( #exitcode == 0 || #exitcode == 1 ) {
//終了コード 参照:
// 7zip ... https://sevenzip.osdn.jp/chm/cmdline/exit_codes.htm
// unzip.exe ... https://community.progress.com/s/article/What-does-Error-Code-mean-on-a-un-Zip-Advanced-Script-1307565966255
openbyshell $outfolder;
quit;
}
message "unzip.exeまたは7zipからエラーが返っていると思われます。出力結果
を確認してください。";
09786 22/06/09 14:50 秀まるお2 RE:09785 エディタ側でのマクロについて
すみません。パスワードが見つからない時にエラーメッセージ表示する処理も抜け
てました。こっちでお願いします。
--------------------------------------------------------------
//暗号化Zipの自動解凍 PasswordZipExtract.mac
// 2019.02.12
// 2019.03.07 Version 1.1 パスワードの形式追加。
// 2019.03.12 Version 1.2 パスワードの形式さらに追加。
// 2021.04.26 Version 1.3
// 7-Zipの代わりにunzip.exeでも解凍できるようにした。
// パスワードの形式にもっといろいろ追加。&、複数候補あった場合は
メニュー表示するようにした。
// 2021.05.10 Version 1.4 さらに形式追加。11〜12
// unzip.exeまたは7zip.exeの終了コードを見て、成功してる場合は結
果表示しないようにした。
// 2021.05.11 Version 1.5 PasswordZipTempフォルダにサブフォルダのゴミが残る
バグ修正。
// 2021.05.13 Version 1.6 メール本文にユニコード文字(Shift-JIS範囲外の文
字)があるとパスワードがおかしくなるバグ修正。
// 2021.05.18 Version 1.7 パスワードの中に「%」があると失敗するバグ修正。
// 2021.06.04 Version 1.8 新しいパスワード形式対応。
// 2022.06.06 Version 1.9 固定の形式になってない所からなんとかパスワードを
抽出する対応。
// パスワードを範囲選択してから実行してもいいように
する。
//
// by 秀まるお
// hidesoft.8:04704| 暗号化zip自動解凍マクロ
//
//
//説明:
// このマクロはパスワード付きzipの添付ファイルを簡単に解凍する用のマクロです。
// パスワード付きzipの添付ファイル入りメールは、そのメールとは別便でパスワード
// を通知してきます。このマクロはその別便メールの中からパスワードを取り出して、
// 自動で解凍します。
//
// マクロを実行する前に、zip添付ファイル付きのメールとパスワード通知メールの
// 2通を選択して実行する必要があります。
//解凍したファイルは「ドキュメント」フォルダ配下のPasswordZipTempフォルダに
// 作成されます。古いファイルが残ってる場合はマクロ実行のタイミングで削除され
// てから解凍されます。
//
// unzip.exeのダウンロード場所: http://gnuwin32.sourceforge.net/packages/unzip.htm
// 7-Zipのダウンロード場所: https://sevenzip.osdn.jp/
loaddll "tkinfo.dll";
// 秀丸メールの検索パック復元予約
#n = dllfunc("AutoRestoreFindPack");
// 秀丸エディタの検索条件復元予約
setcompatiblemode 0x00020000;
#n = dllfunc("SetJapaneseCodePageMode", 1);
#n = dllfunc("SelectedMailCount");
if( #n != 2 ) {
message "このマクロは暗号化zip付きメールと、その解凍用パスワード通知
メールの2通を選択した状態で実行してください。";
endmacro;
}
$selectedtext = "";
if( selecting ) {
$selectedtext = gettext( seltopx, seltopy, selendx, selendy, 1 );
}
//対象のzipとパスワードを取り出す。
$zipfile = "";
$password = "";
#n = dllfunc("LockSelection");
while(1) {
#n = dllfunc("EnumSelection", 1);
if( #n == 0 ) {
break;
}
#foundzip = 0;
if( $zipfile == "" ) {
#count = dllfunc("CountCurrentHeader", "X-Attach");
if( #count != 0 ) {
#i = 0;
while( #i < #count ) {
$attach = dllfuncstr("CurrentHeader2", "X-Attach", #i);
$ext = dllfuncstr("ToLower", rightstr( $attach, 4 ) );
if( $ext == ".zip" ) {
$zipfile = dllfuncstr("HomeDir") + dllfuncstr("Curre
ntAccount") + "\\" + $attach;
#foundzip = 1;
break;
}
#i = #i + 1;
}
}
}
if( $password == "" && #foundzip == 0 ) {
$text = gettext( 0, 0, 999, linecount ); //メール本文全部
loaddll "HmJre.dll";
#n = dllfunc("SetUnicodeIndexAutoConvert", 1); //V1.6 バグ修正
$text = dllfuncstr("ReplaceRegularNoCaseSense", "[\\r\\n]+", $te
xt, 0, " ", 2);
//改行を空白に変換しておく。
$text = dllfuncstr("ReplaceRegularNoCaseSense", " +", $text, 0,
" ", 2);
//全角空白を半角空白に変換しておく。
$text = $text + " "; //末端に空白を付けておく。
$pattern[0] = " 【パスワード】 *[::]? *([^ \x81\x40-\xFC\xFF]
+?) ";
$pattern[1] = " 解凍パスワード *[::]? *([^ \x81\x40-\xFC\xFF]
+?) ";
$pattern[2] = " Password *: *([^ \x81\x40-\xFC\xFF]+?) ";
$pattern[3] = " \\[パスワード/Password\\] *([^ \x81\x40-\xFC\xF
F]+?) ";
$pattern[4] = " 【暗号化パスワード\\(password\\)】 *([^ \x81\x40
-\xFC\xFF]+?) ";
$pattern[5] = " パスワードは「([^ \x81\x40-\xFC\xFF]+?)」";
$pattern[6] = " 解凍パスワード +([^ \x81\x40-\xFC\xFF]+?) ";
$pattern[7] = " パスワード *[::] *([^ \x81\x40-\xFC\xFF]+?) ";
$pattern[8] = " 添付ファイルパスワード *[::]? *([^ \x81\x40-\xF
C\xFF]+?) ";
$pattern[9] = " \\[(?:パスワード|Password)\\] *([^ \x81\x40-\xFC
\xFF]+?) ";
$pattern[10] = " パスワード *\\(Password\\) *[::]? *([^ \x81\x4
0-\xFC\xFF]+?) ";
$pattern[11] = " \\[password information\\] *([^ \x81\x40-\xFC\x
FF]+?) ";
$pattern[12] = " パスワード[ ]*([0-9]+桁) *[::]? *([^ \x81\
x40-\xFC\xFF]+?) ";
$pattern[13] = " パスワード[ ]*\\([0-9]+桁\\) *[::]? *([^ \x8
1\x40-\xFC\xFF]+?) ";
$pattern[14] = " PASSWORD for .{1,255} is below: +([^ \x81\x40-\
xFC\xFF]+?) ";
#NeedConfirmIndex = 15; //これ以降のパターンについては確認メ
ッセージを出す。
$pattern[15] = "パスワード[^ ]*? +([!-~]{4,20}) ";
//V1.9寛容性が一番高い。「パスワード」って文字列
があってその後パスワードが別行になってる。
$pattern[16] = "「+([!-~]{4,20})」";
//V1.9「」で囲んだ中にパスワードらしき文字列があ
る場合対応。
#iPattern = 0;
#cPassword = 0;
while(1) {
$pattern = $pattern[#iPattern];
if( $pattern == "" ) {
break;
}
//2021.04.28 新しい方式
#x = 0;
while(1) {
#x = dllfunc("FindRegularNoCaseSense", $pattern, $text,
#x );
if( #x >= 0 ) {
Label_EnterHit: ;
$hit = midstr( $text, #x, dllfunc("GetLastMatchLengt
h") );
#tag1 = dllfunc("GetLastMatchTagPosition", 1);
#tag1len = dllfunc("GetLastMatchTagLength", 1);
$pass = midstr( $text, #tag1, #tag1len );
//message $hit + "\n" + $pass;
if( strlen($pass) >= 4 ) { //4文字以上でないと
ダメ。
//同じパスワードがあれば追加しない。
#iFindPass = 0;
while( #iFindPass < #cPassword ) {
if( $password[#iFindPass+1] == $pass ) {
//スキップ
goto Label_SkipAddPass;
}
#iFindPass = #iFindPass + 1;
}
$password[#cPassword+1] = $pass; //注意:
+1した所にセットする。
$whole[#cPassword+1] = $hit + "\t" + $pass;
//注意: +1した所にセットする。
#cPassword = #cPassword + 1;
if( #cPassword == 1 && #iPattern >= #NeedConfirm
Index ) {
#ConfirmPassword = 1;
}
Label_SkipAddPass:
}
#x = #x + 1;
} else {
break;
}
}
#iPattern = #iPattern + 1;
}
loaddll "tkinfo.dll"; //元に戻す。
}
}
#n = dllfunc("UnlockSelection", 1);
if( $zipfile == "" ) {
message "zip形式ファイルが見つかりませんでした。";
endmacro;
}
//V1.9 作ったけど没
// if( #cPassword == 0 ) {
// ...中身削除。
// }
if( $selectedtext != "" ) {
$password[#cPassword+1] = $selectedtext; //注意: +1した所にセ
ットする。
$whole[#cPassword+1] = "(範囲選択した文字列)" + "\t" + $selectedtex
t; //注意: +1した所にセットする。
#cPassword = #cPassword + 1;
#ConfirmPassword = 1;
}
if( #cPassword == 0 ) {
message "パスワードが不明です。\n\nメールを2通選択して、さらにパス
ワードの文字列をメール内容枠中で選択してからマクロ実行すれば、その文字列をパ
スワードとして解凍します。";
endmacro;
}
if( #cPassword > 1 ) {
$whole[0] = "パスワードの候補が複数見つかりました。どれを使うか選択
してください。";
menuarray $whole, #cPassword + 1;
if( result <= 1 ) {
message "メールを2通選択して、さらにパスワードの文字列をメール
内容枠中で選択してからマクロ実行すれば、その文字列をパスワードとして解凍しま
す。";
endmacro;
}
$password = $password[result-1]; //result == 1の時に$password
[1]を選択する。
} else {
$password = $password[1];
if( #ConfirmPassword == 1 ) {
question "パスワードは「" + $password + "」でいいですか?";
if( result != yes ) {
message "メールを2通選択して、さらにパスワードの文字列を
メール内容枠中で選択してからマクロ実行すれば、その文字列をパスワードとして解
凍します。";
endmacro;
}
}
}
Label_PasswordDetermined: ;
if( strstr( $password, "\"" ) >= 0 ) {
message "パスワードの中にダブルクォーテーションの文字が含まれてます。
このマクロではダブルクォーテーション入りのパスワードで解凍することは出来ませ
ん。手作業で解凍お願いします。";
endmacro;
}
//2021.04.26 unzip.exeがあればそっちを使う。
// http://gnuwin32.sourceforge.net/packages/unzip.htm
//
$unzip = "C:\\Program Files\\GnuWin32\\bin\\unzip.exe";
if( ! existfile( $unzip ) ) {
$unzip = "C:\\Program Files (x86)\\GnuWin32\\bin\\unzip.exe";
if( ! existfile( $unzip ) ) {
$unzip = "";
}
}
if( $unzip == "" ) {
$7zip = "C:\\Program files\\7-Zip\\7z.exe";
if( ! existfile( $7zip ) ) {
$7zip = "C:\\Program files (x86)\\7-Zip\\7z.exe";
if( ! existfile( $7zip ) ) {
message "7-Zipのプログラム用ファイルが見つかりません。7-Zip
をインストールしてください。\n\n" +
"7-Zipは、C:\\Program files\\7-Zip またはC:\\Program
files (x86)\\7-Zip にインストールされてる必要があります。";
endmacro;
}
}
}
openreg "CURRENTUSER","Software\\Microsoft\\Windows\\CurrentVersion\\Exp
lorer\\Shell Folders";
$outfolder = getregstr("Personal");
closereg;
$outfolder = $outfolder + "\\PasswordZipTemp";
#fsobj = createobject("Scripting.FileSystemObject");
#folderobj = callmethod_returnobj(#fsobj, "GetFolder", $outfolder + "\\");
if( #folderobj != 0 ) {
#subfolderobj = getpropobj(#folderobj, "SubFolders");
if( #subfolderobj != 0 ) {
#onefolder = getcollection(#subfolderobj, 2);
while(1) {
#onefolder = getcollection(#subfolderobj);
if( #onefolder == 0 ) {
break;
}
$subfolder = member(#onefolder, "Name");
$path = $outfolder + "\\" + $subfolder;
//テストmessage $path;
runsync2 "cmd.exe /c rmdir /s /q \"" + $path + "\"";
}
}
}
#n = dllfunc("Bypass_CreateDirectory", $outfolder);
if( existfile( $outfolder + "\\*.*" ) ) {
runsync2 "cmd.exe /c del /f /s /q \"" + $outfolder + "\\*.*\"";
//古いファイルのゴミを削除
}
#n = dllfunc("Bypass_CreateDirectory", $outfolder);
if( $unzip != "" ) {
$command = "\"" + $unzip + "\"" + " -P\"" + $password + "\"" + " -d\
"" + $outfolder + "\" \"" + $zipfile + "\"";
} else {
$command = "\"" + $7zip + "\" x -p\"" + $password + "\"" + " -o\"" +
$outfolder + "\" \"" + $zipfile + "\"";
}
#homehidemaru = hidemaruhandle(0);
#n = dllfunc("NewMail");
#n = dllfunc("SwitchHeaderView", 0); //ヘッダ表示なし
gofiletop;
beginsel;
gofileend;
insert $command + "\n\n";
gofileend;
runex $command
, 1 //同期
, 0 //標準入力なし
, ""
, 5 //標準出力をカーソル位置へ挿入
, ""
, 5 //標準エラー出力もカーソル位置へ挿入
, ""
, 0 //作業フォルダ指定なし
, ""
, 1 //表示あり
, 0 //描画あり
, 0 //ANSIで受け取り
, 0x0001 //2021.05.18 拡張フラグで「%」をそのまま書けるようにする
;
if( !result ) {
message "unzip.exeまたは7zipの実行に失敗しました。プログラムからの出
力内容を確認してください。";
endmacro;
}
#exitcode = getresultex(9);
gofileend;
clearupdated;
if( #exitcode == 0 || #exitcode == 1 ) {
//終了コード 参照:
// 7zip ... https://sevenzip.osdn.jp/chm/cmdline/exit_codes.htm
// unzip.exe ... https://community.progress.com/s/article/What-does-Error-Code-mean-on-a-un-Zip-Advanced-Script-1307565966255
openbyshell $outfolder;
quit;
}
message "unzip.exeまたは7zipからエラーが返っていると思われます。出力結果
を確認してください。";
09787 22/06/09 14:53 kurin (発言者削除)
09788 22/06/09 14:55 kurin RE:09779 メールエディタ(送信用)でのツ
今、7.12(64bit版)をインストールして確認しました。
結果はNGです。
「メニューバーの表示」はONでもOFFでも変わりません。
エディタ側のアイコンの文字は小さく「マクロ1」と表示されます。半角カナのよう
な気がします。
「マクロ登録」で「秀丸メール側で指定する」も試しましたが駄目でした。
さらに、マクロ登録から登録を削除してもマクロ1のアイコンが残ったままです。
この状態(マクロ1を削除)でマクロ2を登録しても、アイコンはマクロ1のみとなっ
ています。
09789 22/06/09 15:00 kurin RE:09788 メールエディタ(送信用)でのツ
すみません、マクロ1が表示されたままだったり、マクロ2が表示されなかったのは
「ツールバー詳細」を更新していなかったせいです。
お騒がせしました。
タイトル表示は、マウロ2に登録しても「マクロ2」と表示されます。
09790 22/06/09 15:03 秀まるお2 RE:09781 Version 7.12正式版など
たしかにいつぞやのバージョンからタイトルその他、「Viewer」になってしまって
ました。まったく気づきませんでした。
たぶんHTMLメールViewer側のインストーラーの修正をHTMLメール編集アドイン側に
反映しようとして、コピペミスしたんだと思います。
また次のバーションで修正させていただきます。
09791 22/06/09 15:12 さかみつ RE:09786 エディタ側でのマクロについて
何度もありがとうございます。
試してみました。
一応動くのですがパタン2はちょっと違うかなという感じです。
<パタン1>
以下や過去のパスワード記載メールをメール2通選択してマクロ実行すると
無事回答できました。
--
先ほどのファイルには「abc0609」を
ご利用くださいませ。
--
<パタン2>
パタン1での解答が可能な状態で、パスワード部分を選択してマクロ実行すると
「パスワードの候補が複数見つかりました」で自動的に解析されたパスワードと
意図的に選択したパスワードの両者がでてしまいました。
意図的に選択した場合にも複数発見時の処理がかぶっているようです。
> すみません。パスワードが見つからない時にエラーメッセージ表示する処理も抜
>けてました。こっちでお願いします。
> ......
> message "unzip.exeまたは7zipからエラーが返っていると思われます。出力結
>果を確認してください。";
09792 22/06/09 15:32 秀まるお2 RE:09791 エディタ側でのマクロについて
まいどどうもです。
範囲選択して実行した場合の重複チェックは、分かってはいましたが手抜きしまし
た。そもそも重複チェックも面倒なことしてたので、もっと簡単なのに直しました。
これでお願いします。
----------------------------------------------------------------------------
--------------------------
//暗号化Zipの自動解凍 PasswordZipExtract.mac
// 2019.02.12
// 2019.03.07 Version 1.1 パスワードの形式追加。
// 2019.03.12 Version 1.2 パスワードの形式さらに追加。
// 2021.04.26 Version 1.3
// 7-Zipの代わりにunzip.exeでも解凍できるようにした。
// パスワードの形式にもっといろいろ追加。&、複数候補あった場合は
メニュー表示するようにした。
// 2021.05.10 Version 1.4 さらに形式追加。11〜12
// unzip.exeまたは7zip.exeの終了コードを見て、成功してる場合は結
果表示しないようにした。
// 2021.05.11 Version 1.5 PasswordZipTempフォルダにサブフォルダのゴミが残る
バグ修正。
// 2021.05.13 Version 1.6 メール本文にユニコード文字(Shift-JIS範囲外の文
字)があるとパスワードがおかしくなるバグ修正。
// 2021.05.18 Version 1.7 パスワードの中に「%」があると失敗するバグ修正。
// 2021.06.04 Version 1.8 新しいパスワード形式対応。
// 2022.06.06 Version 1.9 固定の形式になってない所からなんとかパスワードを
抽出する対応。
// パスワードを範囲選択してから実行してもいいように
する。
//
// by 秀まるお
// hidesoft.8:04704| 暗号化zip自動解凍マクロ
//
//
//説明:
// このマクロはパスワード付きzipの添付ファイルを簡単に解凍する用のマクロです。
// パスワード付きzipの添付ファイル入りメールは、そのメールとは別便でパスワード
// を通知してきます。このマクロはその別便メールの中からパスワードを取り出して、
// 自動で解凍します。
//
// マクロを実行する前に、zip添付ファイル付きのメールとパスワード通知メールの
// 2通を選択して実行する必要があります。
//解凍したファイルは「ドキュメント」フォルダ配下のPasswordZipTempフォルダに
// 作成されます。古いファイルが残ってる場合はマクロ実行のタイミングで削除され
// てから解凍されます。
//
// unzip.exeのダウンロード場所: http://gnuwin32.sourceforge.net/packages/unzip.htm
// 7-Zipのダウンロード場所: https://sevenzip.osdn.jp/
loaddll "tkinfo.dll";
// 秀丸メールの検索パック復元予約
#n = dllfunc("AutoRestoreFindPack");
// 秀丸エディタの検索条件復元予約
setcompatiblemode 0x00020000;
#n = dllfunc("SetJapaneseCodePageMode", 1);
#n = dllfunc("SelectedMailCount");
if( #n != 2 ) {
message "このマクロは暗号化zip付きメールと、その解凍用パスワード通知
メールの2通を選択した状態で実行してください。";
endmacro;
}
$selectedtext = "";
if( selecting ) {
$selectedtext = gettext( seltopx, seltopy, selendx, selendy, 1 );
}
//対象のzipとパスワードを取り出す。
$zipfile = "";
$password = "";
#n = dllfunc("LockSelection");
while(1) {
#n = dllfunc("EnumSelection", 1);
if( #n == 0 ) {
break;
}
#foundzip = 0;
if( $zipfile == "" ) {
#count = dllfunc("CountCurrentHeader", "X-Attach");
if( #count != 0 ) {
#i = 0;
while( #i < #count ) {
$attach = dllfuncstr("CurrentHeader2", "X-Attach", #i);
$ext = dllfuncstr("ToLower", rightstr( $attach, 4 ) );
if( $ext == ".zip" ) {
$zipfile = dllfuncstr("HomeDir") + dllfuncstr("Curre
ntAccount") + "\\" + $attach;
#foundzip = 1;
break;
}
#i = #i + 1;
}
}
}
if( $password == "" && #foundzip == 0 ) {
$text = gettext( 0, 0, 999, linecount ); //メール本文全部
loaddll "HmJre.dll";
#n = dllfunc("SetUnicodeIndexAutoConvert", 1); //V1.6 バグ修正
$text = dllfuncstr("ReplaceRegularNoCaseSense", "[\\r\\n]+", $te
xt, 0, " ", 2);
//改行を空白に変換しておく。
$text = dllfuncstr("ReplaceRegularNoCaseSense", " +", $text, 0,
" ", 2);
//全角空白を半角空白に変換しておく。
$text = $text + " "; //末端に空白を付けておく。
$pattern[0] = " 【パスワード】 *[::]? *([^ \x81\x40-\xFC\xFF]
+?) ";
$pattern[1] = " 解凍パスワード *[::]? *([^ \x81\x40-\xFC\xFF]
+?) ";
$pattern[2] = " Password *: *([^ \x81\x40-\xFC\xFF]+?) ";
$pattern[3] = " \\[パスワード/Password\\] *([^ \x81\x40-\xFC\xF
F]+?) ";
$pattern[4] = " 【暗号化パスワード\\(password\\)】 *([^ \x81\x40
-\xFC\xFF]+?) ";
$pattern[5] = " パスワードは「([^ \x81\x40-\xFC\xFF]+?)」";
$pattern[6] = " 解凍パスワード +([^ \x81\x40-\xFC\xFF]+?) ";
$pattern[7] = " パスワード *[::] *([^ \x81\x40-\xFC\xFF]+?) ";
$pattern[8] = " 添付ファイルパスワード *[::]? *([^ \x81\x40-\xF
C\xFF]+?) ";
$pattern[9] = " \\[(?:パスワード|Password)\\] *([^ \x81\x40-\xFC
\xFF]+?) ";
$pattern[10] = " パスワード *\\(Password\\) *[::]? *([^ \x81\x4
0-\xFC\xFF]+?) ";
$pattern[11] = " \\[password information\\] *([^ \x81\x40-\xFC\x
FF]+?) ";
$pattern[12] = " パスワード[ ]*([0-9]+桁) *[::]? *([^ \x81\
x40-\xFC\xFF]+?) ";
$pattern[13] = " パスワード[ ]*\\([0-9]+桁\\) *[::]? *([^ \x8
1\x40-\xFC\xFF]+?) ";
$pattern[14] = " PASSWORD for .{1,255} is below: +([^ \x81\x40-\
xFC\xFF]+?) ";
#NeedConfirmIndex = 15; //これ以降のパターンについては確認メ
ッセージを出す。
$pattern[15] = "パスワード[^ ]*? +([!-~]{4,20}) ";
//V1.9寛容性が一番高い。「パスワード」って文字列
があってその後パスワードが別行になってる。
$pattern[16] = "「+([!-~]{4,20})」";
//V1.9「」で囲んだ中にパスワードらしき文字列があ
る場合対応。
#iPattern = 0;
#cPassword = 0;
while(1) {
$pattern = $pattern[#iPattern];
if( $pattern == "" ) {
break;
}
//2021.04.28 新しい方式
#x = 0;
while(1) {
#x = dllfunc("FindRegularNoCaseSense", $pattern, $text,
#x );
if( #x >= 0 ) {
Label_EnterHit: ;
$hit = midstr( $text, #x, dllfunc("GetLastMatchLengt
h") );
#tag1 = dllfunc("GetLastMatchTagPosition", 1);
#tag1len = dllfunc("GetLastMatchTagLength", 1);
$pass = midstr( $text, #tag1, #tag1len );
//message $hit + "\n" + $pass;
if( strlen($pass) >= 4 ) { //4文字以上でないと
ダメ。
//重複チェック
if( strstr( $passlist, "\t" + $pass + "\t" ) >=
0 ) {
//スキップ
goto Label_SkipAddPass;
}
$password[#cPassword+1] = $pass; //注意:
+1した所にセットする。
$passlist = $passlist + "\t" + $pass + "\t"; //
重複チェック用。
$whole[#cPassword+1] = $hit + "\t" + $pass;
//注意: +1した所にセットする。
#cPassword = #cPassword + 1;
if( #cPassword == 1 && #iPattern >= #NeedConfirm
Index ) {
#ConfirmPassword = 1;
}
Label_SkipAddPass:
}
#x = #x + 1;
} else {
break;
}
}
#iPattern = #iPattern + 1;
}
loaddll "tkinfo.dll"; //元に戻す。
}
}
#n = dllfunc("UnlockSelection", 1);
if( $zipfile == "" ) {
message "zip形式ファイルが見つかりませんでした。";
endmacro;
}
//V1.9 作ったけど没
// if( #cPassword == 0 ) {
// ...中身削除。
// }
if( $selectedtext != "" ) {
if( strstr( $passlist, "\t" + $selectedtext + "\t" ) < 0 ) {
$password[#cPassword+1] = $selectedtext; //注意: +1した所に
セットする。
$whole[#cPassword+1] = "(範囲選択した文字列)" + "\t" + $selectedtex
t; //注意: +1した所にセットする。
#cPassword = #cPassword + 1;
#ConfirmPassword = 1;
}
}
if( #cPassword == 0 ) {
message "パスワードが不明です。\n\nメールを2通選択して、さらにパス
ワードの文字列をメール内容枠中で選択してからマクロ実行すれば、その文字列をパ
スワードとして解凍します。";
endmacro;
}
if( #cPassword > 1 ) {
$whole[0] = "パスワードの候補が複数見つかりました。どれを使うか選択
してください。";
menuarray $whole, #cPassword + 1;
if( result <= 1 ) {
message "メールを2通選択して、さらにパスワードの文字列をメール
内容枠中で選択してからマクロ実行すれば、その文字列をパスワードとして解凍しま
す。";
endmacro;
}
$password = $password[result-1]; //result == 1の時に$password
[1]を選択する。
} else {
$password = $password[1];
if( #ConfirmPassword == 1 ) {
question "パスワードは「" + $password + "」でいいですか?";
if( result != yes ) {
message "メールを2通選択して、さらにパスワードの文字列を
メール内容枠中で選択してからマクロ実行すれば、その文字列をパスワードとして解
凍します。";
endmacro;
}
}
}
Label_PasswordDetermined: ;
if( strstr( $password, "\"" ) >= 0 ) {
message "パスワードの中にダブルクォーテーションの文字が含まれてます。
このマクロではダブルクォーテーション入りのパスワードで解凍することは出来ませ
ん。手作業で解凍お願いします。";
endmacro;
}
//2021.04.26 unzip.exeがあればそっちを使う。
// http://gnuwin32.sourceforge.net/packages/unzip.htm
//
$unzip = "C:\\Program Files\\GnuWin32\\bin\\unzip.exe";
if( ! existfile( $unzip ) ) {
$unzip = "C:\\Program Files (x86)\\GnuWin32\\bin\\unzip.exe";
if( ! existfile( $unzip ) ) {
$unzip = "";
}
}
if( $unzip == "" ) {
$7zip = "C:\\Program files\\7-Zip\\7z.exe";
if( ! existfile( $7zip ) ) {
$7zip = "C:\\Program files (x86)\\7-Zip\\7z.exe";
if( ! existfile( $7zip ) ) {
message "7-Zipのプログラム用ファイルが見つかりません。7-Zip
をインストールしてください。\n\n" +
"7-Zipは、C:\\Program files\\7-Zip またはC:\\Program
files (x86)\\7-Zip にインストールされてる必要があります。";
endmacro;
}
}
}
openreg "CURRENTUSER","Software\\Microsoft\\Windows\\CurrentVersion\\Exp
lorer\\Shell Folders";
$outfolder = getregstr("Personal");
closereg;
$outfolder = $outfolder + "\\PasswordZipTemp";
#fsobj = createobject("Scripting.FileSystemObject");
#folderobj = callmethod_returnobj(#fsobj, "GetFolder", $outfolder + "\\");
if( #folderobj != 0 ) {
#subfolderobj = getpropobj(#folderobj, "SubFolders");
if( #subfolderobj != 0 ) {
#onefolder = getcollection(#subfolderobj, 2);
while(1) {
#onefolder = getcollection(#subfolderobj);
if( #onefolder == 0 ) {
break;
}
$subfolder = member(#onefolder, "Name");
$path = $outfolder + "\\" + $subfolder;
//テストmessage $path;
runsync2 "cmd.exe /c rmdir /s /q \"" + $path + "\"";
}
}
}
#n = dllfunc("Bypass_CreateDirectory", $outfolder);
if( existfile( $outfolder + "\\*.*" ) ) {
runsync2 "cmd.exe /c del /f /s /q \"" + $outfolder + "\\*.*\"";
//古いファイルのゴミを削除
}
#n = dllfunc("Bypass_CreateDirectory", $outfolder);
if( $unzip != "" ) {
$command = "\"" + $unzip + "\"" + " -P\"" + $password + "\"" + " -d\
"" + $outfolder + "\" \"" + $zipfile + "\"";
} else {
$command = "\"" + $7zip + "\" x -p\"" + $password + "\"" + " -o\"" +
$outfolder + "\" \"" + $zipfile + "\"";
}
#homehidemaru = hidemaruhandle(0);
#n = dllfunc("NewMail");
#n = dllfunc("SwitchHeaderView", 0); //ヘッダ表示なし
gofiletop;
beginsel;
gofileend;
insert $command + "\n\n";
gofileend;
runex $command
, 1 //同期
, 0 //標準入力なし
, ""
, 5 //標準出力をカーソル位置へ挿入
, ""
, 5 //標準エラー出力もカーソル位置へ挿入
, ""
, 0 //作業フォルダ指定なし
, ""
, 1 //表示あり
, 0 //描画あり
, 0 //ANSIで受け取り
, 0x0001 //2021.05.18 拡張フラグで「%」をそのまま書けるようにする
;
if( !result ) {
message "unzip.exeまたは7zipの実行に失敗しました。プログラムからの出
力内容を確認してください。";
endmacro;
}
#exitcode = getresultex(9);
gofileend;
clearupdated;
if( #exitcode == 0 || #exitcode == 1 ) {
//終了コード 参照:
// 7zip ... https://sevenzip.osdn.jp/chm/cmdline/exit_codes.htm
// unzip.exe ... https://community.progress.com/s/article/What-does-Error-Code-mean-on-a-un-Zip-Advanced-Script-1307565966255
openbyshell $outfolder;
quit;
}
message "unzip.exeまたは7zipからエラーが返っていると思われます。出力結果
を確認してください。";
09793 22/06/09 15:47 さかみつ RE:09792 エディタ側でのマクロについて
ありがとうございます。
今度はすべて!?ばっちりです!!
> まいどどうもです。
> ......
> message "unzip.exeまたは7zipからエラーが返っていると思われます。出力結
>果を確認してください。";
09794 22/06/09 16:03 秀まるお2 RE:09789 メールエディタ(送信用)でのツ
動作確認ありがとうございます。V7.12の正式版でもダメということで、ちょっと
困りました。
それとは別件の、エディタ・ウィンドウ上でのマクロ登録でタイトルを変更しても
ツールバーに反映されないのは確認しましたが、そもそも的にこの問題が起きるとい
うことは、ちゃんとタイトルがツールバーボタンに出てきてるような気もしま
す。???
一応、僕の所での設定画面2つと結果の画面(ツールバーの様子)をアップロード
してみました。
秀丸メール側での「マクロ登録 - エディタ側」の設定:https://d.kuku.lu/694e0
e5f1
秀丸エディタ側での「マクロ登録」の様子: https://d.kuku.lu/2262d
f3a3
結果のツールバー(正常動作例): https://d.kuku.lu/0ddca
5d16
もしダメだとしたら、こんな表示になります。 https://d.kuku.lu/37ef2f8cc
この辺の設定やツールバーの様子を確認お願いしたいです。
09795 22/06/09 16:16 秀まるお2 RE:09794 メールエディタ(送信用)でのツ
すみません秀丸エディタと秀丸メールが逆になってました。
秀丸メール側での「マクロ登録 - エディタ側」の設定:https://d.kuku.lu/2262d
f3a3
秀丸エディタ側での「マクロ登録」の様子: https://d.kuku.lu/694e0
e5f1
結果のツールバー(正常動作例): https://d.kuku.lu/0ddca
5d16
もしダメだとしたら、こんな表示になります。 https://d.kuku.lu/37ef2f8cc
設定が同じかどうかと、そちらでの表示の様子がたしかにダメな時の様子と同じか
どうか見てほしいです。
09796 22/06/09 17:10 秀まるお2 RE:09793 エディタ側でのマクロについて
確認どうもです。ライブラリにもそろそろアップロードします。
09797 22/06/10 09:11 kurin RE:09795 メールエディタ(送信用)でのツ
設定に関しては、まったく同じです。
ただし、「秀丸エディタのマクロメニューをそのまま出す」をチェックしていても、
その下のリストボックスには何も表示されておりません。
もちろん、エディタ側でマクロ登録はしてあります。
表示は、バグった状態と一緒です。
画面をスクショしメールしましたので、ご確認いただけますでしょうか。
よろしくお願いいたします。
09798 22/06/10 13:56 秀まるお2 RE:09797 メールエディタ(送信用)でのツ
画面ハードコピーと確認しました。たしかにおかしくことが確認できました。
たしかに半角カナの「マクロ1」みたいになってるようです。
なんとか再現方法を探して修正してみようと思います。
09799 22/06/10 16:36 nao996gt3 RE:08831 Office365のリマインドメールの
だいぶ時間が経ってからの報告で、申し訳ありません。
[HTMLメール本文]が[Microsoft Outlook Web Access:]を含み
または
[X-Attach:]が[calendar_icon]を含む
という振り分けで、送信者の直接メールと同じアカウントで送信されるOutlookの予
定表メールを分離しました。
以上、ご報告まで。
> っと書いた所でなんですが、もしかしてREQUEST.icsが付いてないメールが届いた
>りしてますでしょうか。
> ......
> 何かメールのサンプルなど教えて欲しい所です。(個人情報が分からない範囲で)
09800 22/06/11 12:05 oshimas メールアドレスのオートコンプリートにつ
お世話になります。
<を入力してからメールアドレスの最初の文字を入力すると,付きでオートコンプリー
トされますが、毎回,を消さないといけないので、こういう場合は,無しになるとあり
がたいです。
どうぞよろしくお願いします。
09801 22/06/11 12:14 oshimas RE:09800 メールアドレスのオートコンプリ
お世話になります。
山括弧"<"を入力してからメールアドレスの最初の文字を入力するとコンマ付きで
オートコンプリートされますが、毎回コンマを消さないといけないので、こういう場
合はコンマ無しになるとありがたいです。
どうぞよろしくお願いします。
09802 22/06/11 16:24 わび助 Gメールの読み込み
秀丸メールでアカウントの設定をし、Gメールを扱えるようにしました。(POP3)
1)メールサーバーには多量のメールが残っていますが、実際に秀丸メールで読もうと
すると、250通程度しか読み込みません。再度受信するとその次の250通を読むような
感じです。何かによって読み込み数が制限されているようですが、その設定を秀丸
メール内で変更することはできるでしょうか?
2)何回か読み込んだところでそれ以上読み込めなくなってしまいました(未受信の
メールはたくさんあります)。受信するとメールを探しに行くが、新規のメールはな
い、という判断をしているように見えます。何かの設定がおかしくなっているようで
すが、この状態を直すにはどのようにすればよいでしょうか?
|
|