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

时间:2015-02-22 16:29:40

标签: vb.net event-handling screen-resolution

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

到目前为止,这么好......但是(我是关于那些东西的OCD)我希望有一个不同的壁纸,取决于活动配置(笔记本电脑+电视或笔记本电脑+ VGA),由一些脚本设置... < / p>

要捕捉设置之间的变化(英特尔图形,使用两个预设配置文件中的一个),我需要监视活动监视器的内容以进行更改。

我使用 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)

1 个答案:

答案 0 :(得分:0)

我想感谢那些提出建议的人,但我采取了懒惰的方式......我下载并安装了 AutoIt ,并设法用更少的东西制作一个可靠的工作程序超过10分钟...仍然使用连续循环来检查显示分辨率的变化,然后 - 当它确实 - 运行一个vbscript我已经验证工作更新壁纸文件并强制刷新桌面

它几乎看起来像是一个功能 - 不是一个bug 的东西,这个看似简单的WMI查询无法使用VB .Net Express可执行文件。