如何通过批处理-Vbscript 混合脚本获取新生成的进程的窗口标题?



我正在尽可能地自动化组策略编辑过程。

我有以下脚本来生成gpedit.msc进程,但它的窗口一打开就会失去焦点:

FINDSTR /E "'VbsCode" %~f0 > %temp%~temp.vbs
CSCRIPT //NOLOGO %temp%~temp.vbs
Sub GPEditOptions 'VbsCode
On Error Resume Next 'VbsCode
Set WshShell = WScript.CreateObject("WScript.shell") 'VbsCode
WshShell.Visible = False 'VbsCode
WshShell.Run "gpedit.msc",0 'VbsCode
:: WshShell.AppActivate "Local Group Policy Editor" 'VbsCode
End Sub 'VbsCode
GPEditOptions 'VbsCode
:: WScript.Quit 0 'VbsCode

如何AppActivate新生成的gpedit.msc进程打开的窗口?具体来说,如何知道已经打开的窗口的名称/标题是什么"本地组。。。编辑"不起作用。

我想我最终找到了解决这个问题的方法。有不同类型的过程。

在这种情况下,我首先需要选择Microsoft Management Console窗口,因为它是产生实际";本地组策略编辑器";子进程。

因此,该代码完成了选择以字母"开头的第一个Windows组件的工作;W";通过先发送大量密钥,是的,您确实需要管理员提升才能在gpedit.msc窗口中正确选择选项:

@echo off
net file 1>nul 2>nul
if not '%errorlevel%' == '0' (
powershell Start-Process -FilePath "%0" -ArgumentList "%cd%" -verb runas >nul 2>&1
exit /b
)
cd /d %1
FINDSTR /E "'VbsCode" %~f0 > %temp%~temp.vbs
CSCRIPT //NOLOGO %temp%~temp.vbs
Sub GPEditOptions 'VbsCode
On Error Resume Next 'VbsCode
Set WshShell = WScript.CreateObject("WScript.shell") 'VbsCode
WshShell.Visible = False 'VbsCode
WshShell.Run "gpedit.msc",0 'VbsCode
WScript.Sleep 500 : WshShell.AppActivate "Microsoft Management Console" 'VbsCode
WScript.Sleep 500 : WshShell.AppActivate "Local Group Policy Editor" 'VbsCode
WScript.Sleep 500 : WshShell.sendKeys "% x{TAB}{ENTER}" 'VbsCode
WScript.Sleep 500 : WshShell.sendKeys "{TAB}{TAB}{TAB}{TAB}" 'VbsCode
WScript.Sleep 500 : WshShell.sendKeys "{DOWN}{DOWN}{ENTER}" 'VbsCode
WScript.Sleep 500 : WshShell.sendKeys "{TAB}{TAB}{TAB}{TAB}" 'VbsCode
WScript.Sleep 500 : WshShell.sendKeys "{DOWN}{DOWN}{DOWN}{DOWN}" 'VbsCode
WScript.Sleep 500 : WshShell.sendKeys "{DOWN}{DOWN}{ENTER}" 'VbsCode
WScript.Sleep 500 : WshShell.sendKeys "{TAB}{TAB}{TAB}{TAB}{W}" 'VbsCode
End Sub 'VbsCode
GPEditOptions 'VbsCode
WScript.Quit 0 'VbsCode

希望这能帮助任何面临类似问题的人。

不需要发送一堆密钥和获取组策略编辑器窗口标题。

实际上,每个组策略设置都有等效的注册表项。注册表可以从VBScript轻松编辑。查找组策略设置的等效注册表项:

  • 从SysInternal下载一个名为Process Monitor的工具
  • 运行它,然后单击"筛选">过滤器
  • 现在创建两个过滤器,如:"Process name" - "is" - "mmc.exe" - then "include""Operation" - "is" - "RegSetValue" - then "Include"
  • 现在编辑组策略设置,注册表项将显示在进程监视器中

在VBScript:中编辑注册表的函数

Function RegSetValue(regkey,value)
Dim WshShell
Set WshShell = CreateObject("Wscript.Shell")
WshShell.RegWrite(regkey,value)
End Function

最新更新