|
エイトさん、こんにちは。
エラー処理が十分ではないですが、"受信フォルダ"以外にも移動できるように
修正しました。
//--------------------------------------------------------------------------//
// マクロ名称 : TURU_MOV.MAC //
// //
// 機能概要 : 登録したフォルダに移動する //
// //
// 注意事項 : 1. puku_folder.iniファイルの以下の内容を使用 //
// セクション名[Dir],キー名[#0_Title〜#35_Title] //
// キー名[#0_Folder〜#35_Folder] //
// 書式 #n_Title=タイトル //
// #n_Folder=フォルダ //
// 2. 田楽(でんがく)DLLを使用しています。 //
// (ファイル名の指定でダイアログから選択するのに使用) //
// このマクロを実行するためには、杉浦まさき氏作の //
// 田楽DLLを使用させていただいています。 //
// 著作権 杉浦まさき氏 xxxxxxx@ceres.dti.ne.jp //
// http://www.ceres.dti.ne.jp/~sugiura/hidemaru/macros/dgserver/ //
// 作 成 者 : プックン 2002年05月10日 //
// //
// 修正履歴 : //
// 修正日 修正者 修正概要 //
// ------------------------------------------------------------------------ //
// XXXX/XX/XX XXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX //
// 2002.05.10 プックン 1.00 初期作成 //
// TAKA氏(RXB07020)作成HINA.MAC + //
// プックン作成 HINAKUN.MAC + //
// プックン作成 BASIC.MAC を流用して作成 //
// 2002.05.15 プックン 1.01 移動先を受信フォルダ以外に移動できるように //
// 修正。例外処理は未作成。 //
//--------------------------------------------------------------------------//
//仕様
// ユーザ特定のフォルダにすばやく飛ぶ為のマクロ
// 主な仕様は下記の通りです。
//
//・特定のフォルダを複数登録する事が可能で、登録されたフォルダは
// メニューで選択する事が可能。
//・メニューで選択されたフォルダにカーソルが飛ぶ。
//・登録処理は、同一メニュー内に登録処理が存在し、選択可能。
//・登録したメニュー上のフォルダを、メニュー一覧から削除する事が可能。
//・アカウント毎でフォルダの登録が可能。
// つまり、アカウント毎で登録されたフォルダメニューが変わる。
//
//例外処理(未作成).
//(1)
//鶴亀が表示していないフォルダを登録しても、エラー処理していない。
//(2)
//下記のような場合、登録先フォルダ名の先頭が、Homedir+アカウント名と
//同じなのでエラー判別ができない。
//登録先フォルダ="d:\turu\abcd",
//鶴亀homedir ="d:\turu\" + アカウント名="a"
$$ver = "1.01";
$$date = "2002.05.15";
$$author = "プックン" ;
$$fname = currentmacrobasename ;
$$info = "\n" + $$fname + " Ver " + $$ver+ "\n最終更新日付:"+$$date ;
$$info = $$info + "\n作者:"+$$author ;
//$Def = "受信" ;
call Turukame $$info;
//鶴亀から起動されたかどうか確認
##n = dllfunc( "IsTuruKame" );
//移動できたかどうかの確認(値のチェック)
call Res_check ##n,"マクロの実行が、鶴亀からされていません。\n" + $$info ;
//アカウント情報の取得
$$account =dllfuncstr("CurrentAccount");
//アカウント情報の確認(文字列の確認)
call Str_check $$account,"アカウント情報の取得に失敗しました。\n" + $$in
fo ;
//デバック用ファイル名
// $$debug_f = hidemarudir + "\\" + "debug\.ini" ;
// call Debug $$fname ,$$debug_f;
// call Debug_del $$fname ,$$debug_f;
$ini = "puku_folder\.ini" ;
//最古に"\"マーク付きフォルダ情報
$Homedir = dllfuncstr("HomeDir") ;
//アカウント情報の確認(文字列の確認)
call Str_check $Homedir,"ホームディレクトリの取得に失敗しました。\n" + $
$info ;
$file = $Homedir + $$account + "\\" + $ini;
$sel = "Dir";
$key0 = "Title" ;
$key1 = "Folder" ;
MODE:
$menu[0]="□選択□";
$menu[1]="&E "+"実行";
$menu[2]="&R "+"登録";
$menu[3]="&M "+"移動";
$menu[4]="&D "+"削除";
$menu[5]="&V "+"Version";
#menu_su= 6;
menuarray $menu, #menu_su;
if(result==0){goto LEND;}
else if (result==1){goto MODE;}
else if (result==2){goto JIKKOU;}
else if (result==3){goto TOUROKU;}
else if (result==4){goto IDOU;}
else if (result==5){goto SAKUJO;}
else if (result==6){goto VERSION;}
LEND:
freedll;
endmacro;
TOUROKU:
//田楽DLLのロード実施
call DengakuDll ;
//フォルダ選択
// $$AccFol = $Homedir + $$account + "\\" + $Def;
$$AccFol = $Homedir + $$account ;
call DIROPEN $$AccFol ;
$$SelFolder = $$return ;
//選択フォルダの確認(文字列の確認)
call Str_check $$SelFolder,"選択したフォルダに異常がありました。\n" + $$
info ;
// message "選択されたフォルダは\n"+$$SelFolder;
//existfile=ファイルが存在するかどうか
#wk = existfile( $$SelFolder );
if( !#wk ){
message $$SelFolder +"が存在しません。";
goto LEND;
}
call ChkFolder $$AccFol ,$$SelFolder ;
$RecFolder = $$return ;
//コメント登録
$$mes = "登録するフォルダ:\n" +
$RecFolder + "\n" +
"のコメントを入力してください";
$m_name = input ($$mes,$RecFolder) ;
if(!result){goto LEND;}
$sget = $key0 ; //Title
call MENU_SU $sel ,$sget, $file;
#menu_su = ##return;
writeinistr $file, $sel, "#" + str( #menu_su ) +"_"+ $sget, $m_name ;
$sget = $key1 ; //Macro
writeinistr $file, $sel, "#" + str( #menu_su ) +"_"+ $sget, $RecFolder ;
message "登録完了";
goto LEND;
JIKKOU:
$sget = $key0 ; //Title
$add = "□フォルダ移動の実行□";
call MENU_SU $sel ,$sget, $file , $add ;
#menu_su = ##return;
if(#menu_su == 0){
message "マクロ未登録";
goto LEND;
}
JIKKOUMENU:
//------------------//
// マクロ選択 //
//------------------//
//種類の選択 menu1
menuarray $menu, #menu_su;
//menu1結果による分岐
if (result == 0){
message "Cancelしました";
goto LEND;
}
else if(result == #menu_su){
goto JIKKOUMENU ;
}
else {
$sget = $key1 ; //Macro
$RecFolder = getinistr( $file, $sel, "#" + str( result - 1 ) + "_"+
$sget );
if($RecFolder==""){message "フォルダ名取得失敗";goto LEND}
}
//execmacro $mac;
call Exec_Move $$account,$RecFolder;
goto LEND;
IDOU:
$sget = $key0 ; //Title
$add = "□移動元のフォルダ指定□";
call MENU_SU $sel ,$sget, $file ,$add;
#menu_su = ##return;
if(#menu_su == 0||#menu_su == 1){
message "移動するフォルダ登録がありません";
goto LEND;
}
$add ="";
//------------------//
// マクロ選択 //
//------------------//
//種類の選択 menu1
call IDOUMENU ;
#sel = ##return ; //移動元
$add = "■移動先のフォルダ指定■";
call MENU_SU $sel ,$sget, $file ,$add;
$add ="";
call IDOUMENU "on";
#mov = ##return ; //移動先
//登録の移動
if (#sel == #mov)
goto LEND ;
else if(#sel < #mov){
$sget = $key0 ; //Title
$wk1 = getinistr($file,$sel,"#" + str( #sel - 1 ) + "_"+ $sget);
$sget = $key1 ; //Macro
$wk2 = getinistr($file,$sel,"#" + str( #sel - 1 ) + "_"+ $sget);
call MOVE #sel ,#mov-1 ;
$sget = $key0 ; //Title
writeinistr $file, $sel, "#" + str( #mov - 2 ) + "_"+ $sget, $wk1 ;
$sget = $key1 ; //Macro
writeinistr $file, $sel, "#" + str( #mov - 2 ) + "_"+ $sget, $wk2 ;
}
else{ //if(#sel > #mov){
$sget = $key0 ; //Title
$wk1 = getinistr($file,$sel,"#" + str( #sel - 1 ) + "_"+ $sget);
$sget = $key1 ; //Macro
$wk2 = getinistr($file,$sel,"#" + str( #sel - 1 ) + "_"+ $sget);
call MOVE_R #sel ,#mov ;
$sget = $key0 ; //Title
writeinistr $file, $sel, "#" + str( #mov - 1 ) + "_"+ $sget, $wk1 ;
$sget = $key1 ; //Macro
writeinistr $file, $sel, "#" + str( #mov - 1 ) + "_"+ $sget, $wk2 ;
}
// goto JIKKOU;
goto LEND;
SAKUJO:
$sget = $key0 ; //Title
$add = "□フォルダの登録削除□";
call MENU_SU $sel ,$sget, $file , $add;
#menu_su = ##return;
if(#menu_su == 0){
message "削除するフォルダ登録がありません";
goto LEND;
}
//------------------//
// マクロ選択 //
//------------------//
//種類の選択 menu1
menuarray $menu, #menu_su;
//menu1結果による分岐
if (result == 0){
message "Cancelしました";
goto LEND;
}
#res = result ;
//登録の削除
#menu_su = #menu_su - 1;
$sget = $key0 ; //Title
writeinistr $file, $sel, "#" + str( #res - 1 ) + "_"+ $sget, "" ;
$sget = $key1 ; //Macro
writeinistr $file, $sel, "#" + str( #res - 1 ) + "_"+ $sget, "" ;
if (#res != #menu_su){ //削除した番号が最後の番号でないとき
call MOVE #res ,#menu_su ;
}
// goto JIKKOU;
goto LEND;
VERSION:
message $$account + $$info ;
goto LEND;
MENU_SU:
$$wk1 = $$1;
$$wk2 = $$2;
$$wk3 = $$3;
$$wk4 = $$4 ; //menu の臨時追加
##menu_su = 0;
while( ##menu_su < 36 )
{
$title = getinistr( $$wk3, $$wk1, "#" + str( ##menu_su ) +"_"+ $$wk2 );
if( $title == "" )
{
break;
}
//---- 選択用のキーを求める ----//
if( ##menu_su < 10 )
{
$wk = str( ##menu_su );
}
else
{
$wk = char( 0x61 + ##menu_su - 10 );
}
$menu[##menu_su] = "&" + $wk + " " + $title;
##menu_su = ##menu_su + 1;
}
if($$wk4 != ""){
$menu[##menu_su] = $$wk4;
##menu_su = ##menu_su + 1;
}
return ##menu_su ;
MOVE:
##sel_no = ##1; //選択した番号
##men_no = ##2; //メニュー数
##a = ##sel_no;
while( ##men_no != ##a ) {
// $key0,$key1=Title,Macroを移動する
##i = 2;
while( ##i > 0 ) {
if(##i == 2){$sget = $key0 ;} //Title
else {$sget = $key1 ;} //Macro
//read
$$wk = getinistr( $file, $sel, "#" + str( ##sel_no ) + "_"+ $sge
t );
if($$wk==""){message "フォルダ名取得失敗_"+str(##a)+str(##i);got
o LEND}
//write
writeinistr $file, $sel, "#" + str( ##sel_no -1 ) + "_"+ $sget,
$$wk ;
//移動元を削除
writeinistr $file, $sel, "#" + str( ##sel_no ) + "_"+ $sget, "" ;
##i = ##i - 1;
}
##a = ##a + 1;
##sel_no = ##sel_no + 1;
}
return ;
MOVE_R:
##sel_no = ##1; //選択した番号
##men_no = ##2; //移動先の番号
##a = ##sel_no - ##men_no ;
while( ##a != 0) {
// $key0,$key1=Title,Macroを移動する
##i = 2; //2回繰り返す
while( ##i > 0 ) {
if(##i == 2){$sget = $key0 ;} //Title
else {$sget = $key1 ;} //Macro
//read
$$wk = getinistr( $file, $sel, "#" + str( ##sel_no - 2) + "_"+ $
sget );
if($$wk==""){message "フォルダ名取得失敗"+str(##a)+str(##i);goto
LEND}
//write
writeinistr $file, $sel, "#" + str( ##sel_no -1) + "_"+ $sget, $
$wk ;
##i = ##i - 1;
}
##a = ##a - 1;
##sel_no = ##sel_no - 1;
}
return ;
IDOUMENU:
$$wk1 = $$1 ;
menuarray $menu, #menu_su;
//menu1結果による分岐
if(result == 0){
message "Cancelしました";
goto LEND;
}
else if(result == #menu_su )
if($$wk1 == "")
goto IDOUMENU ; //タイトル選択時の処理
##res = result ;
return ##res ;
Exec_Move:
//引数渡し
$$account = $$1;
$$MoveFolder = $$2;
##n = dllfunc( "SelectFolder", $$account, $$MoveFolder );
$$mes = "フォルダの移動に失敗しました\n" +
"移動先アカウント:" + $$account + "\n" +
"移動先フォルダ:" + $$MoveFolder + "\n" + $$info ;
call Res_check ##n, $$mes;
return ;
Turukame: //鶴亀メール起動チェック&DLLロード
$$info = $$1;
//鶴亀インストールフォルダを取得する。
call Get_ins $$info;
$$TuruKameDir = $$return ;
// DLL を Load する
loaddll $$TuruKameDir + "\\tkinfo.dll";
if( !result ) {
message "DLLロードに失敗\n"+$$info;
endmacro;
}
return ;
DengakuDll: //DengakuDll ロード
$$info = $$1;
// DLL を Load する
$$DLL = "DengakuDLL.dll" ;
loaddll hidemarudir + "\\" + $$DLL;
if( !result ) {
message $$DLL + "のロードに失敗\n"+$$info;
$$mes = "田楽DLLが存在しません。\n"+
"田楽DLLを\n" +
hidemarudir + "\n"+
"ディレクトリにインストールしてください\n";
message $$mes;
endmacro;
}
return ;
Get_ins:
$$info = $$1;
openreg "CURRENTUSER","Software\\Hidemaruo\\TuruKame\\Config";
if( !result ) {
message "鶴亀がインストールされてないです (^^;)\n"+$$info;
closereg ;
goto LEND;
}
$$TuruKameDir = getregstr( "TuruKameDir" );
closereg ;
return $$TuruKameDir;
Res_check:
//処理:処理の判定&メッセージ表示
//引数渡し
##num = ##1; $$mes = $$2 ;
if(##num != 1){
message $$mes ;
goto LEND;
}
return ;
Str_check:
//処理:文字列の判定&メッセージ表示
//引数渡し
$$str = $$1; $$mes = $$2 ;
if($$str == ""){
message $$mes ;
goto LEND;
}
return ;
Debug:
//DEBUG用に各情報を秀丸ディレクトリの下の"debug.ini"ファイルに書き込む
//引数渡し
$$fname = $$1 ; //実行マクロファイル名
$$debug_f = $$2 ; //デバック情報書き込みファイル名
$$date = date + " " time ;
##IsTuruKame = dllfunc( "IsTuruKame") ;
##IsTuruKameMain = dllfunc( "IsTuruKameMain") ;
##CurrentPane = dllfunc( "CurrentPane");
$$CurrentAccount = dllfuncstr("CurrentAccount");
$$CurrentFolder = dllfuncstr( "CurrentFolder" );
##IsThreadView = dllfunc("IsThreadView");
##MailIndex = dllfunc("MailIndex");
##ViewArea = dllfunc("ViewArea");
writeinistr $$debug_f, $$fname, "Date", date + " " time ;
writeinistr $$debug_f, $$fname, "Fname", $$fname ;
writeininum $$debug_f, $$fname, "IsTuruKame", ##IsTuruKame ;
writeininum $$debug_f, $$fname, "IsTuruKameMain", ##IsTuruKameMain ;
writeininum $$debug_f, $$fname, "CurrentPane", ##CurrentPane ;
writeinistr $$debug_f, $$fname, "CurrentAccount", $$CurrentAccount ;
writeinistr $$debug_f, $$fname, "CurrentFolder", $$CurrentFolder ;
writeininum $$debug_f, $$fname, "IsThreadView", ##IsThreadView ;
writeininum $$debug_f, $$fname, "MailIndex", ##MailIndex ;
writeininum $$debug_f, $$fname, "ViewArea", ##ViewArea ;
return;
Debug_del:
//引数渡し
$$fname = $$1 ; //実行マクロファイル名
$$debug_f = $$2 ; //デバック情報書き込みファイル名
writeinistr $$debug_f, $$fname, 0, 0 ;
return;
DIROPEN:
// 「フォルダの指定」ダイアログのテスト
//引数渡し
$$Homedir = $$1;
// message $$Homedir ;
$$name = dllfuncstr("GETDIRNAME",
hidemaruhandle(0), // オーナーウィンドウのウィンドウハンドル
"「フォルダの指定」ダイアログのテスト", // タイトル
$$Homedir // 初期フォルダ名(ここでは秀丸フォルダを指定)
);
if ($$name == "") {
message "キャンセルされました。";
goto LEND;
}
//else message "選択されたフォルダは\n" + $$name + "\nです。";
return $$name ;
ChkFolder:
// 「フォルダの指定」ダイアログのテスト
//引数渡し
$$AccFol = $$1;
$$SelFolder = $$2;
//文字列長の取得
##str_len1 = strlen($$AccFol) ; //定義文字列の長さを
取得
$$get_str = leftstr($$SelFolder,##str_len1) ;
//指定したフォルダが実行したアカウント下であることを確認する。
if($$AccFol != $$get_str){
// $$mes = "指定したフォルダが、実行アカウントの" + $Def +
$$mes = "指定したフォルダ:" + $$SelFolder +
"\nが、実行アカウント" + $$AccFol +
"フォルダ下ではありません!\n" +
$$AccFol + "\n" +
"フォルダの下を指定してください\n\n"+
"選択されたフォルダ:\n"+
$$SelFolder ;
message $$mes ;
goto LEND;
}
else{
// message "ok";
}
// setclipboard str(strlen($$AccFol)) ;
//例:
// $$AccFol=D:\uty\TuruKame\kfukuda
// strlen($$AccFol)=23
// $$SelFolder=D:\uty\TuruKame\kfukuda\受信ログ
// strlen($$SelFolder)=32
// D:\uty\TuruKame\kfukuda\受信ログ
// 0 1 2 3 4
// 01234567890123456789012345678901234567890
// midstr($$SelFolder,24,9) ;
//受信フォルダ下の情報を取得
$$get_str = midstr($$SelFolder,##str_len1+1,strlen($$SelFolder)-##str_le
n1) ;
// $$get_str = $Def + $$get_str ;
$$get_str = $$get_str ;
return $$get_str ;
|
|