電子書籍の厳選無料作品が豊富!

処理を自動化を考えていて、特定文字(例えばプロプトや、yes/noを聞いてくるような場合)を受信するのを待ち、そのプロンプトが返ってきたら、次に移る・・・・というような感じにしたいのです。

他言語での例を言うと、teratermマクロの中の「wait関数」みたいな感じに・・
wait "login"
とかして、loginが表示されるのを待って、ユーザー名を送信
wait "Password"
とかでパスワードを求められたら、パスワードを送信とかしたいのですが、出来ますでしょうか?

A 回答 (1件)

Indyのデモを下記のように変更すればUsernmae:という文字列を


受信したときだけ、ユーザー名を自動的に入力します。
複数コマンドに対応するには、TStringListなどを使えば
簡単に対応できます。

procedure TfrmTelnetDemo.IdTelnetDemoDataAvailable(Sender: TIdTelnet;
const Buffer: String);
const
CR = #13;
LF = #10;
var
Start, Stop : Integer;
i : Integer; //追加
s,rev : string; //追加
begin
if Memo1.Lines.Count = 0 then
Memo1.Lines.Add('');
Start := 1;
Stop := Pos(CR, Buffer);
if Stop = 0 then
Stop := Length(Buffer) + 1;
while Start <= Length(Buffer) do begin
Memo1.Lines.Strings[Memo1.Lines.Count - 1] :=
Memo1.Lines.Strings[Memo1.Lines.Count - 1] +
Copy(Buffer, Start, Stop - Start);
rev := Copy(Buffer, Start, Stop - Start); //追加
if Buffer[Stop] = CR then begin
Memo1.Lines.Add('');
end;
Start := Stop + 1;
if Start > Length(Buffer) then
Break;
if Buffer[Start] = LF then
Start := Start + 1;
Stop := Start;
while (Buffer[Stop] <> CR) and (Stop <= Length(Buffer)) do
Stop := Stop + 1;
end;
//ここで受信が終了しているのでコマンドを送信
if Pos('Username:',rev) > 0 then begin //追加
s := 'hogehoge'; //追加
for i := 1 to length(s) do //追加
IdTelnetDemo.SendCh(s[i]); //追加
IdTelnetDemo.SendCh(#13); //追加
//ここまで
end;
end;
    • good
    • 0
この回答へのお礼

おお・・
こんな感じに書けばいいんですね。
大変参考になりました。
やっと、プログラムの続きにいけます.

ありがとうございましたm(__)m

お礼日時:2004/08/21 13:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!