检测VB.Net中的显示设置更改



我有一台笔记本电脑,它同时具有HDMI和VGA接口;我的电视连接到HDMI端口(分辨率设置为1600x900),我的台式显示器连接到VGA(老式1280x1024)。GPU不允许同时使用两个外部端口,所以我最终不得不在一个和另一个之间切换,这取决于我是想看节目和电影,还是坐在电脑后面。

到目前为止,一切都很好。。。但是(我对此感到强迫症)我想有一个不同的壁纸,这取决于活动配置(笔记本电脑+电视或笔记本电脑+VGA),由一些脚本设置。。。

为了捕捉设置之间的变化(Intel Graphics,使用两个预设配置文件中的一个),我需要一些监视活动监视器变化的东西。

我使用SystemEvents.DisplaySettingsChanged找到了一个简单的解决方案,但这只有在我从VB.Net IDE运行代码时才有效。一旦我编译并运行exe,事件似乎就不会再被触发了。

我还尝试了使用Windows.Forms.Screen.AllScreen数组的连续循环,但同样适用:在IDE中运行得像个魅力,但在编译时,它永远不会检测到更改。

第一个选项的骨架代码(作为控制台应用程序运行):

Imports Microsoft.Win32
Imports System.Threading
Module Module1
    Public Sub MyEH2(ByVal sender As Object, ByVal e As EventArgs)
        Console.WriteLine("Display has changed")
        ' Actual code do change wallpaper comes here, natch
    End Sub
    Sub Main()
        AddHandler SystemEvents.DisplaySettingsChanged, AddressOf MyEH2
        While 1
            Thread.Sleep(1000)
        End While
    End Sub
End Module

我的问题是:为什么在IDE中启动时可以工作,而编译为EXE时不能?(换句话说:为什么编译后的版本没有检测到更改?)

我正在运行Windows 7 Home Premium并使用VB.Net 2012(Express)

我想对那些提出建议的人说声谢谢,但我走了懒惰的路。。。我下载并安装了AutoIt,并在不到10分钟的时间内成功地制作了一个可靠的exe。。。仍然使用连续循环来检查显示分辨率的变化,然后——当它发生变化时——运行一个我已经验证过的vbscript来更新壁纸文件并强制刷新桌面。

它看起来几乎是一个功能-没有bug的东西,这个看似简单的WMI查询不能从VB.Net Express可执行文件中工作。

相关内容

  • 没有找到相关文章

最新更新