8

我正在编写一个需要两个显示器的应用程序:一个用于控制面板,另一个用于输出。我所拥有的是:如果只有一个显示器,应用程序会在上面显示两个表单,但如果有两个,则输出表单会转到另一个。问题是这只发生在应用程序启动时。换句话说,如果应用程序在连接第二个显示器之前已经在运行,则除非用户手动将输出发送到新显示器(假设他们知道如何操作),否则不会发生任何事情。我想要的是,当连接新显示器时,即使应用程序正在运行,输出表单也会自动发送给它。我认为这与在线程中轮询端口有关,但我不知道该怎么做。任何人都可以帮助如何做到这一点?如果有更好的解决方案,我会很高兴地欢迎它。

(我会提供部分代码,但我是用手机输入的)

4

3 回答 3

11

看这里:http: //msdn.microsoft.com/en-us/library/system.windows.forms.control.wndproc.aspx

有一个例子可以帮助你。尝试这样的事情:

protected override void WndProc(ref Message m) 
{
    const uint WM_DISPLAYCHANGE = 0x007e;

    // Listen for operating system messages. 
    switch (m.Msg)
    {
        case WM_DISPLAYCHANGE:

            // The WParam value is the new bit depth
            uint width = (uint)(m.LParam & 0xffff);
            uint height = (uint)(m.LParam >> 16);
            break;                
    }
    base.WndProc(ref m);
}
于 2012-08-16T10:17:47.770 回答
1

您可以使用WndProcScreen.AllScreens.Length

[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
    protected override void WndProc(ref Message m)
    {
        if (Screen.AllScreens.Length > 1) //example
        {


        }
        base.WndProc(ref m);
    }

更多信息:

于 2017-12-03T14:49:38.023 回答
0

您可以包括一个计时器,例如每 2 秒检查一次屏幕数量是否超过一个。代码可能如下所示:

timer_tick()
{
    if(Screen.AllScreens.Length >= 2)
    {
        //run code to use the second screen
    }
}

对于 C# 的初学者来说,它很容易使用。

于 2012-08-16T09:44:09.447 回答