読者です 読者をやめる 読者になる 読者になる

秀丸でコマンドプロンプトの操作

まずはコマンドプロンプトへの貼り付け方.Ctrl+Vメッセージを送ってやっても貼り付けが効かないので,コマンドプロンプトの「貼り付け」コマンドのメニューIDを直接送ることで実現する.

以下のマクロは次のコマンドをコマンドプロンプトで打つのと同じ操作を実現する.単純な実行なら何の問題も無いのだが,コマンドプロンプトが何個も出てくると邪魔なので事前にコマンドプロンプトウィンドウを探している.

python %編集中のファイル名%

流れとしてはコマンドをクリップボードにセットして,コマンドプロンプトクリップボードの中身を貼り付けてねっていうメッセージを送るだけ.

if(filename == "")
{
    SAVEAS;
}
if(filetype != ".py")
{
    endmacro;
}
save;
$python = "python " + basename;
$command = "cmd.exe /k " + $python;
$cmd_title = "C:\\Windows\\system32\\cmd.exe";
$cdcmd = "cd " + directory;

// コマンドプロンプトウィンドウを探す
#window = findwindow($cmd_title);
if(#window != 0)
{
    // 専用DLLを呼び出してコマンドプロンプトを前面に持ってくる
    // プログラムを動かすだけならここは無くても問題ない
    loaddll "custom.dll";
    #result = dllfunc("activate_window", #window);
    freedll;
    
    // ディレクトリの移動
    // コマンドに改行コードを加えてコピペ時に実行させる
    setclipboard $cdcmd + "\x0D\x0A";

    // WM_COMMAND:0x0111
    // コマンドプロンプトのメニュー「貼り付け」のID:65521
    #result = sendmessage(#window, 0x0111, 65521, 0);
    
    // Pythonの実行
    setclipboard $python + "\x0D\x0A";
    #result = sendmessage(#window, 0x0111, 65521, 0);
}
else
{
    run $command;
}
endmacro;

参考:HSPサンプル蔵(システム操作編)


あと,Pythonで実行スクリプトから呼び出されるソースを編集しているときに,上のマクロを実行するために毎回タブを切り替えないといけないが,コマンドプロンプトのヒストリを呼び出せばその必要は無い.
ただし,例によって↑キーの仮想キーコードを送っても上手くいかないので,F3やF5キーを送ることでヒストリを表示させる.

// コマンドプロンプトのヒストリを使った再実行マクロ
if(filename == "")
{
    SAVEAS;
}
save;
$cmd_title = "C:\\Windows\\system32\\cmd.exe";
$cdcmd = "cd " + directory;

#window = findwindow($cmd_title);
if(#window != 0)
{
    loaddll "custom.dll";
    #result = dllfunc("activate_window", #window);
    freedll;

    // F3でも同様にヒストリを表示させることが可能
    #result = sendmessage(#window, 0x0100, 114, 0); 
    #result = sendmessage(#window, 0x0101, 114, 0);     
    
    // ENTERの送信
    #result = sendmessage(#window, 0x0100, 0x0d, 0);
    #result = sendmessage(#window, 0x0102, 0x0d, 0);
    #result = sendmessage(#window, 0x0101, 0x0d, 0);
}
else
{
    run $command;
}
endmacro;

で上手くいくはずなんだけど,これにショートカットキーを割り当てて動かすと上手くいかない.秀丸のメニューからこのマクロを選択するとちゃんと動く.わかりません><
参考: