我正在将一个Linux应用程序移植到Windows,有两个可执行文件需要分别在主显示器和辅助显示器上启动。
在Linux中,它通过#!/ bin / sh脚本完成,类似于
display_start_dualhead LVDS 800 480 DVI 1024 768 24 export screen_main = $ LVDS export screen_secondary = $ DVI
如何在Windows中执行此操作,在监视器1中启动exe1,在监视器2中启动exe 2?
答案 0 :(得分:1)
试试这个:
function void showOnMonitor1()
{
Screen[] sc;
sc = Screen.AllScreens;
//get all the screen width and heights
Form2 f = new Form2();
f.FormBorderStyle = FormBorderStyle.None;
f.Left = sc[0].Bounds.Width;
f.Top = sc[0].Bounds.Height;
f.StartPosition = FormStartPosition.Manual;
f.Location = sc[0].Bounds.Location;
Point p = new Point(sc[0].Bounds.Location.X, sc[0].Bounds.Location.Y);
f.Location = p;
f.WindowState = FormWindowState.Maximized;
f.Show();
}
function void showOnMonitor2()
{
Screen[] sc;
sc = Screen.AllScreens;
//get all the screen width and heights
Form2 f = new Form2();
f.FormBorderStyle = FormBorderStyle.None;
f.Left = sc[1].Bounds.Width;
f.Top = sc[1].Bounds.Height;
f.StartPosition = FormStartPosition.Manual;
f.Location = sc[1].Bounds.Location;
Point p = new Point(sc[1].Bounds.Location.X, sc[1].Bounds.Location.Y);
f.Location = p;
f.WindowState = FormWindowState.Maximized;
f.Show();
}
OR
if (System.Windows.Forms.SystemInformation.MonitorCount != 1)
{
Form form2 = new Form();
form2.Left = System.Windows.Forms.SystemInformation.PrimaryMonitorSize.Width + 1;
form2.Top = 0;
form2.ShowDialog();
}
答案 1 :(得分:1)
Windows上的流程创建是通过传递CreateProcess结构的STARTUPINFO API执行的。此结构允许将初始可见性和位置信息传递给已启动的流程,目的是在创建 - 并显示 - 其初始窗口时,流程将使用此流程。
我不知道内置的命令行工具会使用每个监视器的坐标来填充位置字段,尽管可以指示start
命令启动窗口最大化或最小化。
尽管如此,创建一个枚举监视器并填充这些字段的应用程序应该是一项微不足道的练习。也就是说 - 完成此操作后,您可能会发现应用程序忽略这些字段并直接定位其窗口。