本帖最后由 runtium 于 2011-9-4 20:58 编辑
在利用Run来建立teraterm的ssh连接时, 返回的pid并不是最后连接完成窗口(ssh)的进程id,而是一个叫TTSSH的进程id.
==================================================
-->Line(0013): pid1=3012,hwnd1=0x000A089A
+======================================================
-->Line(0014): title1=TTSSH: SCP sending file
+======================================================
-->Line(0017): ====what i want====
+======================================================
-->Line(0018): pid2=3856,hwnd=0x001906DE
+======================================================
-->Line(0019): title2=192.168.0.3:22 - ~ VT
+======================================================
我最终想要的是ssh连接窗口的handle, 因为可能同时存在多个这样的ssh连接, teraterm窗口的title是一样的, 所以不能使用title来获得handle
求各位大侠帮忙!有不对的地方,请指教!
#include <Array.au3>
Opt("WinTitleMatchMode", 2) ;1=start, 2=subStr
$ssh = "C:\Program Files\teraterm\ttermpro.exe 192.168.0.3:22 /ssh2 /auth=password /user=Admin /passwd=admin"
$pid = Run($ssh,"",@SW_MINIMIZE)
Sleep(5000)
$hwnd = _PID2HWND($pid)
_DebugPrint("pid1="&$pid&",hwnd1="&$hwnd)
_DebugPrint("title1="&WinGetTitle($hwnd))
_DebugPrint("====what i want====")
_DebugPrint("pid2="&WinGetProcess("192.168.0.3")&",hwnd="&WinGetHandle("192.168.0.3"))
_DebugPrint("title2="&WinGetTitle("192.168.0.3"))
Func _PID2HWND($pid)
$list = WinList()
For $i = 1 To $list[0][0]
If WinGetProcess($list[$i][1]) = $pid Then
Return $list[$i][1]
EndIf
Next
Return 0
EndFunc
Func _DebugPrint($s_text, $line = @ScriptLineNumber)
ConsoleWrite( _
"-->Line(" & StringFormat("%04d", $line) & "):" & @TAB & $s_text & @LF & _
"+======================================================" & @LF)
EndFunc ;==>_DebugPrint
|