秀丸からコマンドプロンプトをNo.01478
Yuu さん 00/07/23 14:30
 
Windows 2000で秀丸を使っています。

秀丸からコマンドプロンプトを呼び出すマクロを作ってみました(下記の通り)。

//---------------------------------------------------------
$menu[0]="C:\\Documents and Settings\\Administrator\\My Documents\\テキスト
文書";
$menu[1]="C:\\PerlScript";
$menu[2]="C:\\CppTrash";
$menu[3]="C:\\VZ";
// メニュー表示
menu $menu[0],$menu[1],$menu[2],$menu[3];
if (result==0) endmacro;
else{
// メニューで選択されたフォルダでコマンドプロンプト起動
runsync2 "cmd.exe /k cd " + $menu[result - 1];
}
//--------------------------------------------------------

しかし、使い勝手がイマイチなので、「ファイルダイアログ等を表示して、選択され
たフォルダ上にコマンドプロンプトを呼び出す」機能を追加したいのです。

多分、「loaddll "commdlg.dll"」などを使うのでしょうが、関数の使い方がわかり
ません。

参考になるマクロがありましたら、教えて下さい。

[ ]
RE:01478 秀丸からコマンドプロンプトをNo.01479
ひろ さん 00/07/24 17:42
 
 Yuu さん今日は、ひろです。
> 多分、「loaddll "commdlg.dll"」などを使うのでしょうが、関数の使い方がわかり
 おそらくこれは上手くいきません。理由は、macro help に記載がありますが、
> 既存のDLLやWindowsAPIを呼び出したい場合今回追加したDLL呼び出し機能は、
> あくまで秀丸エディタ用に作成された形式のDLLのための機能であり、一般
> 的なDLLの呼び出しや、WindowsAPIの呼び出しにはほとんど使えません。特
> に、WindowsAPIは呼び出し規約が_stdcallとなっているので呼び出せません。
> そういうDLLを呼び出したい場合には、パイパス用のDLLを作成してください。
> ません。
という理由によります。

 しかし既存の DLL で dialog を表示、folder を選択、名前の取得するこ
とにより、Yuu さんご希望のことは実現可能だと思います。

 田楽 DLL という名前で、杉浦さんが、
http://www.ceres.dti.ne.jp/~sugiura/hidemaru/macros/dgserver/index.html
にて公開しています。HTML による help や sample macro が付いていますの
で、機能や使い方の詳細はそちらを参考にして下さい。

[ ]
RE:01479 秀丸からコマンドプロンプトをNo.01480
Yuu さん 00/07/24 19:02
 
 ひろさん、情報ありがとうございます。
 
> 田楽 DLL という名前で、杉浦さんが、
>http://www.ceres.dti.ne.jp/~sugiura/hidemaru/macros/dgserver/index.html
>にて公開しています。HTML による help や sample macro が付いていますの
>で、機能や使い方の詳細はそちらを参考にして下さい。

 とりあえず、田楽 DLL についてはとても歯が立ちそうもないので、マクロに
もっとなれてから調べてみます。
 
 マクロを作った動機が、「PowerToyのCommand Prompt Hereをインストールし
たので、秀丸でもできないかな」という軽い気持ちだったのです。
 
>>しかし、使い勝手がイマイチなので、「ファイルダイアログ等を表示して、選
>>択されたフォルダ上にコマンドプロンプトを呼び出す」機能を追加したいのです。

これについては、「編集中の文書のディレクトリ」を追加して、それほど不便では
なくなりました。

//---------------------------------------------------------------------
$menu[0]="C:\\Documents and Settings\\Administrator\\My Documents\\テキスト
文書";
$menu[1]="C:\\PerlScript";
$menu[2]="C:\\CppTrash";
$menu[3]="C:\\VZ";
$menu[4]="                < 現在編集中の文書のディレクトリ >";
// メニュー表示
menu $menu[0],$menu[1],$menu[2],$menu[3],$menu[4];
if (result==0) endmacro;
// 編集中の文書のディレクトリでコマンドプロンプト起動
else if (result==5){
runsync2 "cmd.exe /k cd " + $directroy;
}
// メニューで選択されたフォルダでコマンドプロンプト起動
else{
runsync2 "cmd.exe /k cd " + $menu[result - 1];
}
//-------------------------------------------------------------------

また分からないことがあったら、教えて下さい。

[ ]
RE:01480 秀丸からコマンドプロンプトをNo.01481
杉浦 まさき さん 00/07/25 03:32
 
