Vbscript 在HTA中选择ProcessId意外行为
首先,谢谢你的阅读 我有一个HTA来集中一些重复的任务。 通过ssh登录到多个服务器并发送多个命令就是其中之一 这段代码在vbs文件中像一个符咒一样工作Vbscript 在HTA中选择ProcessId意外行为,vbscript,Vbscript,首先,谢谢你的阅读 我有一个HTA来集中一些重复的任务。 通过ssh登录到多个服务器并发送多个命令就是其中之一 这段代码在vbs文件中像一个符咒一样工作 Option Explicit Dim Shell, WMI, wql, process Set Shell = CreateObject("WScript.Shell") Set WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") wql
Option Explicit
Dim Shell, WMI, wql, process
Set Shell = CreateObject("WScript.Shell")
Set WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
wql = "SELECT ProcessId FROM Win32_Process WHERE Name = 'putty.exe'"
dim cmd : cmd=InputBox("Enter command")
For Each process In WMI.ExecQuery(wql)
Shell.AppActivate process.ProcessId
Shell.SendKeys cmd & " {ENTER}"
Next
但是这个等价物,在HTA内部,只向一个或两个窗口发送命令
sub sendToPuttyWindow(cmd)
Dim Shell, WMI, wql, process
Set Shell = CreateObject("WScript.Shell")
Set WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
wql = "SELECT ProcessId FROM Win32_Process WHERE Name = 'putty.exe'"
For Each process In WMI.ExecQuery(wql)
Shell.AppActivate process.ProcessId
Shell.SendKeys cmd & " {ENTER}"
Next
end sub
目前,我正在从hta调用vbs文件,但我希望保持hta文件尽可能独立
你能帮帮我吗?不要用发送键来自动安装腻子。它将所有模拟的击键发送到当前的前台窗口,不管是什么。如果需要连续运行多个命令:请使用PuTTY套件中的。它就是为了这个目的而建的
plink -ssh -batch -m file user@host
我会检查SendKeys
API,包括等待处理选项、调试,以及众所周知的“复杂”问题。谢谢您的评论。我知道普林克,我把它用于其他目的。但对于这种情况,我需要的是向所有的putty窗口发送击键。有一些程序可以做这种事情,putty命令发送器就是一个例子。我需要使用一个交互式会话登录多个服务器,有时我想向所有打开的putty窗口发送击键。我不理解SendKeys方法的歇斯底里。@Danielo515SendKeys
的问题是它的按键会进入当前的前台窗口,不管是什么。VBScript无法可靠地将击键发送到特定窗口。链接的文档说明:指定要激活的应用程序。这可以是包含应用程序标题(如标题栏中所示)或应用程序进程ID的字符串。如您所见,进程ID是有效的输入。正如我所说,这就像一个来自外部vbs文件的魅力。无论如何谢谢你的努力嗯。。。你说得对。我不知道为什么我没有注意到“或应用程序的进程ID”部分。无论如何,我从我的答案中删除了不正确的注释。