クリップボードのNo.05372
mymt さん 06/12/02 16:55
 
はじめまして.
今日はじめて,マクロに挑戦しています.
さっそくですが,お知恵を拝借したく質問させていただきました.
よろしくお願いいたします.

秀丸メールにて,メールをファイルに書き出すマクロを考えています.
保存するファイル名は,「日時-件名」で自動的に設定されるようにしたく,
以下のようなマクロを作成しました.

---------------------------
$Subject=dllfuncstr("CurrentHeader", "Subject");
$Date=dllfuncstr("CurrentHeader", "Date");

$cmd = getenv("COMSPEC");
run $cmd + " /c timefmt" + " \"" + $Date + "\" | clip";

beginclipboardread;
$DateAndTime=getclipboard;
message $DateAndTime;
----------------------------

ここで,コマンドプロンプトに渡しているclipはVectorで紹介されて
いるものを使用させていただいております.
http://www.vector.co.jp/soft/winnt/util/se328049.html

また,timefmtは「Data:ヘッダ」の書式の文字列を与えると,
それを「YYYYMMDD-hhmmss」という文字列に置き換える自作プログラム
です.(Y:年,M:月,D:日,h:時,m:分,s:秒)

秀丸メールで適当なメールを選択して,このマクロを実行すると,
そのマクロが実行される前にクリップボードに入っていた文字列が
messegaにより出力されます.

具体例を挙げますと,以下のとおりです.
(1)秀丸上で適当な文字列,たとえば「AAA」をCtrl-Cによりコピー
(2)上記マクロを実行
(3)messageにより,「AAA」が出力
(4)秀丸上でCtlr-Vを入力すると,期待する文字列(YYYYMMDD-hhmmss)
が入っている.

ちなみに,マクロのmessageの行をコメントアウトしてもクリップボード
の内容はYYYYMMDD-hhmmssです.

クリップボードの使い方について何か根本的な勘違いをしているのでしょうか.
マニュアルを読んだのですが,この回答になる部分を見つけられません
でした.

環境は以下のとおりです.
・OS:WindowsXP SP2
・秀丸:v6.5b3
  *「クリップボード履歴をとる」と「秀丸エディタの常駐」は無効
・秀丸メール:v4.69

[ ]
RE:05372 クリップボードからの値の取り出No.05373
mymt さん 06/12/02 16:56
 
すみません,タイトルが中途半端なまま投稿してしまいました.

>はじめまして.
>今日はじめて,マクロに挑戦しています.
>さっそくですが,お知恵を拝借したく質問させていただきました.
>よろしくお願いいたします.
>
>秀丸メールにて,メールをファイルに書き出すマクロを考えています.
>保存するファイル名は,「日時-件名」で自動的に設定されるようにしたく,
>以下のようなマクロを作成しました.
>
>---------------------------
>$Subject=dllfuncstr("CurrentHeader", "Subject");
>$Date=dllfuncstr("CurrentHeader", "Date");
>
>$cmd = getenv("COMSPEC");
>run $cmd + " /c timefmt" + " \"" + $Date + "\" | clip";
>
>beginclipboardread;
>$DateAndTime=getclipboard;
>message $DateAndTime;
>----------------------------
>
>ここで,コマンドプロンプトに渡しているclipはVectorで紹介されて
>いるものを使用させていただいております.
>(http://www.vector.co.jp/soft/winnt/util/se328049.html
>
>また,timefmtは「Data:ヘッダ」の書式の文字列を与えると,
>それを「YYYYMMDD-hhmmss」という文字列に置き換える自作プログラム
>です.(Y:年,M:月,D:日,h:時,m:分,s:秒)
>
>秀丸メールで適当なメールを選択して,このマクロを実行すると,
>そのマクロが実行される前にクリップボードに入っていた文字列が
>messegaにより出力されます.
>
>具体例を挙げますと,以下のとおりです.
>(1)秀丸上で適当な文字列,たとえば「AAA」をCtrl-Cによりコピー
>(2)上記マクロを実行
>(3)messageにより,「AAA」が出力
>(4)秀丸上でCtlr-Vを入力すると,期待する文字列(YYYYMMDD-hhmmss)
>が入っている.
>
>ちなみに,マクロのmessageの行をコメントアウトしてもクリップボード
>の内容はYYYYMMDD-hhmmssです.
>
>クリップボードの使い方について何か根本的な勘違いをしているのでしょうか.
>マニュアルを読んだのですが,この回答になる部分を見つけられません
>でした.
>
>環境は以下のとおりです.
>・OS:WindowsXP SP2
>・秀丸:v6.5b3
>  *「クリップボード履歴をとる」と「秀丸エディタの常駐」は無効
>・秀丸メール:v4.69

[ ]
RE:05372 クリップボードのNo.05374
h-tom さん 06/12/02 17:44
 

h-tom です。

>$cmd = getenv("COMSPEC");
>run $cmd + " /c timefmt" + " \"" + $Date + "\" | clip";
run文で実行しているからかな?
runsync(runsync2)文を使えば大丈夫だと思います。

>秀丸メールで適当なメールを選択して,このマクロを実行すると,
>そのマクロが実行される前にクリップボードに入っていた文字列が
>messegaにより出力されます.
run文は非同期実行なので、期待しているデータがクリップボードに
セットされる前に、取り出しているのでしょう。
runsync文は、実行したアプリケーションが終了するまで、待機する
ので期待したデータがセットされるハズです。

[ ]
RE:05374 クリップボードのNo.05376
mymt さん 06/12/02 23:12
 
h-rom様,どうもありがとうございます.

大当たりでした.見事解決し,希望通りの動作ができました.

秀丸マクロのヘルプ内で,

「run文は[その他]-[プログラム実行]と同様に標準入出力の
リダイレクトが可能です。runsync文とrunsync2文はリダイレクト
はできません。」

という記述があります.
今回は,clip.exeにリダイレクトが必要なので,runを使わなくて
はならないと思い込んでいました.
よく考えれば,リダイレクトはコマンドプロンプト中でのはなしであり,
秀丸側には関係のないことでした.

大変勉強になりました.

どうもありがとうございます.

[ ]