在OS级别检测引发事件(OS外观)

时间:2012-05-28 13:46:11

标签: c# .net windows winforms operating-system

我有一个似乎常见的问题。我在最令人敬畏的计算机之一上运行Windows 7家庭高级版(当它去年购买时),某些视觉效果会自动关闭。

我的平均用户体验评分很高,因此无法解释为何会出现这种情况。关闭的唯一功能是“拖动时显示窗口内容”选项。这真让我烦恼。

目前在线无法解决此问题。除了“必须与您计算机上安装的其他应用程序发生冲突。”

是的,我确实知道应用程序导致了这种冲突。这是我的血腥互联网服务提供商的软件 - 你知道......当你连接到网络时,你绝对必须打开这个应用程序。

所以,我有一个想法。如果我可以订阅某个活动,以便我在后台运行的应用程序会检测到“拖动时显示窗口内容”选项何时关闭,那么该应用程序只会将其重新打开。

当我手动执行此操作时,它似乎保持有效一两个小时,然后再次关闭。

是否可以处理这些类型的事件,并重新启动某些视觉效果功能?如果是的话,这有什么资源吗?

我还没有在这个sibject上找到任何东西。

enter image description here

1 个答案:

答案 0 :(得分:1)

是的,当更改系统设置时,WM_SETTINGSCHANGE消息将发送到所有窗口。然后,您可以使用SPI_GETDRAGFULLWINDOWS调用SystemParametersInfo以确定是否禁用“拖动时显示窗口内容”并使用SPI_SETDRAGFULLWINDOWS启用它。

所以你需要做的就是创建一个带有表单的应用程序(甚至可以保持隐藏状态)并覆盖表单WndProc并处理WM_SETTINGSCHANGE消息并调用SystemParametersInfo使用p / Invoke。 SystemParamtersInfo is available at pinvoke.net

的p / Invoke定义

更容易的是更改HKCU\Control Panel\Desktop\DragFullWindows注册表值的安全性,以便无法更改。