以编程方式更新桌面“拖动时显示窗口内容”设置
Posted
技术标签:
【中文标题】以编程方式更新桌面“拖动时显示窗口内容”设置【英文标题】:Update desktop "show window contents while dragging" setting programatically 【发布时间】:2010-11-10 00:21:25 【问题描述】:我的一个程序似乎正在更改“显示属性”>“外观”>“效果”>“显示窗口内容”,同时每隔几个小时将设置拖动为关闭。
我不确定具体是哪个程序,或者何时发生。我有许多看起来可能是罪魁祸首的程序 - 壁纸旋转器、多显示器软件、多个虚拟桌面和切换,以及其他一些。
我只是想创建一个小批处理脚本来定期运行并将设置重新设置为开启。
有人知道如何在 Windows 中执行此操作吗?我正在使用 xp pro sp3。
谢谢!
【问题讨论】:
【参考方案1】:最好的选择是使用支持的 API 以编程方式执行此操作。我没有对此进行测试,但它应该可以解决问题:
SystemParametersInfo(SPI_SETDRAGFULLWINDOWS,
TRUE,
NULL,
SPIF_UPDATEINIFILE | SPIF_SENDCHANGE)
您可以使用 SPI_GETDRAGFULLWINDOWS 查看该位是否已翻转以避免不必要地触发 WM_SETTINGCHANGE。
【讨论】:
在 Windows 7 x64 上测试 - 可以!选项在 SystemParametersInfo() 调用后立即生效 - 无需注销。 (示例应用代码:gist.github.com/neokril/8035995) 谢谢德米特里,效果很好!您是否有机会让应用程序位于系统托盘中并定期检查和修复?抱歉问得这么厚脸皮,但不幸的是我没有 C++ 技能:(【参考方案2】:您可以使用RegMon 查找不断更改您的设置的程序。也许这比绕开它是一个更好的开始。
【讨论】:
这可能有效,但考虑到我在回答中提到的内容(即在您注销并重新登录之前,仅更改注册表无效),如果罪魁祸首正在以编程方式更改设置(即不直接更改注册表项),监视注册表可能不会报告正确的事情。这取决于 RegMon 的工作方式。【参考方案3】:这个问题有一个简单有效的解决方案。在记事本中键入以下行:
Windows 注册表编辑器 5.00 版
[HKEY_CURRENT_USER\Control Panel\Desktop] "DragFullWindows"="1"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VisualEffects\DragFullWindows] "CheckedValue"=dword:00000001 "UncheckedValue"=dword:00000001
将文件另存为“Show Window Contents.reg” 双击此文件并重新启动将永久解决问题。如果您觉得这很有用,请发布消息。
阿拉文德·班纳吉
【讨论】:
【参考方案4】:控制该首选项的注册表设置似乎是 HKCU\Control Panel\Desktop\DragFullWindows。你可以阅读更多关于它的信息here。但是,在我自己的计算机上尝试不会立即注册更改,因此批处理脚本不会这样做。您可能必须编写一个程序来使用 SystemParametersInfo() 对其进行操作。您可以将 SPI_SETDRAGFULLWINDOWS 参数传递给它。 Here's 更多解释的页面。 Here's 显示如何调用它的页面,尽管参数不同。
【讨论】:
【参考方案5】:我怀疑它保存在注册表中 - 可能是 [HKEY_CURRENT_USER\Control Panel\Desktop] - “DragFullWindows”?
使用批处理文件每隔一小时左右将注册表设置翻转回“1”会很容易。
【讨论】:
以上是关于以编程方式更新桌面“拖动时显示窗口内容”设置的主要内容,如果未能解决你的问题,请参考以下文章
WordPress Gutenberg,以编程方式更新帖子内容