110,571
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace 关闭显示器
{
public partial class 关闭显示器 : Form
{
public 关闭显示器()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private const uint WM_SYSCOMMAND = 0x112; //系统消息
private const int SC_MONITORPOWER = 0xF170; //关闭显示器的系统命令
private const int MonitorPowerOff = 2; //2为PowerOff, 1为省电状态,-1为开机
private static readonly IntPtr HWND_BROADCAST = new IntPtr(0xffff);//广播消息,所有顶级窗体都会接收
[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
private void button1_Click(object sender, EventArgs e)
{
//button1.Text = Screen.FromHandle();
SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, MonitorPowerOff);
}
}
}
利用WinForm中的Screen类,即可比较方便地实现多窗体分别在多个屏幕上显示。
获取当前系统连接的屏幕数量: Screen.AllScreens.Count();
获取当前屏幕的名称:string CurrentScreenName = Screen.FromControl(this).DeviceName;
获取当前屏幕对象:Screen CurrentScreen = Screen.FromControl(this);
获取当前鼠标所在的屏幕:Screen CurrentScreen = Screen.FromPoint(new Point(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);
把任何窗体显示在任何屏幕的方法: