如何在双显示器上打开进程?

时间:2014-06-26 08:56:05

标签: c# winforms monitor

我有一个C#应用程序,如果有多个屏幕,应该在第二个屏幕上打开一个进程。我无法让它发挥作用。有什么想法吗?

Array screens = Screen.AllScreens;
if (screens.Length > 1)
{
    // open in the second monitor
}
else
{
    System.Diagnostics.Process.Start(InputData);
}

它应该与else中的数据相同,但只需在现在为空if的第二个监视器上打开它。

3 个答案:

答案 0 :(得分:3)

没有标准方法可以指定应用程序在启动时显示在哪个屏幕上。但是,您可以:

  • 在启动的应用程序中处理(当然,如果你有代码)
  • 在进程启动后找到主窗口的句柄,并使用Win32 interop将其移动到第二个屏幕

答案 1 :(得分:2)

您可以通过更改输入流程的MainForm来实现此目的,如下所示

public Form1()
        {
            this.StartPosition =FormStartPosition.Manual;
            InitializeComponent();

            Screen sndSc = Screen.AllScreens[1];

            if (sndSc.Primary)
            {
                sndSc = Screen.AllScreens[0];            
            }
            this.Height = sndSc.WorkingArea.Height;
            this.Width = sndSc.WorkingArea.Width; 
            this.Location = sndSc.WorkingArea.Location;   
        }

答案 2 :(得分:1)

当您放置窗户时,您应该做同样的事情。

要在任何显示器上显示窗口,您应该根据显示器的坐标重新定位它。

假设您有两台显示器,均为1920x1080,并且它们并排排列。在这种情况下,要在第二个屏幕上显示表单,您必须将表单的X坐标(或Left属性,我的猜测)设置为超过1920.