问题描述
有3个显示器,想自己分别控制1,2,3,的显示器开启和关闭,请问要怎么实现,现在就只能实现全部显示器同时关闭,动一动鼠标就全开启,实现不了,3个分开控制。usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Runtime.InteropServices;namespace关闭显示器{publicpartialclass关闭显示器:Form{public关闭显示器(){InitializeComponent();}privatevoidForm1_Load(objectsender,EventArgse){}privateconstuintWM_SYSCOMMAND=0x112;//系统消息privateconstintSC_MONITORPOWER=0xF170;//关闭显示器的系统命令privateconstintMonitorPowerOff=2;//2为PowerOff,1为省电状态,-1为开机privatestaticreadonlyIntPtrHWND_BROADCAST=newIntPtr(0xffff);//广播消息,所有顶级窗体都会接收[DllImport("user32.dll")]privatestaticexternIntPtrSendMessage(IntPtrhWnd,uintMsg,intwParam,intlParam);privatevoidbutton1_Click(objectsender,EventArgse){//button1.Text=Screen.FromHandle();SendMessage(HWND_BROADCAST,WM_SYSCOMMAND,SC_MONITORPOWER,MonitorPowerOff);}}}
解决方案
解决方案二:
你发的是广播指令,当然是全部开启和关闭,想办法搞到单个显示的识别号,应该是一个类似ID或者句柄的东西,单个发送poweroff或者on的指令。我没研究过win32的函数库里有没有类似的函数。如果是厂家给的SDK应该会有想换的控制函数。找到那个能替代HWND_BROADCAST的参数
解决方案三:
找了一通,找到下面这些,网上这控制2屏以上很少有资料,没找着利用WinForm中的Screen类,即可比较方便地实现多窗体分别在多个屏幕上显示。获取当前系统连接的屏幕数量:Screen.AllScreens.Count();获取当前屏幕的名称:stringCurrentScreenName=Screen.FromControl(this).DeviceName;获取当前屏幕对象:ScreenCurrentScreen=Screen.FromControl(this);获取当前鼠标所在的屏幕:ScreenCurrentScreen=Screen.FromPoint(newPoint(Cursor.Position.X,Cursor.Position.Y));让窗体在第2个屏幕上显示:this.Left=((Screen.AllScreens[1].Bounds.Width-this.Width)/2);this.Top=((Screen.AllScreens[1].Bounds.Height-this.Height)/2);把任何窗体显示在任何屏幕的方法:
引用1楼guonan198811的回复:
...
解决方案四:
改变系统的显示器扩展设置
解决方案五:
引用3楼puler的回复:
。。
不清楚,这个全关闭的代码有一点不怎么好,就是鼠标微小的一动就会又开启显示器,有什么辨法能降低灵敏度,或者直接改成只按健盘才能打开显示器!
解决方案六:
顶贴
解决方案七:
自顶,自顶