プロジェクト

全般

プロフィール

Poderosa » Poderosa_Macro_all_term_input.js

指定した複数の端末に一度に入力を行う。 - kanata, 2025/04/13 13:50

 
//----------------------------------------------------------------------------//
// Poderosa_Macro_all_term_input.js ver 0.3
// 指定した複数の端末に一度に入力を行う。
// (複数マシンで同じ作業をする必要がある時に便利)
// 2007.02.02 kanata
//----------------------------------------------------------------------------//


import Poderosa;
import Poderosa.Macro;
import Poderosa.ConnectionParam;
import Poderosa.Terminal;
import Poderosa.View;
import System;
import System.IO;
import System.Drawing;
import System.Windows.Forms;
var env = new Environment();

class MyForm extends Form
{

var combo1 : MyTextBox;
var text1 : Label;
var InputKeys = "";
function MyForm()
{
super();
Size = new System.Drawing.Size( 520, 90 );
Location = new Point( 200, 200 );
StartPosition = FormStartPosition.Manual;

// テキストフィールドの表示
text1 = new Label();
text1.Location = new Point( 5, 5 );
text1.Text = "コマンドを入力";
Controls.Add( text1 );

// テキストボックスの場合
combo1 = new MyTextBox();
combo1.Width = 500;
combo1.Location = new Point( 5, 28 );
Controls.Add( combo1 );
}
// ダイアログがxを押されて閉じられたとき
protected function CheckCloseDialog( e : FormClosingEventArgs )
{
// ウィンドウを閉じる
InputKeys = "";
MyForm( Parent ).combo1.Text = "";
MyForm( Parent ).Close();
}
class MyTextBox extends TextBox
{

protected function OnKeyUp( e : KeyEventArgs )
{
if ( e.KeyCode == System.Windows.Forms.Keys.Enter )
{
if ( MyForm( Parent ).combo1.Text.Length == 0 )
{
// ウィンドウを閉じる
InputKeys = "[ENTER]";
MyForm( Parent ).combo1.Text = "";
MyForm( Parent ).Close();
}
else
{
// ウィンドウを閉じる
InputKeys = MyForm( Parent ).combo1.Text;
MyForm( Parent ).combo1.Text = "";
MyForm( Parent ).Close();
}
}
}

}

}


all_term_input();

function all_term_input() {

/************************/
/* 対象ターミナルの選択 */
/************************/
var con : Connection[];
con = new Connection[15];
var i=0;
var max_term=1;
var btn_input="Yes";

while ( btn_input == "Yes" )
{
btn_input = System.Windows.Forms.MessageBox.Show("選択したらYES・選択終了はNoを押して下さい\n選択数:"+i,"対象ターミナルの選択", MessageBoxButtons.YesNo,MessageBoxIcon.Question);
if ( btn_input == System.Windows.Forms.DialogResult.Yes )
{
/* アクティブウィンドウのコネクションを保持 */
btn_input = "Yes";
con[i] = env.Connections.ActiveConnection;
if(con==null) {
env.Util.MessageBox("This macro requires an established connection to shell.");
return;
}
i=i+1;
}
else
{
/* アクティブウィンドウ選択処理を終了 */
btn_input = "No";
}
}
max_term=i;

/******************/
/* フォームの作成 */
/******************/
var f : MyForm = new MyForm();
var flag = true;
/**********/
/* ループ */
/**********/
while( flag == true )
{
// ダイアログ表示
f.InputKeys="";
f.ShowDialog();
// 空打ちの行を認める
if ( f.InputKeys == "[ENTER]" )
{
f.InputKeys="";
// 送信
for(i=0;max_term > i;i++)
{
con[i].TransmitLn(f.InputKeys);
}
}
else{
// 送信
for(i=0;max_term > i;i++)
{
con[i].TransmitLn(f.InputKeys);
}
// フォームが閉じられた判定→終了
if ( f.InputKeys.Length == 0 )
{
flag=false;
}
}
}

}
(1-1/6)