開いている秀丸に移った瞬間にマクロを実No.33077
柳絮 さん 14/04/02 16:36
 
直前のスレッドで、ワードのコマンドを使い、フォーカスをワードから秀丸を移す方
法についてお尋ねした柳絮です。私のしたいのは
(1)ワードのテキストをコピーして
(2)ワードから秀丸(既に開いている)に移動し
(3)秀丸でマクロを実行しテキスト加工し ←ここの質問です
(4)秀丸で最終のテキストを固定する
ということです。

(2)までできました。つまりワードでテキストをコピーし(それがクリップボード
に残っています)、その上でフォーカスを開いている秀丸ファイルに移動したのです。
秀丸ファイルに移動するときのワードのコマンドは次のとおりです。

Sub 貼込み秀丸へ()
     Dim obj As Object
     Set obj = CreateObject("WScript.shell")
     obj.Exec """c:\Program Files\Hidemaru\Hidemaru.exe"" /m3 C:yyy\zzz.txt"
End Sub



さて、コピーされたテキストを加工して、その秀丸ファイルに加工後のテキストを貼
り付ける、というのがゴールなのですが、その為にはどうしたら良いのかというのが
ご質問です。加工処理の内容は既に秀丸マクロで作ってあります。

これまではコピーしたテキストを秀丸に貼り付けた上で、加工用の秀丸マクロのシ
ョートカットキーを手で起動していました。それにより最初ワードと同じであった秀
丸ファイル上のテキストが、加工されます。

これを今度はフォーカスが秀丸に移った瞬間に加工用マクロが動くようにしたいので
す。要するにフォーカスがワードにあるときに、ワードのマクロコマンドをショート
カットキーを使って起動するだけで、秀丸にフォーカスが移り秀丸のマクロコマンド
も同時に動くようにしたいのです。秀丸にフォーカスが動いたときに何もしなくて済
むようにしたい、というのが眼目です。

それはワードのコマンドの方に書いておくのか、それともフォーカスが秀丸(既に開
いている)に移ったときに何か設定をしておけば秀丸側でマクロが動くのか、そこが
わからないのです。

どうぞよろしくお願いします。

柳絮

[ ]
RE:33077 開いている秀丸に移った瞬間にマNo.33078
秀丸担当 さん 14/04/02 17:07
 

秀丸エディタの起動オプションとして、/x でマクロを実行させることができま
す。
Test.macを実行させるとしたら、/xTest.mac と書きます。

  c:\xxx\hidemaru.exe /xTest.mac c:\yyy\zzz.txt

ただしこれは起動した秀丸エディタについてで、/m3でアクティブ切り替えした
ときには、起動した秀丸エディタはすぐ終了してしまうので、/xは適用されませ
ん。
既に開いているものがあるかどうかに関わらず、確実に開いてマクロを実行する
には、ファイル名を指定せずマクロ内でファイルを開くか、ファイル名を指定す
る場合は /m5 で強制的に開くかのどちらかになります。


既に開いているものは無視してかまわないのであれば、/m5のほうが簡単です。

  c:\xxx\hidemaru.exe /xTest.mac /m5 c:\yyy\zzz.txt

Test.mac内で処理後にquit;で自分自身を終了すればいいと思います。
アクティブ切り替えしたいという目的が、ワードのマクロ実行のたびに秀丸エデ
ィタが増えることを防ぐという目的であれば、こちらのほうがいいと思います。


既に開いているものが必要だとしたら、それなりのマクロを組む必要が出てきま
す。
開くファイルが固定であれば、

  c:\xxx\hidemaru.exe /xTest.mac

として、マクロ内でopenfileでファイルを開くか、開くファイルが固定でなけれ
ば、/aオプションでマクロに文字列を渡してgetargで取得する方法もあります。

  c:\xxx\hidemaru.exe /xTest.mac /a"c:\yyy\zzz.txt"

そしてfindhidemaru関数などで既に開いているものが無いかどうかを調べたり、
それを利用するのであればsetactivehidemaruで既に開いているものに切り替え
たり、あるいはclosehidemaruで閉じたり、といったことになってくると思いま
す。

[ ]
RE:33078 開いている秀丸に移った瞬間にマNo.33079
柳絮 さん 14/04/02 22:28
 
ご教示を有難う御座いました。

既に開いている秀丸に処理後のテキストを落としたいので、お教えいただいた最後の
やり方を試みましたがうまくいきません。

お教えいただいたコマンドには
hidemaru.exeがあり
/x と Test.mac があり
/a と zzz.txt がある
と理解しました。秀丸を起動し、マクロを起動し、開いている秀丸ファイルにフォー
カスするということかと思います。

ところが、やってみると秀丸マクロファイルにフォーカスが動いたところで終わりに
なります。

ワードのコマンドは次のとおりです。

obj.Exec """c:\Program Files\Hidemaru\Hidemaru.exe"" /m3 ""\Users\Aaa Bbb\Ap
pData\Roaming\Hidemaruo\Hidemaru\Macro\Test.MAC"" /a ""C:\Users\Aaa Bbb\AppD
ata\Roaming\Hidemaruo\Hidemaru\zzz.txt"""
(Aaa Bbbのところは実際には私の名前です。)

(i) パスに半角空白があるときには"で囲むとのことですが、そこがわかっていない
ので、それが原因でしょうか。

(ii) またこの秀丸マクロは、開かれている秀丸ファイル全体を選択(selectall;)
してから処理をするという考え方で作ってあります。それであれば、クリップボード
にあるテキストをまず秀丸ファイルに吐き出すという操作が必要になると思うのです
が、それはいらないのでしょうか。

どうぞよろしくお願いします。

柳絮

[ ]
RE:33079 開いている秀丸に移った瞬間にマNo.33080
h-tom さん 14/04/03 00:00
 

h-tom です。

>既に開いている秀丸に処理後のテキストを落としたいので、お教えいただいた最後の
>やり方を試みましたがうまくいきません。
<省 略>
>
>ワードのコマンドは次のとおりです。
>
>obj.Exec """c:\Program Files\Hidemaru\Hidemaru.exe"" /m3 ""\Users\Aaa Bbb\Ap
>pData\Roaming\Hidemaruo\Hidemaru\Macro\Test.MAC"" /a ""C:\Users\Aaa Bbb\AppD
>ata\Roaming\Hidemaruo\Hidemaru\zzz.txt"""
>(Aaa Bbbのところは実際には私の名前です。)
コピーミスでなければ、"/x" オプションがないですし、マクロパスのドライブ指定も
無いです。

パスが正しく設定されているとして、"/x" オプションがないと、test.mac を 開く
動作になるので、test.macが開いてなければ開きます、またtest.macが開いていれば、
/m3 オプションが指定されているので、
>ところが、やってみると秀丸マクロファイルにフォーカスが動いたところで終わりに
>なります。
という、動作になると思います。
(上記の指定は、test.mac を開く指示をしているだけ。)

ちなみに、担当さんの最後の例は、すべてtest.macで処理するという方式ですよ。
つまり、test.macに、開いている対象の秀丸エディタを探し出して、アクティブに
するという処理を、全部自分で書くということです。
(その為、 /a オプションで対象になるファイルを指定している。)

>(ii) またこの秀丸マクロは、開かれている秀丸ファイル全体を選択(selectall;)
>してから処理をするという考え方で作ってあります。それであれば、クリップボード
>にあるテキストをまず秀丸ファイルに吐き出すという操作が必要になると思うのです
>が、それはいらないのでしょうか。
必要な処理は、すべてマクロに記述する必要があります。

[ ]
RE:33080 開いている秀丸に移った瞬間にマNo.33081
秀丸担当 さん 14/04/03 09:18
 

>(i) パスに半角空白があるときには"で囲むとのことですが、そこがわかっていない
>ので、それが原因でしょうか。

h-tomさんの言われる通り、/xオプションが無かったり、パスの記述が不完全だ
ったり、/m3はもはや不要だったりするので、期待通りではないと思います。
「"」の囲い方や、「"」を「""」と書くところ自体は間違っていないです。

>(ii) またこの秀丸マクロは、開かれている秀丸ファイル全体を選択(selectall;)
>してから処理をするという考え方で作ってあります。それであれば、クリップボード
>にあるテキストをまず秀丸ファイルに吐き出すという操作が必要になると思うのです
>が、それはいらないのでしょうか。

マクロの目的がクリップボードの貼り付けを必要とするかどうかわからないです
が、それが必要かどうかは、こちらからはわからないです。
そういう目的なら必要でしょうし、そういう目的でなければいらないと思います。

----

既に開いているファイルが必要で、ファイル名が固定ではないのであれば、以下
のような感じにするといいです。


ワードのマクロの例は、/xTest.macでマクロ実行し、開くファイル名は指定しま
せん。
開くファイル名は指定しないので/m3や/m5も書きません。
開くファイル名の代わりに、/aで文字列としてファイル名を渡します。
Test.macは、マクロファイル用のフォルダにあれば、フルパスで書かなくてもい
いです。

  obj.Exec """c:\Program Files\Hidemaru\Hidemaru.exe"" /xTest.mac /a
