[要望] フォルダを選択する起動オプションNo.27390
ぱと さん 06/04/28 17:57
 
要望です。

メールに対しては、起動オプション /vf を使って、特定のメールを開くことができ
ますが、同様に、特定のフォルダを開きたいことがあります。マクロでは可能であ
るわけですが、Windows のショートカットファイルを使って、特定のフォルダを開
くことを想定しているので、起動オプション式でこれができるとありがたいです。

/XX <アカウント名> <フォルダ名>
という感じでしょうか。

コマンドラインオプションでのマクロ指定でやるということも考えたのですが、マ
クロに引数を渡すというのは確か難しい(できない?)のでしたよね?

----
ぱと

[ ]
RE:27390 [要望] フォルダを選択する起動No.27401
h-tom さん 06/04/29 01:20
 

h-tom です。

>要望です。
>
>メールに対しては、起動オプション /vf を使って、特定のメールを開くことができ
>ますが、同様に、特定のフォルダを開きたいことがあります。マクロでは可能であ
>るわけですが、Windows のショートカットファイルを使って、特定のフォルダを開
>くことを想定しているので、起動オプション式でこれができるとありがたいです。
WSHが使えるようなので、
1)引数で指定された、アカウント、フォルダを開くマクロを(WSHで)作成する。
2)作成したマクロを /x オプションで指定し 秀丸メールを起動。
というスクリプトを作ればいいのでは?

[ ]
RE:27401 [要望] フォルダを選択する起動No.27408
ぱと さん 06/04/29 20:40
 
h-tom さん

>1)引数で指定された、アカウント、フォルダを開くマクロを(WSHで)作成する。
>2)作成したマクロを /x オプションで指定し 秀丸メールを起動。
>というスクリプトを作ればいいのでは?

えっと、指定したフォルダを開くためのマクロを、開きたい各フォルダごとに、
作成すると同時に、そのマクロを起動オプションで指定したショートカットファ
イル(あるいは、WSH スクリプト)を作成するマクロを作ればいいということです
ね。

そうですね。なるほど、これでいけるかもしれませんが、開きたいフォルダの数
だけマクロファイルが必要ということになるので、ちょっとややこしいかもしれ
ません。

----
ぱと

[ ]
RE:27408 [要望] フォルダを選択する起動No.27413
h-tom さん 06/04/29 23:04
 

h-tom です。

>えっと、指定したフォルダを開くためのマクロを、開きたい各フォルダごとに、
>作成すると同時に、そのマクロを起動オプションで指定したショートカットファ
>イル(あるいは、WSH スクリプト)を作成するマクロを作ればいいということです
>ね。
>
>そうですね。なるほど、これでいけるかもしれませんが、開きたいフォルダの数
>だけマクロファイルが必要ということになるので、ちょっとややこしいかもしれ
>ません。

なんか、話がかみ合ってませんね。

マクロはWSH実行時に、毎回同じ名前で作成すればいい。
フォルダ毎に分ける必要もないです。

私が言いたいのは、WSHを使って、
 "引数で指定されたアカウントのフォルダを開くマクロ"を作成し、
 /x で指定して、秀丸メールを実行する。
ってだけです。
開きたいアカウント、フォルダを変えたいなら、スクリプトに渡す引数を変えれば
いいし。

サンプルのvbs作った方が早いかな。

[ ]
RE:27413 [要望] フォルダを選択する起動No.27415
ぱと さん 06/04/30 00:55
 
h-tom さん

>私が言いたいのは、WSHを使って、
> "引数で指定されたアカウントのフォルダを開くマクロ"を作成し、
> /x で指定して、秀丸メールを実行する。
>ってだけです。
>開きたいアカウント、フォルダを変えたいなら、スクリプトに渡す引数を変えれば
>いいし。
>
>サンプルのvbs作った方が早いかな。

うーん、ごめんなさい。いつ、どのように WSH を使うのかということが判らな
いのです。

