MEID_MACROS_SELECT_THIS について

  1. 1.
     editor.ExecuteCommandByID( MEID_MACROS_SELECT_THIS )
     は、固定されている document のファイルではなく、
     editor.ActiveDocument のファイルを選択するようにしてほしいです。

    2.
     window.ScriptName
     window.ScriptFullName
     この2つのプロパティを書き込み可能にしてほしいです。

    たびたびすみません。
    動作の確認と、要望の理由は、長くなったのでこちらに書きました。
    http://homepage3.nifty.com/kinzoku/editor/suggestion.html

     |  kinzoku  |  返信
  2. ほとんど関係ないですが、kinzokuさんの罫線マクロがなぜか動きません。
    もちろんmme.wscはregsvr32で登録してあります(一回解除→再登録、もやってみました)。
    絶対パスで登録してみたら・・・?と思いやってみましたがやはり無駄でした。
    エラー内容は「オートメーションサーバーは~」で、エラー行12です。

    以下環境と思われる何か
    $Id: mme.wsc,v 1.307 2010-02-06 03:08:07+09 ta Exp $
    $Id: keisen.js,v 1.23 2010-02-01 22:25:47+09 ta Exp $
    Win7 x64

    自分のやり方が悪いだけかも知れませんが、よろしくお願いします。

     |  miso  |  返信
  3. 確認しました。

    そもそも、editor.ExecuteCommandByID(); はマクロ実行中のウィンドウのメニューにある
    機能を無理やり呼び出すだけのメソッドですので、こういう動作になっています。

    確かにメニューに「これを選択」ってのがありますので、呼び出せることは呼び出せますが、
    マクロ実行中に別のマクロを無理やり選択しなおしてることになりますので、安全じゃないと
    思います。

    ・・・と思ってデバッグモードで追いかけてみたら、問題なく動作するようですね。
    すごい偶然。

    > 1.
    >  editor.ExecuteCommandByID( MEID_MACROS_SELECT_THIS )
    >  は、固定されている document のファイルではなく、
    >  editor.ActiveDocument のファイルを選択するようにしてほしいです。

    なるほど、確かに上記の動作が正常に動いているため、1ができるとなれば、
    マクロの幅が広がりそうですね。

    ただ、この場合は仕様的につじつまを合わせると、window.ActiveEditor みたいなモンが
    必要になってくるのかな、、、それとも、Windows みたいにすべてのウィンドウオブジェクトに
    アクセスできるようなインタフェースがあった方が良いのか・・・。

    > 2.
    >  window.ScriptName
    >  window.ScriptFullName
    >  この2つのプロパティを書き込み可能にしてほしいです。

    うーん、1をやるよりは手っ取り早い感じはしますが・・・。

    ところで、やりたいこととしては、マクロ実行中に別のマクロを呼び出してそのウィンドウ内で実行、
    ってことでしょうか?

     |  Kuro  |  返信
  4. >うーん、1をやるよりは手っ取り早い感じはしますが・・・。
    2. ができるのならば、1. はイラナイです。

    >ところで、やりたいこととしては、マクロ実行中に別のマクロを呼び出してそのウィンドウ内で実行、
    >ってことでしょうか?
    そうです。
    よろしくお願いします。

     |  kinzoku  |  返信
  5. >$Id: mme.wsc,v 1.307 2010-02-06 03:08:07+09 ta Exp $
    >$Id: keisen.js,v 1.23 2010-02-01 22:25:47+09 ta Exp $
    最新ですね。チェックサム
    6c27659e77a8708232edaec697c91f31 *mme-1.307.zip
    76f96d43bf8050b3335799152bcc07dd *mme.wsc

    >エラー内容は「オートメーションサーバーは~」で、エラー行12です。
    このエラー内容が
    >オートメーションサーバーは、オブジェクトを作成できません。
    ならば、mme.wsc が破損しているのか、wscript.exe, cscript.exe が破損しているのかも。

    Visual Studio 2005 または Visual Studio .NET でエラー メッセージ
    "オートメーション サーバーはオブジェクトを作成できません" が表示される
    http://support.microsoft.com/kb/323885/ja

    スレッド: オートメーション サーバーはオブジェクトを作成できません
    http://www.microsoft.com/japan/msdn/archive/community/gdn/ShowPost-11182.htm

     |  kinzoku  |  返信
  6. こんにちは。
    kinzokuさん、Kuroさん、横から失礼します。

    > ところで、やりたいこととしては、マクロ実行中に別のマクロを呼び出してそのウィンドウ内で実行、ってことでしょうか?

    WSH(JScript)で、他のファイルをインクルードするには、eval()を使う方法があります。

    // hoge.js をインクルード(実行)する。
    var READ_ONLY = 1 ;
    var includeFile = "hoge.js";
    eval(
    new ActiveXObject( "Scripting.FileSystemObject" ).
    OpenTextFile( includeFile, READ_ONLY ).
    ReadAll()
    );

    eval() を使っているので、速度の問題や、セキュリティのリスクが出てしまうのですが、

    > 確かにメニューに「これを選択」ってのがありますので、呼び出せることは呼び出せますが、
    > マクロ実行中に別のマクロを無理やり選択しなおしてることになりますので、安全じゃないと
    > 思います。

    これ ↑ よりは安全なのかな... と考えております。

    kinzokuさん、
    もしかしたら、全くの見当違いの投稿かも知れませんが、その場合は、適当にスルーしてください。

     |  hat  |  返信
  7. こんばんは。

    私も、evalで行けるんじゃないかな~って思って同じようなコード作ってました(汗

    > eval() を使っているので、速度の問題や、セキュリティのリスクが出てしまうのですが、

    確かに。。。でも、hatさんのコードですと最小限のリスクに抑えられてて美しいですね。
    少なくともExecuteCommandByIDでマクロを強制実行するよりは安全ですね。

    セキュリティ面考え出すと、Excelみたいにマクロセキュリティ云々とかの機能が必要になってきますね。。。
    そこまでできそうな気がしませんが・・・w

     |  Kuro  |  返信
  8. こんばんは hat さん。
    eval()で問題になるのはスコープです。変数・関数とかの通用範囲というか。

    0.
    Mery のマクロディレクトリ以下の構造を反映した PopupMenu を構築して、
    メニュー表示し、選択されたマクロ "My Macros\Subdir\a.js" を
    実行するマクロ SubMacros.js。この場合は、スコープの問題は発生しません。
    ( 懸念されることが、少ない ) これは、eval() でやっちゃおうかな・・・

    1.
    実行しようとするマクロ "My Macros\Subdir\a.js" の中身
    var s ="meEncoding949 = " + meEncoding949;
    alert( s );

    2.
    ライブラリー化している mme.wsc というスクリプトの中で、
    eval( "....\My Macros\Subdir\a.js" ); を実行すると、
    meEncoding949 は未定義変数で、エラーになります。
    eval() は、Windows Script Component の文脈で判定されます。
    蛇足。
    Ruby の eval() は、第二引数に binding を受け取る抜け道があります。

    3.
    mme.wsc では、Mery で使える多くの定数を定義していますが、
    もともと、○丸エディタのマネっ子のスクリプトコンポーネントなので、
    内部的に使わないのであれば、定数は定義しません。
    また、Mery に新しく追加される定数にともなって、
    mme.wsc でも、定数を定義していると面倒くさいですし。w

    もし、My Macros\Subdir\a.js で、getmerydocuments() というメソッドを
    定義したり、定数 sjis や shift_jis を定義していたら、
    mme.wsc で、eval() すると、名前がぶつかってしまいます。

     |  kinzoku  |  返信
  9. > チェックサム
    MD5ですよね・・・?一致しました。
    76F96D43BF8050B3335799152BCC07DD
    アーカイブの方はチェックしていませんが本体が生きてるので大丈夫・・・ですよね・・・?

    > ならば、mme.wsc が破損しているのか、wscript.exe, cscript.exe が破損しているのかも。
    コマンドプロンプトでwscript,cscriptと両方とも叩いてみましたが起動はしますね。
    mme.wscの破損はハッシュから考えてあり得ませんし。

    > スレッド: オートメーション サーバーはオブジェクトを作成できません
    > http://www.microsoft.com/japan/msdn/archive/community/gdn/ShowPost-11182.htm
    ここにあったregsvr32 scrrun.dllも試しては見ましたがやはり解決しません。WSHの再インストールもWin7だとしちゃっていいのかわからんですし。
    WindowsインストールしたばっかりなんでWSHの破損とかなさそうだけどなぁ・・・

    もうちょっと様子を見てみることにします。

     |  miso  |  返信
  10. こんにちは。
    Meryのシンプルさと美しさが気に入って、利用させていただいている者です。
    # 最近マクロ作りにも手を出そうと。。。

    だいぶ以前の書き込みで申し訳ないのですが、便乗させてください。
    私の環境でも、mme.wscが動作しません。
    misoさまと同じく、Windows7 64bitで、
    エラー内容も同じく、12行 0文字目、「オートメーション サーバはオブジェクトを作成できません。」エラーです。
    mme.wscはmme-1.308.zipを利用し、管理者権限でのインストールも行っています。

    ちなみに、手持ちの別の環境で、Windows 7 32bitでは動作するため、
    64bitだとうまく動作しないのかもしれません。

    まるエミュはじめ、罫線マクロ等非常に便利なため、是非使えたらなぁ、、、と思い、ご報告した次第です。

     |  KAZ  |  返信
スポンサーリンク