Windows 7/10 -使应用程序在不同的显示器上启动
本文关键字:显示器 启动 应用程序 Windows | 更新日期: 2023-09-27 18:05:35
我正在将一个Linux应用程序移植到windows上,有两个可执行文件需要分别在主显示器和副显示器上启动。
在Linux中是通过#!/bin/sh脚本,比如
display_start_dualhead LVDS 800 480 DVI 1024 768 24出口screen_main = $ LVDS出口screen_secondary = $ DVI
如何在Windows中做到这一点,在监视器1中启动exe1,在监视器2中启动exe 2 ?
windows上的进程创建是通过CreateProcess API执行的,该API传递一个STARTUPINFO结构体。这个结构允许将初始可见性和位置信息传递给启动的进程,目的是进程在创建和显示其初始窗口时使用这些信息。
我不知道有一个内置的命令行工具,它将用每个监视器的坐标填充位置字段,尽管可以指示start
命令启动最大化或最小化窗口。
尽管如此,制作一个列举监视器并填充这些字段的应用程序应该是一个简单的练习。也就是说,这样做之后,您可能会发现应用程序会忽略这些字段并直接定位它们的窗口。
试试这个:
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();
}
或
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();
}