windows - setx 使 Windows 资源管理器滚动到顶部

标签 windows batch-file command-line

我有一个包含大量批处理文件的文件夹 -- 超过了 Windows 资源管理器一次在屏幕上显示的数量。其中一些聚集在一起,需要按顺序执行(但不是在相同批处理中,因为在批处理文件可以处理的步骤之外,中间步骤是必需的)。

我的一个文件按预期工作,但当我运行该文件时,它会导致资源管理器窗口滚动到列表顶部。这并不严重——但它是一种轻微的刺激,因为它会分散我对上次运行的文件的注意力。 (另外,这很很奇怪,我想了解发生了什么。)

我已将问题隔离到 setx 调用:如果我注释掉这一行,批处理文件的执行对显示它所在目录的资源管理器窗口没有任何影响。如果我取消注释行并双击该文件,批处理文件将执行并且它的资源管理器窗口滚动到顶部。

为了诊断,我将其简化为一行:我创建了一个名为 Test.bat 的文件,其中只有以下内容行:

setx TestValue abc

我在其中放入了一个文件夹,里面有足够多的文件,所以它们不会同时全部可见 -- 而且,因为它以 T 开头,Test.bat显示在底部附近。当我双击它时,窗口滚动到顶部。

我使用的是 Windows 10。并在另一台计算机上进行了尝试(结果相同),只是为了确定这不是我原来机器的问题。

是否可以通过命令开关或更改 Windows 配置来消除这种行为?

最佳答案

为什么?

setx 命令发送 WM_SETTINGCHANGE向所有顶级窗口发送消息以通知对环境的更改(lParamEnvironment)。

这会导致资源管理器窗口重新处理它们的环境,并在此过程中重新定位文件列表。

如何解决?

setx 中没有任何方法可以禁用消息发送,而且我不知道一种方法(仅使用操作系统)来指示 explorer 窗口不处理接收到的消息(需要处理以便新启动的进程可以看到新变量)。

我看到处理这个“问题”的唯一方法是直接将变量写入注册表,并且只在需要通知其余窗口环境更改时才调用 setx

关于windows - setx 使 Windows 资源管理器滚动到顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43619339/

相关文章:

php - exec 在 window server 2008 php 上不起作用

scripting - 计数在批处理文件中不起作用

batch-file - 使用变量批量重命名文件

c++ - 允许表单接受命令行参数

php - 如何将变量从 php 页面传递到命令行

java - 在 WINDOWS 的 Unix 终端上编译 Java 程序

windows - Windows 上的 Cordova 安装和 NPM 路径

PHP 不会在 Windows 上提取 zip 文件 ER_OPEN

windows - 使用批处理文件检查特定文件大小

java - I/O 错误异常处理 : Unreachable catch block for IOException. try 语句主体永远不会抛出此异常