WSHスクリプトで、秀丸メールのマクロを生成するわけですよね?

WSH スクリプト 引数(フォルダ名)

と実行すると、その WSH スクリプトは、引数で与えたフォルダを開く秀丸メー
ルマクロを生成し、そして同じスクリプトが、その秀丸メールマクロを /xで実
行するってことですか?

んで、秀丸メールからは、script WSHスクリプト フォルダ名 というショートカ
ットが作成されるような、マクロを作成して、実行すると。

そういうことでいいのかな? 同じ WSH スクリプトの中で、スクリプトによって、
秀丸メールマクロを動的に生成して、生成後、その秀丸メールマクロを/xオプシ
ョンですぐに実行するというところまで一気にやるということでしょうか?

-----
ぱと

[ ]
RE:27415 [要望] フォルダを選択する起動No.27416
h-tom さん 06/04/30 02:06
 

h-tom です。

>うーん、ごめんなさい。いつ、どのように WSH を使うのかということが判らな
>いのです。
秀丸メールに起動オプションを追加しなくても、WSH(+マクロ)で同じような処理
を行うのが目的なので、秀丸メール起動時です。

>WSHスクリプトで、秀丸メールのマクロを生成するわけですよね?
>
>WSH スクリプト 引数(フォルダ名)
>
>と実行すると、その WSH スクリプトは、引数で与えたフォルダを開く秀丸メー
>ルマクロを生成し、そして同じスクリプトが、その秀丸メールマクロを /xで実
>行するってことですか?
そのとうりです。

>んで、秀丸メールからは、script WSHスクリプト フォルダ名 というショートカ
>ットが作成されるような、マクロを作成して、実行すると。
??秀丸メール起動中に実行するなら、全部マクロでやった方がいいような気も
しますが?

>そういうことでいいのかな? 同じ WSH スクリプトの中で、スクリプトによって、
>秀丸メールマクロを動的に生成して、生成後、その秀丸メールマクロを/xオプシ
>ョンですぐに実行するというところまで一気にやるということでしょうか?
そーいうことです。

