本人菜鳥,利用delphi7+win7環境,使用Doscommand控制元件+plink做一個ssh登錄服務器程式,這個程式分幾步執行(代碼如下),遇到一個問題,執行第一段代碼順利,執行第二段代碼時不是第一段代碼執行視窗內輸入字符,而是又打開一個視窗。程式執行后,在任務管理器中可以看到8個plink行程和8個conhost控制臺視窗主機,等于打開8個視窗。若是將第一行更換為s:='cmd /c putty -load 123 -pw 111111 [email protected]',可以看到確實是打開了8個視窗,并不是在一個視窗下連續執行。請教各位老師,如何在同一個視窗內(也就是第一段代碼生成的視窗內)不斷輸入字符來執行程式。
//第1步 登錄,登錄成功后進入選單選項
s:='plink -ssh -pw 111111 [email protected]';//ssh 默認埠22
memo1.Lines.Clear;
memo1.Lines.Add('當前命令 '+s+' 回傳結果');
memo1.Lines.Add('');
Doscommand1.CommandLine :=s;
Doscommand1.OutputLines :=Memo1.Lines;
DosCommand1.Execute;
//第2步 選擇選單 按 1
memo1.Lines.Clear;
s:='1';
memo1.Lines.Add('當前命令 '+s+' 回傳結果');
memo1.Lines.Add('');
DosCommand1.SendLine(s,true) ;
Doscommand1.OutputLines :=Memo1.Lines;
DosCommand1.Execute;
//第3步 輸入IP,按IP查詢設備
memo1.Lines.Clear;
s:='/i:10.10.15.26';
memo1.Lines.Add('當前命令 '+s+' 回傳結果');
memo1.Lines.Add('');
DosCommand1.SendLine(s,true) ;
Doscommand1.OutputLines :=Memo1.Lines;
DosCommand1.Execute;
//第4步 選擇要登錄的設備 按 1
memo1.Lines.Clear;
s:='1';
memo1.Lines.Add('當前命令 '+s+' 回傳結果');
memo1.Lines.Add('');
DosCommand1.SendLine(s,true) ;
Doscommand1.OutputLines :=Memo1.Lines;
DosCommand1.Execute;
//第5步 命令選項,按 1 ,自動進入telnet(埠23)
memo1.Lines.Clear;
s:='1';
memo1.Lines.Add('當前命令 '+s+' 回傳結果');
memo1.Lines.Add('');
DosCommand1.SendLine(s,true) ;
Doscommand1.OutputLines :=Memo1.Lines;
DosCommand1.Execute;
//第5步 命令選項,按 1 ,自動進入telnet(埠23)
memo1.Lines.Clear;
s:='1';
memo1.Lines.Add('當前命令 '+s+' 回傳結果');
memo1.Lines.Add('');
DosCommand1.SendLine(s,true) ;
Doscommand1.OutputLines :=Memo1.Lines;
DosCommand1.Execute;
//第6步 輸入telnet用戶名
memo1.Lines.Clear;
s:='www';
memo1.Lines.Add('當前命令 '+s+' 回傳結果');
memo1.Lines.Add('');
DosCommand1.SendLine(s,true) ;
Doscommand1.OutputLines :=Memo1.Lines;
DosCommand1.Execute;
//第7步 輸入telnet 密碼
memo1.Lines.Clear;
s:='123456';
memo1.Lines.Add('當前命令 '+s+' 回傳結果');
memo1.Lines.Add('');
DosCommand1.SendLine(s,true) ;
Doscommand1.OutputLines :=Memo1.Lines;
DosCommand1.Execute;
//第8步 輸入telnet 命令
memo1.Lines.Clear;
s:='show mac';
memo1.Lines.Add('當前命令 '+s+' 回傳結果');
memo1.Lines.Add('');
DosCommand1.SendLine(s,true) ;
Doscommand1.OutputLines :=Memo1.Lines;
DosCommand1.Execute;
uj5u.com熱心網友回復:
上面代碼第五步 復制粘貼時重復了uj5u.com熱心網友回復:
沒辦法 換思路 采用隱藏視窗打開 聚焦視窗 模擬鍵盤輸入的方式winexec('putty -load 123 -pw 111111 [email protected]',sw_hide);
h:=findwindow(nil,'123');
s:='1';
for i:=1 to length(s) do begin
SetForegroundWindow(h);
SwitchToThisWindow(h,true);
MyKeyPress(s[i]);
end;
keybd_event(13,0,0,0);
keybd_event(13,0,KEYEVENTF_KEYUP,0);
有好的辦法請各位告知 謝謝
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/44372.html
標籤:網絡通信/分布式開發
