Board logo

标题: [问题求助] 【已解决】-求助VBS代码为何有的窗口能用代码关闭,有的不能? [打印本页]

作者: liupeiji03    时间: 2024-9-9 00:30     标题: 【已解决】-求助VBS代码为何有的窗口能用代码关闭,有的不能?

本帖最后由 liupeiji03 于 2024-9-10 16:30 编辑
  1. Set oShell = CreateObject("WScript.Shell")
  2. If oShell.AppActivate("Untitled - Notepad") Then
  3.    WScript.Sleep 500
  4.    oShell.SendKeys "%{F4}"
  5. End If
复制代码
以上是本人网上搜索得来的代码,根据测试,有的窗口能关闭,有的不能。比如窗口标题设置为本地连接,打开本地连接的状态窗口时可以用该代码关闭,

而打开本地连接的属性窗口时却无法用该代码关闭。

不知道这是什么原因?还是窗口也有很多种属性?
另外这段代码如何修改可以让它一直在后台运行,检测到对应的窗口标题就关闭?
作者: czjt1234    时间: 2024-9-9 05:58

只对当前活动窗口有效,其它应用程序可能会抢占活动窗口
作者: Batcher    时间: 2024-9-9 09:06

回复 1# liupeiji03


如果需要上传文件,请用使用网盘。

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
作者: liupeiji03    时间: 2024-9-9 09:24

回复 2# czjt1234


    应该不是吧,运行这个代码后它就会把含这个标题的窗口放到最前了。我测试了一下,打开一个窗口后再在这个软件菜单操作打开的窗口就关不了了。
作者: liupeiji03    时间: 2024-9-9 09:38

回复 3# Batcher


    如图,打开本地连接状态后,在任务栏可以看到有一个本地连接状态的窗口。在本地连接状态窗口点击属性打开本地连接属性的窗口,可以看到任务栏还是只有一个本地连接状态的窗口。第一个能用代码关闭,第二个就不能了。

作者: flashercs    时间: 2024-9-9 10:48

  1. ' 脚本必须以管理员身份运行
  2. Set oShell = CreateObject("WScript.Shell")
  3. Do
  4.   If oShell.AppActivate("本地连接 ",True) Then ' 窗口标题 前缀
  5.     ' WScript.Echo "Closing window:" & Timer
  6.      WScript.Sleep 500
  7.      oShell.SendKeys "%{F4}"
  8.      WScript.Sleep 1000 ' 避免重复关闭窗口
  9.   End If
  10.   WScript.Sleep 1000 ' 延迟,避免CPU占用过高
  11. Loop
复制代码
两个窗口都能关闭
作者: liupeiji03    时间: 2024-9-9 14:01

回复 6# flashercs


    测试过了还是不能关闭本地连接的属性窗口。
作者: flashercs    时间: 2024-9-9 15:25

回复 7# liupeiji03


    必须以管理员身份运行vbs,win7,win10,wi11我都测试通过,完美.
作者: liupeiji03    时间: 2024-9-9 17:38

回复 8# flashercs


    你好,我在win7下以administrator账户测试成功了,但在其他账户下我还没找到方法怎样以管理员身份运行vbs文件。还有个问题就是我想以这段代码关闭“本地连接 属性”窗口,我将标题改为了“本地连接 属性”,但是无法关闭窗口。不知道是否是本地连接与属性之间填的空格问题导致不匹配
作者: flashercs    时间: 2024-9-9 20:11

回复 9# liupeiji03


    目的是 不让用户修改 本地连接 属性吗?用关闭窗口的方式不适用,即使创建计划任务以Administrators用户执行也不能关闭 其他用户的窗口.
最好的方式是通过权限设置 禁止任何人读取 netshell.dll,这样本地连接 属性就 任何人无法访问了.
作者: liupeiji03    时间: 2024-9-9 20:18

回复 10# flashercs


    是的,主要是针对有管理员权限的域用户,禁止其修改IP。你说的这个netshell.dll我还没试过,我先测试一下。
作者: liupeiji03    时间: 2024-9-9 21:12

回复 10# flashercs


    经过测试,修改netshell.dll文件为只有读取权限,会导致本地连接打叉,本地连接的状态窗口也打不开,跟禁用服务network connections的效果差不多,不推荐这样子搞。
但是经过你的提示,我发现修改netcfgx.dll文件为只有读取权限,就可以达到用户无法打开属性窗口的效果,如图:


现在的问题就是如何通过域策略来控制修改该文件的权限?否则在每台机这样设置也不现实。
作者: flashercs    时间: 2024-9-9 21:37

回复 12# liupeiji03


   组策略 开机/关机脚本
作者: liupeiji03    时间: 2024-9-9 22:04

回复 13# flashercs


    脚本我不会写,大佬可否赐教?首先要获取该文件的所有权,然后再将文件的administrators组修改为只读权限。
作者: flashercs    时间: 2024-9-9 23:29

回复 14# liupeiji03
  1. @echo off
  2. takeown /f %windir%\system32\netcfgx.dll
  3. icacls %windir%\system32\netcfgx.dll /deny Everyone:R
  4. icacls %windir%\system32\netcfgx.dll /setowner "NT SERVICE\TrustedInstaller"
复制代码

作者: liupeiji03    时间: 2024-9-9 23:36

回复 13# flashercs


   @echo offcd /d %~dp0
%1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","::",,"runas",1)(window.close)&exit
takeown /f %SystemRoot%\System32\netcfgx.dll
icacls %SystemRoot%\System32\netcfgx.dll /remove:g Users
icacls %SystemRoot%\System32\netcfgx.dll /grant:r Administrators:r

用以上代码可以实现对文件权限的修改,但是运行这个脚本时会弹出用户账户控制的对话框,这个有办法让他不弹出来直接默认运行吗?

作者: flashercs    时间: 2024-9-10 00:05

本帖最后由 flashercs 于 2024-9-10 00:06 编辑

回复 16# liupeiji03

你把UAC 彻底关闭就好了.
    组策略 开机脚本是以 system用户运行的,没有UAC提示.
作者: liupeiji03    时间: 2024-9-10 16:25

回复 17# flashercs


    感谢大神的指导!至此,这个问题已经算解决了。最终方案是以域控策略下发登录脚本来修改netcfgx.dll文件的权限来达到禁止用户访问本地连接属性的窗口。




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2