Yuu さん、ひろさん、こんばんは。
田楽DLLの作者の杉浦@久しぶり(^^; です。
#今は就職先も(もちろん内定ですが)決まってホッとしてます(^^;。

> とりあえず、田楽 DLL についてはとても歯が立ちそうもないので、マクロに
>もっとなれてから調べてみます。
> マクロを作った動機が、「PowerToyのCommand Prompt Hereをインストールし
>たので、秀丸でもできないかな」という軽い気持ちだったのです。

軽い気持ちで田楽DLLを使ってもらえるように(^^;、
とりあえずこんな感じでできますよ〜というサンプルを書いてみました。

//---------------------------------------------------------------------
$menu[0]="C:\\Documents and Settings\\Administrator\\My Documents\\テキスト
文書";
$menu[1]="C:\\PerlScript";
$menu[2]="C:\\CppTrash";
$menu[3]="C:\\VZ";
$menu[4]="                < 現在編集中の文書のディレクトリ >";
$menu[5]="                    <フォルダを選択する>";
// メニュー表示
menuarray $menu, 6;
if (result==0) endmacro;
// ディレクトリの選択
else if (result==6){
    // dll のロード(dll が秀丸フォルダにあると仮定)
    loaddll hidemarudir + "\\DengakuDLL.dll";
    // フォルダ選択ダイアログを表示&フォルダ名の取得
    $dir = dllfuncstr(
                    "GETDIRNAME",
                    0,
                    "フォルダを選んで下さい",
                    directory
                );
    // dll のアンロード
    freedll;
    if ($dir != "") {
        runsync2 "cmd.exe /k cd " + $dir;
    }
}
// メニューで選択されたフォルダでコマンドプロンプト起動
else{
runsync2 "cmd.exe /k cd " + $menu[result - 1];
}
//-------------------------------------------------------------------

で、コマンドインタプリタとして cmd.exe を使っているということは
NT か W2K かどちらかだと思うんですが、この GETDIRNAME 関数が
W2K では使えない、という報告を別の所から受けてまして、
できれば上のマクロがちゃんと動くかどうかもテストしてもらえると
嬉しいですm(_ _)m。>W2K な方


[ ]
RE:01481 秀丸からコマンドプロンプトをNo.01484
Yuu さん 00/07/25 18:45
 
 杉浦さん、こんにちは。
 
 >この GETDIRNAME 関数がW2K では使えない、という報告を別の所から
 >受けてまして、できれば上のマクロがちゃんと動くかどうかもテスト
 >してもらえると嬉しいですm(_ _)m。>W2K な方
 
 さっそく、田楽dllをダウンロードして試してみました。
 
 下に、秀丸のGrepでの「フォルダ参照」との比較を書いてみます。
 
 -デスクトップ
-マイドキュメント
- ......
-マイコンピュータ
-コントロール パネル<---これは「Grep」では表示されない
-ローカルディスク(C:)<---これが「田楽dll」では表示されない
-ローカルディスク(D:)<---これも「田楽dll」では表示されない
-CDROM DRIVE(E:)
+マイネットワーク
-ゴミ箱<---これも「Grep」では表示されない


 Windows 2000では、やはりハードディスクのドライブ名の取得に失敗(?)している
ようです。
 
 これから、ゆっくり田楽dllの関数マニュアルを読んでみます。では、....

[ ]
RE:01484 秀丸からコマンドプロンプトをNo.01485
杉浦 まさき さん 00/07/25 23:22
 
Yuu さん、こんばんは。
杉浦 です。

> Windows 2000では、やはりハードディスクのドライブ名の取得に失敗(?)している
>ようです。

テストしていただいてどうもですm(_ _)m。
で、不具合については近日中に何とかします。


[ ]
RE:01485 秀丸からコマンドプロンプトをNo.01486
杉浦 まさき さん 00/07/26 01:32
 
Yuu さん、こんばんは。
再び 杉浦 です。

>で、不具合については近日中に何とかします。

とりあえずソースを見直してみましたが
原因がイマイチわからないので、
以下の場所にあるテストバージョンで実行した場合に
どういうエラーメッセージが表示されるか(または表示されないか)を
教えてもらえると嬉しいです。
#エラーメッセージは(もし出るとすれば)
 "ShellError: #???" (??? は数字) という形式です。

テストバージョンの URL
http://www.ceres.dti.ne.jp/~sugiura/hidemaru/macros/dgserver/DengakuDLL.dll


[ ]
RE:01486 秀丸からコマンドプロンプトをNo.01487
Yuu さん 00/07/26 07:37
 
杉浦さん、こんにちは。

<以下の場所にあるテストバージョンで実行した場合に
<どういうエラーメッセージが表示されるか(または表示されないか)を
<教えてもらえると嬉しいです。

マクロのエラーメッセージは

マクロの起動
"ShellError: #138"
"ShellError: #409"
"ShellError: #138"
"ShellError: #409"
"ShellError: #138"
"ShellError: #409"
フォルダダイアログ表示
...

でした。
とりいそぎ報告まで。

[ ]