試しに作ってみましたが、マクロを直接生成するより、iniファイル形式のデータ
ファイルを生成して、iniファイルから設定を読み込んで、アカウント、フォルダを
選択するマクロを実行した方がいいかもしれませんね。
WSH(vbs)でダブルコーテーション(")をエスケープするのが面倒だった・・・。

[ ]
RE:27416 [要望] フォルダを選択する起動No.27417
ぱと さん 06/04/30 08:14
 
h-tom さん

お付き合いいただいてありがとうございます。

>>と実行すると、その WSH スクリプトは、引数で与えたフォルダを開く秀丸メー
>>ルマクロを生成し、そして同じスクリプトが、その秀丸メールマクロを /xで実
>>行するってことですか?
>そのとうりです。

なるほど。理解しました。同じスクリプトの中でマクロを生成してそのままそれ
を実行ということなのですね。

>>んで、秀丸メールからは、script WSHスクリプト フォルダ名 というショートカ
>>ットが作成されるような、マクロを作成して、実行すると。
>??秀丸メール起動中に実行するなら、全部マクロでやった方がいいような気も
>しますが?

えっと、ショートカットを作成する時点と、そのショートカットを実行するのは
別の時点ということになります。ショートカットを作成するには、フォルダ名を
指定する必要があるので、秀丸メール上でということになるわけです。
(この処理は WSH からも可能かもしれませんが、秀丸メールを使っている時に、
「このフォルダを後でまた簡単に開きたい」というところからスタートするので、
秀丸メール上で行わないと意味が半減します。)

また、私の要望した「起動オプション」ということですが、/vF オプションによ
る特定メールへのオプションは、本当の初回起動時にのみ使うものではないので
す。秀丸メール起動中に実行した場合二重起動などがされるということにはなら
ず、指定メールを開くという動作だけが行われるのです。これのフォルダ版とい
うことで考えているわけです。また、「ショートカット(Windows のショートカ
ットファイルです)」を作成して、それを自分のニーズに応じてデスクトップに
おいたり、情報アイテムなどに添付したりしたいので、そのショートカットファ
イルを作成する処理を秀丸メール実行中に、秀丸メール上から行いたいわけです。

動作イメージとしては、次のような感じです。

(1)秀丸メール上で、後からジャンプしたいフォルダにいる状態で、ショートカ
ット作成マクロを実行すると、デスクトップに Windowsショートカットファイル
が生成される。

(2)そのショートカットは
script <WSHスクリプト> <秀丸メールアカウント名> <同フォルダ名>
を実行するようになっている。

(3)そのスクリプトは、指定したフォルダにジャンプする秀丸マクロを生成し、
そのまま実行する内容になっている。

(4)生成されたショートカットファイルはデスクトップなどにおいておくか、
情報アイテムなどに添付する。後者の場合、その情報アイテムなどと、特定フォ
ルダにリンクを結ぶような役割になる。

特定のメール、フォルダへのジャンプを行うことができるマクロとして、現在、
hi_sugar さんの「お気に入りのフォルダ/メールへジャンプするマクロ Ver 1.
03」(airjump)が公開されていますが、私も利用させていただいていますが、メ
ニューに登録する形なので、今回私が考えている形とは少し用途が異なるのです。

>試しに作ってみましたが、マクロを直接生成するより、iniファイル形式のデータ
>ファイルを生成して、iniファイルから設定を読み込んで、アカウント、フォルダを
>選択するマクロを実行した方がいいかもしれませんね。

どんな動作イメージなのかちょっと判らないですが、差し支えなかったら公開し
ていただけると幸いです。

-----
ぱと

[ ]
RE:27417 [要望] フォルダを選択する起動No.27420
h-tom さん 06/04/30 10:04
 

h-tom です。

>どんな動作イメージなのかちょっと判らないですが、差し支えなかったら公開し
>ていただけると幸いです。
マクロ生成版vbsです。テンポラリフォルダにマクロを生成します。
wscript.exe(or cscript.exe) アカウント名 フォルダ名
と指定してください。フォルダ名はなくても可能。
//-------------------------
Option Explicit
Dim WshArgs
Dim WshShell
Dim WshFso
Dim Acount
Dim Folder
Dim MacroFile
Dim MacroName
Dim HidemaruMail

Acount = ""
Folder = ""

'引数の取得 1個:アカウントのみ 2個:アカウント、フォルダ 3個以上は無視
Set WshArgs = WScript.Arguments
if WshArgs.Count = 1 then
    Acount = WshArgs(0)
elseif WshArgs.Count > 1 then
    Acount = WshArgs(0)
    folder = WshArgs(1)
end if
Set WshArgs = Nothing
'フォルダ名はマクロにする都合上、"\"-->"\\"に変換
if instr(folder, "\\") = 0 and instr(folder, "\") > 0 then
    folder = Replace(folder, "\", "\\")
end if

'秀丸メールの場所を取得
Set Wshshell = WScript.CreateObject("WScript.Shell")
HidemaruMail = WshShell.RegRead("HKCU\Software\Hidemaruo\TuruKame\Config\Tur
uKameDir") & "TuruKame.exe"

'アカウント設定があれば、マクロを作成し起動。
if Acount <> "" then
    'テンポラリにマクロを作成
    MacroName = WshShell.ExpandEnvironmentStrings("%TMP%") & "\OpenFolder.mac"
    Set WshFso = CreateObject("Scripting.FileSystemObject")
    Set MacroFile = WshFso.OpenTextFile(MacroName, 2, True)
    MacroFile.WriteLine "loaddll ""tkinfo.dll"";"
    MacroFile.WriteLine "#n = dllfunc(""SelectFolder"", """ & Acount & """,
""" & folder & """);"
    MacroFile.WriteLine "endmacro;"
    MacroFile.Close
    Set MacroFile = Nothing
    Set WshFso = Nothing
    '秀丸メール起動
    Wshshell.run HidemaruMail & " /x " & MacroName
end if
Set Wshshell = Nothing
WScript.Quit
//-------------------------

iniファイルを作るってのは、各種エスケープ(WSH、秀丸マクロ)が面倒
だからです。フォルダの指定で、"\\"に変換しなくてすむし。

ファイルの出力部を
    MacroName = WshShell.ExpandEnvironmentStrings("%TMP%") & "\OpenFolder.ini"

    MacroFile.WriteLine "[history]"
    MacroFile.WriteLine "CurrentAccount=" & Acount
    MacroFile.WriteLine "CurrentFolder=" & folder

にして、以下のマクロを実行するようにすればいいと思いますが、実行して
ないのでうまくいくかは不明。

//起動時に指定するマクロ
loaddll "tkinfo.dll";
$ini = getenv("TMP") + "\\OpenFolder.ini";
if(existfile($ini)){
    $CurrentFolder = getinistr($ini, "history", "CurrentFolder");
    $CurrentAccount = getinistr($ini, "history", "CurrentAccount");
    if($CurrentAccount != ""){
        #n = dllfunc("SelectFolder", $CurrentAccount, $CurrentFolder);
    }
}
//-------------------------

[ ]
RE:27420 [要望] フォルダを選択する起動No.27424
ぱと さん 06/04/30 19:59
 
h-tom さん

さっそくありがとうございました。

まずは、h-tom さんの スクリプトを、OpenFolder.VBS として保存し、
次のような文字列をリンク先として指定したショートカットファイルを作りまし
た。

"OpenFolder.VBS" "Account-A" "受信\folder"

で実行すると、45行目で、「指定したファイルが見つかりません。」という
エラーになりました。ここは最終的に秀丸メールをマクロ指定で起動する部分な
ので、秀丸メールの起動パスが、LFN なのがいけないのではないかなあと思い、
HidemaruMail =
の部分の前後を """" &       & """"
で囲んで、この文字列が "秀丸メール起動パス"
になるようにしたところ、ばっちりうまく動くようになりました。

これで期待したとおりの動作です。

秀丸メール上で、カレントフォルダ(後からまた簡単に開きたいフォルダ)上で
実行すると、上記のようなリンク先を持つショートカットを作成するというのは、
自分でなんとかできると思いますので、これはさっそくやってみます。

WSH での引数の処理の仕方といい、WSH でテキストファイルを扱う方法といい、
大変勉強になりました。

自分が考えている動作があって、それを実現してくれるコードを書いていただい
たということで、一行一行が身にしみるように理解できます。大変貴重な勉強を
できましたし、自分が考えている環境の実現ができましたので、大変うれしいで
す。

どうもありがとうございました。

-----
ぱと

[ ]
RE:27424 [要望] フォルダを選択する起動No.27425
ぱと さん 06/04/30 21:41
 
自己レスです

>秀丸メール上で、カレントフォルダ(後からまた簡単に開きたいフォルダ)上で
>実行すると、上記のようなリンク先を持つショートカットを作成するというのは、
>自分でなんとかできると思いますので、これはさっそくやってみます。

この部分やってみまして、一応うまく動くものが出来上がりました。
ショートカットファイルを作成する WSH スクリプトと、そのスクリプトに引数
を渡すマクロの組み合わせです。

まだちょっとうまくない部分(ショートカットの名称を決める部分など)があるの
で、もう少し試行錯誤してみます。

先にできあがった、個々のメールに対するショートカットを作成するマクロと、
今回のフォルダに対するショートカットを作成するマクロを使うことで、メール、
フォルダに対してリンクを張る環境が整ってとても快適になりました。

フォルダ構造がどんなに複雑になっていても、またどんなに多くのメールが存在
するフォルダのある特定のメールでも、並べ替え、検索操作などをする必要なく、
ただ、ショートカットを実行するだけで、簡単にジャンプすることができます。

これらのショートカットを情報アイテムに添付する利用方法は、このようなニー
ズがある人(取り合えず私)には最強です。

-----
ぱと

[ ]
RE:27425 [要望] フォルダを選択する起動No.27431
h-tom さん 06/05/01 00:23
 

h-tom です。

>フォルダ構造がどんなに複雑になっていても、またどんなに多くのメールが存在
>するフォルダのある特定のメールでも、並べ替え、検索操作などをする必要なく、
>ただ、ショートカットを実行するだけで、簡単にジャンプすることができます。

すでに、WSH+マクロで実現しているので、今さらって感じですが・・・。

1)リンク先のアカウント、フォルダ、メッセージIDを保存したiniファイルを
 作成し、リンク元の添付ファイルにする。
2)添付ファイルからiniファイルを検索し、その内容を元にジャンプ

って方法なら、マクロだけでも出来そうですね。
実際はiniファイルでなく、別の拡張子にすれば見分けやすいでしょう。
(まぁ、秀丸メール以外からジャンプするのは出来ませんが・・・。)

[ ]
RE:27431 [要望] フォルダを選択する起動No.27432
秀まるお2 さん 06/05/01 08:21
 
 話がだいぶ進んだ所でなんてすが、コマンドラインをマクロから参照したいと
いう話は以前から時々出てくる話ではあります。

 コマンドラインを取得するための、GetCommandLineという関数をtkinfo.dllに
追加します。さらに、コマンドラインのオプションで「/q」を指定したら、それ
以降の内容は秀丸メールが無視するようにしてみます。

 つまり、

   turukame.exe /q XXXXX=YYYYY

 みたいに好きなコマンドライン指定が出来るようになって、その内容は、

   $s = dllfuncstr("GetCommandLine");
   #x = strstr($s,"/q");
   if( #x < 0 ) {
       #x = strstr($s,"/Q");
   }
   if( #x >= 0 ) {
       $s = midstr( $s, #x + 1, 999 );
       while( leftstr($s,1) == " " ) {
           $s = midstr( $s, 1, 999 );
       }
   }


 みたいに出来るってとこになります。

[ ]
RE:27432 [要望] フォルダを選択する起動No.27433
秀まるお2 さん 06/05/01 08:34
 
 っとコメントした所でなんですが、やっぱり、単純にコマンドラインを取得す
るって作戦ではダメでした。

 例えば、既に秀丸メールが起動している状態で「turukame.exe /x xxx.mac」
みたいなコマンドラインが起動されたとすると、その起動されたturukame.exeは
既存の秀丸メールプロセスに対してプロセス間通信を使って「xxxx.macを実行せ
よ」みたいな指示を出すだけみたいな仕組みがあります。そういう仕組み的に考
えると、単純に「コマンドラインが分かればいい」って仕組みではダメです。も
っと難しい仕組みを用意してやらないとダメっぽいです。

 ということでやっぱりやめときます。

[ ]
RE:27433 [要望] フォルダを選択する起動No.27435
ぱと さん 06/05/01 10:57
 
秀まるお2 さん

秀丸メールユーザーのぱとと申します。

> っとコメントした所でなんですが、やっぱり、単純にコマンドラインを取得す
>るって作戦ではダメでした。

マクロで、コマンドライン取得というお話に、「おお!」と思いましたが、やはり
いろいろな問題はあるようですね。

今回の件に関しては、h-tom さんが、WSH で動的にマクロを生成してかつ、そのま
まそのマクロを起動オプションで実行するという面白い方法を考えてくれたことで
解決できました。

んが、もし最初の要望の通り、/vF オプションに相当するコマンドラインオプショ
ンで、任意のフォルダを開くオプションを用意していただけると、それはそれでう
れしいです。

/XX <アカウント名> <フォルダ名>

----
ぱと

[ ]
RE:27435 [要望] フォルダを選択する起動No.27442
秀まるお2 さん 06/05/02 08:31
 
 既にWSHを使う方法でいろいろ話がされているようですが、バッチファイルを
使ってマクロにパラメータを渡すアイデアは1つあります。

 例えば、

   echo [a]>c:\$$$temp$$$.ini
   echo folder=folder>>c:\$$$temp$$$.ini

 としてから秀丸メールを/xオプション付きで起動して、そのマクロからは

    $folder=getinistr("c:\\$$$temp$$$.ini","a","folder");
    #n = dllfunc("Bypass_DeleteFile","c:\\$$$temp$$$.ini");

 みたいにしてパラメータを受け取ればいいです。

[ ]
RE:27431 [要望] フォルダを選択する起動No.27457
ぱと さん 06/05/03 01:07
 
h-tomさん

>1)リンク先のアカウント、フォルダ、メッセージIDを保存したiniファイルを
> 作成し、リンク元の添付ファイルにする。
>2)添付ファイルからiniファイルを検索し、その内容を元にジャンプ
>
>って方法なら、マクロだけでも出来そうですね。

なるほど、こんな手もありますね。ただ、同じリンク元に、別々のリンク先を持
たせたい時に、マクロ実行時にどこにジャンプするか選ぶ処理などが必要になり
そうですね。

また秀まるおさんからは、テンポラリとしてジャンプに必要な情報を ini に落
として実行するというような方法をご教示いただきました。

んが、h-tom さんの最初のアイデアの、WSHによるマクロの動的生成+そのまま
実行という方法に魅せられて、いろいろ夢が広がっていますので、当面この方法
を追求してみたいと思います。

で、h-tom さんにお願いというか、ご質問なのですが、h-tom さんに書いていた
だいた WSH スクリプトを含む形で、秀丸メールのフォルダに対する、Windows
ショートカットファイルを作成するマクロを公開してもかまわないでしょうか?

今のところ、フォルダ分だけでなんとか動いているのですが、うまくいけば、先
に公開済みのメールのショートカットを作成するマクロと合わせて、秀丸メール
上で、フォルダを選択しているか、メールを選択しているかで、自動的にそれぞ
れに対するショートカットファイルが作成されるような単一マクロにしてみたい
とも思っています。

-----
ぱと

[ ]
RE:27457 [要望] フォルダを選択する起動No.27460
h-tom さん 06/05/03 23:01
 

h-tom です。

>で、h-tom さんにお願いというか、ご質問なのですが、h-tom さんに書いていた
>だいた WSH スクリプトを含む形で、秀丸メールのフォルダに対する、Windows
>ショートカットファイルを作成するマクロを公開してもかまわないでしょうか?
問題ないです。
自由に使ってください。

[ ]
RE:27460 [要望] フォルダを選択する起動No.27462
ぱと さん 06/05/04 01:52
 
h-tom さん

>>で、h-tom さんにお願いというか、ご質問なのですが、h-tom さんに書いていた
>>だいた WSH スクリプトを含む形で、秀丸メールのフォルダに対する、Windows
>>ショートカットファイルを作成するマクロを公開してもかまわないでしょうか?

>問題ないです。
>自由に使ってください。

ありがとうございます。それでは、秀丸メールの任意のフォルダを開く Windows
ショートカットファイルを作成するマクロとして公開させていただきます。

んで、さらに後日、メールに対するショートカットを作成するマクロ(MailJump.
mac)と合体させたいと思います。

今回は素晴らしいアイデアと WSH スクリプトのご教示ありがとうございました。

※マクロの初回実行時に、WSH スクリプトを書き出す処理にしたいのですが、
 その部分のエスケープ処理を間違わないようにするのがややこしいです。

-----
ぱと

[ ]