""C:\Users\Aaa Bbb\AppData\Roaming\Hidemaruo\Hidemaru\zzz.txt"""


Test.macの例としては、findhidemaruで既に開いていたらそちらに移動し、無け
ればopenfileで開くようにするといいと思います。

  $file=getarg(0);
  message $file+"\nという文字列が/aで渡されました。";
 
  #find = findhidemaru($file);
  #org = hidemaruhandle(0);
  if( #find >= 0 ) {
    setactivehidemaru #find;
    closehidemaru #org;
    message $file+
        "\nが既に開かれていたのでアクティブ切り替えしました。";
  } else {
    openfile $file;
    message $file+"\nは開かれていなかったので、開きました。";
  }
  message "すべて選択します。";
  selectall;
  //その後の処理…

[ ]
RE:33081 開いている秀丸に移った瞬間にマNo.33083
柳絮 さん 14/04/03 16:19
 
h-tom様
秀丸担当様

色々お教えいただき有難う御座います。少し見えてきました。特にh-tomさんの「担
当さんの例はすべてtest.macで処理するという方式です。test.macの方に、開いてい
る秀丸ファイルをアクティブにするという処理を書くのです」というご指摘が役立ち
ました。

それを元にやりたいことを書き直すと
(i) アプリケーションをワードから秀丸に切り替える
(ii) 特定の秀丸マクロを起動する
(iii) そのマクロで秀丸ファイルを開きマクロを続ける
と言うことになるかと思います。

そこでワードマクロには
秀丸を動かし(Hidemaru.exe)
秀丸マクロ実行 (/x test.MAC)
とだけ書きました。

また秀丸マクロでは最初に
openfile "/m3 zzz.txt"
としてあります。
これでワードからマクロを実行すると、秀丸マクロ実行後の結果が秀丸ファイルに反
映されていました。



ところが問題がありました。その秀丸ファイルは既に開かれているzzz.txtそのもの
ではなく、zzz.txt(新規)(更新)いうファイルで、かつそれとは別に(無題)の新規フ
ァイルが出来ているのです。

ゴールまでもう少しのような気がしますが、新規ファイルを作らず、既に開いている
zzz.txtそのものに結果を反映させるにはどうしたら良いのでしょうか。どうぞよろ
しくお願いします。

柳絮

[ ]
RE:33083 開いている秀丸に移った瞬間にマNo.33085
秀丸担当 さん 14/04/03 17:03
 

zzz.txt(新規)(更新)となるのは、おそらく現在のフォルダが別のフォルダにあ
るなどの理由で、そのフォルダにはzzz.txtファイルが無いためだと思います。
フルパスで書くといいです。

  openfile "/m3 c:\\yyy\\zzz.txt";

秀丸マクロの文字列中の「\」は「\\」と書く必要があります。
ちなみに「"」は「\"」と書きます。


(無題)の新規ファイルが出来ているのは、最初に起動したhidemaru.exeがあるた
めだと思います。
openfileで"/m3"など、起動オプション付きで実行した場合は、hidemaru.exeを
新しく起動するのと同じ意味になるので、秀丸エディタは2つになります。
最初に起動した秀丸エディタを閉じるには、以下のようにします。

  #org=hidemaruhandle(0);
  openfile "/m3 c:\\yyy\\zzz.txt";
  closehidemaru #org;

1行目は最初に起動した秀丸エディタを覚えます。
2行目はもう1つ秀丸エディタが起動し、マクロの実行はそちらに移ります。
3行目はもう1つ秀丸エディタから、元の秀丸エディタを閉じます。

[ ]
RE:33085 開いている秀丸に移った瞬間にマNo.33089
柳絮 さん 14/04/03 18:59
 
出来ました。ご指摘いただいて直したのは次の点です

(1)既に開いているファイルをきちんと開けなかったのは、秀丸マクロで開くファ
イルを正しく指定出来なかったからです。その原因は担当さんが書いてくださったよ
うに、パスを\\とせず\と書いていたからです。

(2)(無題)の新規ファイルが出来ないようにこれもお教え下さった
 #org=hidemaruhandle(0);
  openfile "/m3 c:\\yyy\\zzz.txt";
  closehidemaru #org;
を使いました。

これで思うとおりの動きを実現できました。

迅速なサポートに感謝します。

柳絮





[ ]
RE:33089 開いている秀丸に移った瞬間にマNo.33091
柳絮 さん 14/04/03 21:08
 
最後にもう一つお助けください。

使ってみて気になることが出てきました。処理中に0.5秒ほどマクロ画面が表示され、
その為処理が遅れているように感じるのです。

マクロ画面を出さずに、パッと(感覚的かもしれませんが)処理するにはどのような
設定をしたら好いのでしょうか。

どうぞよろしくお願いします。

柳絮

[ ]
RE:33091 開いている秀丸に移った瞬間にマNo.33094
秀丸担当 さん 14/04/04 10:48
 

ここで言うマクロ画面というのは、最初にhidemaru.exeが起動されたときの無題
の秀丸エディタの画面ということかと思います。

起動オプションの/hを使うと、非表示の状態で起動することができます。

  obj.Exec """c:\Program Files\Hidemaru\Hidemaru.exe"" /h /xTest.mac"

こうしておくといいと思います。

/hで注意する点としては、マクロ実行中は非表示なものが実行後に再表示される
ので大丈夫ですが、もし/h単体で起動する場合は目に見えない秀丸エディタがず
っと残ることになるので、注意が必要です。

[ ]
RE:33094 開いている秀丸に移った瞬間にマNo.33096
柳絮 さん 14/04/04 12:43
 
ご教示有難う御座いました。一瞬のことなのでマクロ画面と思っていましたが、無題
の秀丸エディタであったのですね。いずれにせよ、これで実現したいことがすべてで
きました。有難う御座います。

多少なりともご恩返しがしたく、お教えいただいたことを当方のブログで記事にして
います。多くの人がこのソフトと知識を利用できるよう願っています。 http://goo.
gl/0o4mJc

[ ]