2010年02月07日 00時12分
1. editor.ExecuteCommandByID( MEID_MACROS_SELECT_THIS ) は、固定されている document のファイルではなく、 editor.ActiveDocument のファイルを選択するようにしてほしいです。 2. window.ScriptName window.ScriptFullName この2つのプロパティを書き込み可能にしてほしいです。 たびたびすみません。 動作の確認と、要望の理由は、長くなったのでこちらに書きました。 http://homepage3.nifty.com/kinzoku/editor/suggestion.html
2010年02月07日 13時12分
確認しました。 そもそも、editor.ExecuteCommandByID(); はマクロ実行中のウィンドウのメニューにある 機能を無理やり呼び出すだけのメソッドですので、こういう動作になっています。 確かにメニューに「これを選択」ってのがありますので、呼び出せることは呼び出せますが、 マクロ実行中に別のマクロを無理やり選択しなおしてることになりますので、安全じゃないと 思います。 ・・・と思ってデバッグモードで追いかけてみたら、問題なく動作するようですね。 すごい偶然。 > 1. > editor.ExecuteCommandByID( MEID_MACROS_SELECT_THIS ) > は、固定されている document のファイルではなく、 > editor.ActiveDocument のファイルを選択するようにしてほしいです。 なるほど、確かに上記の動作が正常に動いているため、1ができるとなれば、 マクロの幅が広がりそうですね。 ただ、この場合は仕様的につじつまを合わせると、window.ActiveEditor みたいなモンが 必要になってくるのかな、、、それとも、Windows みたいにすべてのウィンドウオブジェクトに アクセスできるようなインタフェースがあった方が良いのか・・・。 > 2. > window.ScriptName > window.ScriptFullName > この2つのプロパティを書き込み可能にしてほしいです。 うーん、1をやるよりは手っ取り早い感じはしますが・・・。 ところで、やりたいこととしては、マクロ実行中に別のマクロを呼び出してそのウィンドウ内で実行、 ってことでしょうか?
2010年02月07日 14時39分
>うーん、1をやるよりは手っ取り早い感じはしますが・・・。 2. ができるのならば、1. はイラナイです。 >ところで、やりたいこととしては、マクロ実行中に別のマクロを呼び出してそのウィンドウ内で実行、 >ってことでしょうか? そうです。 よろしくお願いします。
2010年02月07日 18時11分
こんにちは。 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さん、 もしかしたら、全くの見当違いの投稿かも知れませんが、その場合は、適当にスルーしてください。
2010年02月07日 20時29分
こんばんは。 私も、evalで行けるんじゃないかな~って思って同じようなコード作ってました(汗 > eval() を使っているので、速度の問題や、セキュリティのリスクが出てしまうのですが、 確かに。。。でも、hatさんのコードですと最小限のリスクに抑えられてて美しいですね。 少なくともExecuteCommandByIDでマクロを強制実行するよりは安全ですね。 セキュリティ面考え出すと、Excelみたいにマクロセキュリティ云々とかの機能が必要になってきますね。。。 そこまでできそうな気がしませんが・・・w
2010年02月08日 00時57分
こんばんは 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() すると、名前がぶつかってしまいます。
2010年02月07日 01時01分
ほとんど関係ないですが、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 自分のやり方が悪いだけかも知れませんが、よろしくお願いします。
2010年02月07日 15時19分
>$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
2010年02月08日 22時27分
> チェックサム 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の破損とかなさそうだけどなぁ・・・ もうちょっと様子を見てみることにします。
|