以编程方式更新桌面“拖动时显示窗口内容”设置

Update desktop "show window contents while dragging" setting programatically

提问人:Eli 提问时间:7/12/2009 更新时间:10/22/2015 访问量:3743

问:

我的一个程序似乎正在更改显示属性>外观>效果>显示窗口内容,同时每隔几个小时将设置拖动一次。

我不确定确切是哪个程序,或者它何时发生。我有许多程序似乎是罪魁祸首——壁纸旋转器、用于多个显示器的软件、多个虚拟桌面和开关,以及其他一些程序。

我只是想创建一个小批处理脚本来定期运行并将设置重新设置为打开。

有谁知道如何在 Windows 中执行此操作?我正在使用 xp pro sp3。

谢谢!

Windows 批处理文件 设置

评论


答:

0赞 SqlRyan 7/12/2009 #1

我怀疑它保存在注册表中 - 也许是 [HKEY_CURRENT_USER\Control Panel\Desktop] - “DragFullWindows”?

使用批处理文件,可以很容易地每隔一小时左右将注册表设置翻转回“1”。

4赞 Thomas 7/12/2009 #2

您可以使用 RegMon 查找不断更改设置的程序。也许这是一个比绕过它更好的开始。

评论

0赞 Sean 7/12/2009
这可能有效,但鉴于我在回答中提到的内容(即在您注销并重新登录之前仅更改注册表不起作用),如果罪魁祸首以编程方式更改设置(即不直接更改注册表项),监视注册表可能不会报告正确的事情。这取决于 RegMon 的工作方式。
1赞 Sean 7/12/2009 #3

似乎控制该首选项的注册表设置是 HKCU\Control Panel\Desktop\DragFullWindows。你可以在这里阅读更多关于它的信息。但是,在我自己的计算机上尝试它不会立即注册更改,因此批处理脚本不会这样做。您可能需要编写一个程序来使用 SystemParametersInfo() 来操作它。您可以将 SPI_SETDRAGFULLWINDOWS 参数传递给它。这里有一个页面对此进行了更多解释。这里有一个页面,显示了如何调用它,尽管不是针对相同的参数。

5赞 Jewel S 7/12/2009 #4

最好的选择是使用受支持的 API 以编程方式执行此操作。我还没有测试过这个,但它应该可以解决问题:

SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, 
                     TRUE,
                     NULL,
                     SPIF_UPDATEINIFILE | SPIF_SENDCHANGE)

您可以使用SPI_GETDRAGFULLWINDOWS来查看位是否已被翻转,以避免不必要地触发WM_SETTINGCHANGE。

评论

2赞 Dmitry 12/19/2013
在 Windows 7 x64 上测试 - 有效!选项在 SystemParametersInfo() 调用后立即生效 - 无需注销。(示例应用代码:gist.github.com/neokril/8035995)
0赞 abstrask 5/8/2015
谢谢德米特里,效果很好!你有没有机会让应用程序坐在系统托盘中并定期检查和修复?很抱歉这么厚颜无耻地问,但不幸的是我没有C++技能:(
3赞 Aravind Banerjee 10/1/2015 #5

这个问题有一个简单有效的解决方案。在记事本中,键入以下行:

Windows 注册表编辑器版本 5.00

[HKEY_CURRENT_USER\控制面板\桌面]“DragFullWindows”=“1”

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VisualEffects\DragFullWindows]“CheckedValue”=dword:00000001 “UncheckedValue”=dword:00000001

将文件另存为“Show Window Contents.reg” 双击此文件并重新启动将永久解决问题。如果您觉得这有用,请发布消息。

阿拉文德·班纳吉