Mat*_*ren 19 c# desktop multiple-monitors winforms
是否可以以编程方式启用第二个监视器并使用C#将Windows桌面扩展到它上面?它需要相当于打开下图中的复选框.

Pop*_*lin 13
你基本上需要做什么:
使用EnumDisplayDevices()API调用枚举系统上的显示设备并查找那些没有
DISPLAY_DEVICE_ATTACHED_TO_DESKTOP标志设置(这将包括任何镜像设备,因此并非所有设备都是物理显示器.)一旦找到显示设备,您需要获得有效的显示模式才能将其更改为,您可以通过调用EnumDisplaySettingsEx找到它( )API调用 - 通常你会显示所有可用的模式并允许用户选择,但在你的情况下,听起来这可能是硬编码并为你节省额外的一步.为了使您的应用程序能够面向未来,虽然我建议您可以轻松更改此应用程序,而无需每次都仔细查看源代码,但注册表项是明显的选择.一旦你完成整理后,填充一个DevMode显示结构,其中包含有关显示位置的信息(设置PelsWidth/Height,Position,DisplayFrequency和BitsPerPel属性)然后在fields成员中设置这些标志.最后使用此设置结构调用ChangeDisplaySettingsEx(),并确保发送重置和更新注册表标志.这应该是你所需要的,希望这有帮助,
使用PInvoke导入DISPLAY_DEVICE结构
其他功能可以通过简单的名称搜索找到.
Rob*_*ker 11
如果您有Windows 7,那么只需启动一个过程:
private static Process DisplayChanger = new Process
{
StartInfo =
{
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden,
FileName = "DisplaySwitch.exe",
Arguments = "/extend"
}
};
Run Code Online (Sandbox Code Playgroud)
然后DisplayChanger.Start();