- ベストアンサー
秀丸マクロでメモ帳でtxtを開く方法を教えて!
txtを秀丸に関連付けしていますが、関連付けしたまま あるフォルダーのtxtファイルだけメモ帳で開くマクロを作りたいと考えています。 どのような マクロを作ればよいでしょうか? 秀丸パイプかDllが必要であれば、その方法でもかまいません。 秀丸マクロで普通に秀丸でtxtファイルを開くマクロ setcompatiblemode 0x0F; openfile macrodir + "\\txt\\*.txt"; endmacroall;
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
秀丸から外部アプリ類を呼び出すマクロ関数は run, runsync, runsync2 ~などです。 runsync2 "notepad.exe " + $filename; とりあえず上記の様な記述式で、いわゆるWindows標準の“メモ帳(notepad.exe)”を呼び出せます。 runコマンドで実行したいアプリ類へのPATHを "" の中に、いわゆるMS-DOS形式のコマンドラインとして記述して置けば、ほとんどのソフトは問題無く呼び出して実行させる事が可能です。引数などの渡し方も同様です。 ちょっと注意しないといけないのは、ファイル名をアプリなどに渡す時には、それぞれの間を空白文字(半角スペース)で区切らないといけないので、その辺だけ注意してマクロを書いて下さい。 特定のフォルダに対して実行する場合、if文などで条件分岐させて下さい。
その他の回答 (2)
- 4017B
- ベストアンサー率73% (1341/1821)
何つ~か無理(笑)! …と言うか、そもそも【秀丸】と【メモ帳】は別個独立したソフトなんで、一方的に秀丸側から何でも操作出来たら問題です(完全にウィルスソフトの挙動です)!また大前提として【秀丸】は「テキストエディタ」なので、どんな事でも自在に操作可能なマクロを搭載している訳でもありません(そもそもする必要も無い)。 それでも尚、どうしても僕には【メモ帳】の「ファイルを開く」ダイアログの表示が必要なんです!~と言うのであれば…。【秀丸】と【メモ帳】とは全く別の第三のソフトで両者をコントロールする方法しかありません。具体的にはVisualBASICとかを用いて操作します。WSHとか言う言い方もあります。 え~っと、もう使わないんで忘れましたけど… Shell("notepad.exe", 1) SendKeys "%FO%N" + myfilename ~こんな感じでダイレクトに送り先の外部アプリに「"%F" = Alt+F(メニューの[ファイル]を押す)」みたいなかなり人間が実際にマウスでクリックする様な挙動まで再現出来たはずです("%FO%N" = これで確か「ファイルを開くダイアログ」のはず?)。 ちょっと話は逸れますが、他にも色々なかなり高度なプログラム制御的な質問を熱心にされてる様なので。思い切ってもっと上位のコマンド制御可能なスクリプト言語を勉強してみるのも手かもしれません。まあ、たわいもない老婆心と思って聞き流して下さい。 P.S. 後、自分にはどうにも解せないのは「特定フォルダ」と、既に明示化されてるにも関わらず、敢えてマクロなり何なりで処理を挟む必要は何でだろ?~って事です。そのファイルをクリックした時点で、既にそれは「メモ帳で開くべきファイル」だと判別されてるにも関わらず…?? まあ、とにかくご希望の動作は完全再現は無理です。どこかで妥協点を見いだすしかないと思います。…もしかしたら意外な方法があるのかもしれませんが、自分には見当が付きません。力になれず申し訳ない。じゃ、そう言う事で!
お礼
バッチファイルか WSHで 検討してみます。 秀丸マクロでなくて 秀丸ファイラーClassicで 検討するかもしれません。 ありがとうございました。
- 4017B
- ベストアンサー率73% (1341/1821)
考え方としては、秀丸マクロは直接、文字列変数の中身を置換検索処理出来ないので。適当に扱いやすい形の文字列変数などに変換して、単純if文比較が出来る様にすると言う事です。 ━ ココから ━━━━━━━━━━━━━━━━━━━━━━━━ // パスを含めたファイル名を取得. // ただし秀丸の仕様で,全て小文字に変換されて出力されるので注意. $file_fullname = filename; // 現在開いているファイルのフルパスファイル名 $file_basename = basename; // 現在開いているファイルのファイル名の部分のみ $for_notepad_dir = "d:\\hoge\\"; // 特定フォルダ:後で照合するため,最初から小文字で代入. // 先に取得して置いた変数を結合して,比較用のフルパスファイル名を作成. $file_name = $for_notepad_dir + $file_basename; // 現在開いているファイルが,特定フォルダ直下に存在するファイルか判別. if ( $file_name == $file_fullname ) { // 特定フォルダに一致した!:処理1. message "特定フォルダに一致! -> " + $for_notepad_dir +"~"; } else { // 特定フォルダに一致せず…:処理2. message "そうでもないみたい…?"; } ━ ココまで ━━━━━━━━━━━━━━━━━━━━━━━━ ~上記の様な流れで処理すれば、開いたファイルが特定のフォルダ直下に設置されているのかどうか判別出来ます。 P.S. 一応、秀丸標準の外部DLLである“HmJre.dll”を使えば、perlやPHPライクに直に文字列変数を弄れるみたいですが…。自分はやった事無いので言及は避けます。 P.P.S. 後、今さらですが、最初の質問文を良く良く読んだら「関連付けしたまま特定フォルダ内のファイルのみメモ帳で開く~」とあります??! これはつまり… ・基本は【秀丸】で開く(ダブルクリック)。 ・特定フォルダ内のファイルのみ、自動的に【メモ帳】で開く様にする(当然、ダブルクリックのみ)。 ~と言う様な動作をお望みなのでしょうか?? だとするのならば、秀丸側の機能の1つである「マクロの自動起動」を併用する必要があるかと思われます(本体メニューの[マクロ登録]から設定)。ただしこれは言葉通り、秀丸が起動する度に無条件で指定したマクロが強制自動実行されるので、便利は便利ですが、よくよく考えて使う必要があります。 使用頻度が低いマクロを、毎回いちいち読み込んで実行し、また閉じる~といった様な無駄な処理が増える事になります。
お礼
画像間違えました こちらです。 ↓ 【メモ帳】で特定のフォルダーのファイルを開くのダイアログ http://blogimg.goo.ne.jp/user_image/63/2f/de0245832955f8c2caa160db14458eac.png
補足
解答頂いた 新しいマクロは 確認中です。 ☆環境 秀丸エディタは最新8.04 HmJre.dll3.36を使用しています。 OS XP home txtの関連づけは秀丸になっています。 ☆マクロがほしい理由 田楽DLを使った置換マクロで マクロ使用中 秀丸のテキストをクリックするとマクロが中断するなど あり 秀丸のテキストに書いた 置換リスト(複数行)が開けないので 【メモ帳】で開きたいというわけです。 ☆理解できてるマクロ A.秀丸マクロで普通に【秀丸】でtxtファイルのフォルダーを開くダイアログを出すマクロ(秀丸でtxtを開く場合) setcompatiblemode 0x0F; openfile macrodir + "\\txt\\*.txt"; endmacroall; B.【メモ帳】で特定のファイルを開くマクロ setcompatiblemode 0x0F; $filename = macrodir + "\\txt\\hogehoge.txt"; runsync2 "notepad.exe " + $filename; endmacroall; A.の方法だと【秀丸】で 実行したいマクロのイメージができます。 つまり、【メモ帳】でこれを実行したいのです。 B.は 教えていただいたrunsync2で 【メモ帳】にて ファイルを開くマクロです。 本当は、*.txtのように指定して ダイアログを出すようにしたいのです。 まだ、【メモ帳】で特定のフォルダーのファイルを開くのダイアログを出すことはできません。 ☆作りたいマクロ >特定フォルダ内のファイルのみ、自動的に【メモ帳】で開く様にする(当然、ダブルクリックのみ)。 秀丸に関連付けられてるが、マクロを実行すると【メモ帳】で特定のフォルダーのファイルを開くのダイアログ出るようにできるようになればありがたいです。 【メモ帳】で特定のフォルダーのファイルを開くのダイアログ http://blogimg.goo.ne.jp/user_image/65/7a/19b9a4714233810ca4547fe27fc63917.png ちなみに 秀丸マクロで、【メモ帳】で特定のフォルダーのファイルを開くのダイアログを出すことは出来るかどうかはわかりません。
お礼
解答ありがとうございます。 特定のファイルには実行できました。 setcompatiblemode 0x0F; $filename = macrodir + "\\txt\\hogehoge.txt"; runsync2 "notepad.exe " + $filename; endmacroall; >特定のフォルダに対して実行する場合、if文などで条件分岐させて下さい。 これはちょっとわからなかったです。 まだ、特定のフォルダーのメモ帳のファイルを開くのダイアログを出すことはできません。