Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何通过批处理Vbscript混合脚本获取新生成的进程的窗口标题?_Batch File_Cmd_Vbscript_Automation_Group Policy - Fatal编程技术网

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

Batch file 如何通过批处理Vbscript混合脚本获取新生成的进程的窗口标题?,batch-file,cmd,vbscript,automation,group-policy,Batch File,Cmd,Vbscript,Automation,Group Policy,我正在尽可能地自动化组策略编辑过程 我有以下脚本来生成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(

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

我有以下脚本来生成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

如何激活新生成的gpedit.msc进程打开的窗口?具体来说,如何知道已打开窗口的名称/标题?本地组…编辑器不起作用。

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

在本例中,我首先需要选择Microsoft管理控制台窗口,因为它是生成实际本地组策略编辑器子进程的父进程

因此,这段代码通过优先发送大量键来选择以字母W开头的第一个Windows组件,是的,您确实需要管理员提升才能在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轻松编辑。要查找组策略设置的等效注册表项,请执行以下操作:

从SysInternals下载名为processmonitor的工具。 运行它并单击过滤器>过滤器。 现在创建两个过滤器,如:进程名-is-mmc.exe-然后包括和操作-is-RegSetValue-然后包括。 现在编辑组策略设置,注册表项将显示在Process monitor中。 和在VBScript中编辑注册表的函数:

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

你的回答没问题,但我想使用默认系统做一些事情,即不安装其他工具/应用程序,谢谢你的想法。