c#两个显示器,怎么把第二个显示器扩展出来

.Net技术 码拜 9年前 (2015-07-11) 2472次浏览 0个评论

c#两个显示器,怎么把第二个显示器扩展出来

有没有系统可以调用的接口

5分

http://www.cnblogs.com/zzcong/archive/2012/06/13/2547877.html

http://www.cnblogs.com/lizi/archive/2012/02/21/2361229.html

 

你理解错我的意思了,我是要把第二块显示器检测出来,然后让第二块显示器可以用,不是将form放到第二块显示器上运行

 
有,用screen
this.DesktopBounds = Screen.AllScreens[1].Bounds;
 
那我也理解错了,

5分

这是调用显示控制器的,有很多参数,
ManagementObjectSearcher searcher = new ManagementObjectSearcher(“SELECT * FROM Win32_VideoController”);

ManagementObjectSearcher searcher = new ManagementObjectSearcher(“SELECT * FROM Win32_VideoController”);
string sHardDiskSerialNumber = “”;
foreach (ManagementObject info in searcher.Get())
{

string a = “适配器兼容性 ” + info[“AdapterCompatibility”].ToString();

string b = “适配器类型 ” + info[“AdapterDACType”].ToString();

string c = “视频模式描述” + info[“VideoModeDescription”].ToString();

string d = “字幕” + info[“Caption”].ToString();

string e = “目前比特每像素” + info[“CurrentBitsPerPixel”].ToString();

string f = “目前的水平分辨率” + info[“CurrentHorizontalResolution”].ToString();

string g = “视频处理器” + info[“VideoProcessor”].ToString();

string h = “最大刷新率” + info[“MaxRefreshRate”].ToString();

string i = “设备ID” + info[“DeviceID”].ToString();

string j = “描述” + info[“Description”].ToString();
string k = info[“VideoMemoryType”].ToString();

不过,我没找到第二个接口的方法

 
这个有什么意义么,用户接了两个显示器,不是应该自己设置让两个显示器都显示么
难道用户自己禁用了其中一个,你程序想强制让显示器启用
如果用户就是想禁用,他直接连显示器电源都关闭了,你程序做什么都没用.
 

你没遇到过刚装机的那种情况,就是一开机,就只有2个显示,而且都是一样的屏幕,要的就是把显示器扩展成1,2

45分

你截图里面的功能,获取连接显示器信息和切换主显示器用到三个API函数

[DllImport("user32.dll")]
static extern bool EnumDisplayDevices(string lpDevice,
       uint iDevNum, ref DISPLAY_DEVICE lpDisplayDevice, uint dwFlags);

[DllImport("user32.dll")]
public static extern bool EnumDisplaySettings(string deviceName,
       int modeNum, ref DEVMODE devMode);

[DllImport("user32.dll")]
static extern DISP_CHANGE ChangeDisplaySettingsEx(string lpszDeviceName,
       ref DEVMODE lpDevMode, IntPtr hwnd, uint dwflags, IntPtr lParam);

可以参考: How to create a display switcher for Windows XP

 
中文的话,可以参考: c# 多显示器设置主屏幕(Set primary screen for multiple monitors)
 

这是我后面要做的,但是我前面要做的是检测显示器设备,并且扩展出来,我才能做后面的事情

 
需要现成开源项目和程序: multi-monitor-dock-util
 
检测显示器设备…………

现在显卡基本都带了 HDMI 接口的吧

HDMI 接口是即插即用的, DVI 不是,这些情况都要考虑的。

我们做多屏是将多显示器设置为一主屏,其他为扩展显示。

程序界面用坐标定位……

好像HDMI接口的显示器,插上去,直接就是扩展显示了……

5分

想程序检测、控制这里的显示器设置,貌似……

DVI 接口的需要,因为在系统运行后,减少DVI接口上的显示器,程序会自动跳回来,但是增加了,程序不会动

HDMI 接口的,好像是自动会跳回去了…… 程序中不需要代码控制

我们做的系统,将播放界面放HDMI 端口的显示设备播放,就没写你说的那部分代码,只是在播放界面启动时, 加入了界面坐标。

 
EnumDisplayDevices就是检测枚举显示器设备API函数
添加和移除显示器,参考代码DispalyControlHelpers.cs
扩展显示器,就是设置主屏幕的dmPosition.x = 0,然后设置第二屏的dmPosition.x += 第一屏的宽度 (假设两个屏都是水平放置的),然后调用ChangeDisplaySettingsEx去更新设置。
 
电脑是双显卡的吗,看看另一显卡的驱动安装好了没有!
 

能不能帮我看一下,我在

 if (!EnumDisplaySettings(DisplayDevice.DeviceName, -1,ref defaultMode))
                     {
                         return;
                     }

就直接return了,EnumDisplayDevices获取DisplayDevice的信息获取不到,DisplayDevice.DeviceName的值是“\”


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明c#两个显示器,怎么把第二个显示器扩展出来
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!