开发者论坛

 找回密码
 注册 (请使用非IE浏览器)
查看: 9595|回复: 13

[源码] C# 自动关闭或打开显示器

[复制链接]

0

精华

633

贡献

583

赞扬

正版授权组

Rank: 14Rank: 14Rank: 14Rank: 14

帖子
174
软币
3639
在线时间
377 小时
注册时间
2013-7-5
发表于 2013-7-5 18:15:52 | 显示全部楼层 |阅读模式
本帖最后由 威廉乔克斯 于 2013-7-9 22:08 编辑

C# Code:
  1. /// <summary>
  2. /// 监视器开关控制
  3. /// </summary>
  4. public class MonitorTool
  5. {
  6.    [DllImport("user32.dll")]
  7.    public static extern IntPtr SendMessage(
  8.    IntPtr hWnd,
  9.    uint msg,
  10.    uint wParam,
  11.    int lParam);
  12.    
  13.    //系统消息
  14.    private const uint WM_SYSCOMMAND = 0x112;
  15.    
  16.    //关闭显示器的系统命令
  17.    private const int SC_MONITORPOWER = 0xF170;
  18.    
  19.    //2为PowerOff, 1为省电状态,-1为开机
  20.    private const int MonitorPowerOff = 2;
  21.    
  22.    /// <summary>
  23.    /// 关闭显示器
  24.    /// </summary>
  25.    public static void PowerOff(IntPtr hWnd)
  26.    {
  27.       SendMessage(
  28.       hWnd,
  29.       WM_SYSCOMMAND,
  30.       SC_MONITORPOWER,
  31.       2
  32.       );
  33.    }
  34.    
  35.    /// <summary>
  36.    /// 打开显示器
  37.    /// </summary>
  38.    public static void PowerOn(IntPtr hWnd)
  39.    {
  40.       SendMessage(
  41.       hWnd,
  42.       WM_SYSCOMMAND,
  43.       SC_MONITORPOWER,
  44.       -1
  45.       );
  46.    }
  47.    
  48. }
复制代码
测试:


C# Code:
  1. private void button2_Click(object sender, EventArgs e)
  2. {
  3.    MonitorTool.PowerOff(this.Handle);
  4.    Thread.Sleep(3000);//三秒后自动打开显示器
  5.    MonitorTool.PowerOn(this.Handle);
  6. }
复制代码

评分

参与人数 10贡献 +2 赞扬 +10 收起 理由
mwylaoma + 1 很给力
qsccer + 1 感谢分享
ssa521 + 1 感谢分享
linuxpeng + 1 很给力
caidu + 1 很给力

查看全部评分

回复

使用道具 举报

0

精华

5295

贡献

6059

赞扬

管理员

帖子
1176
软币
22629
在线时间
4467 小时
注册时间
2013-6-7

黄马甲

发表于 2013-7-5 18:17:16 | 显示全部楼层
没试过,可行吗?
回复

使用道具 举报

0

精华

633

贡献

583

赞扬

正版授权组

Rank: 14Rank: 14Rank: 14Rank: 14

帖子
174
软币
3639
在线时间
377 小时
注册时间
2013-7-5
 楼主| 发表于 2013-7-5 18:18:07 | 显示全部楼层
天堂羽叶 发表于 2013-7-5 18:17
没试过,可行吗?

可以的。这个我自己都在用的
回复

使用道具 举报

0

精华

174

贡献

985

赞扬

正版授权组

Rank: 14Rank: 14Rank: 14Rank: 14

帖子
195
软币
4374
在线时间
369 小时
注册时间
2013-6-7
发表于 2013-7-8 13:05:58 | 显示全部楼层
嗯,不错,试过了,可以用
另外, 发送消息的窗口句柄可以传入 -1, 我在  Console 程序中可用.

MonitorTool.PowerOff((System.IntPtr)(-1));

评分

参与人数 1赞扬 +1 收起 理由
jjhh + 1 很给力

查看全部评分

回复

使用道具 举报

0

精华

633

贡献

583

赞扬

正版授权组

Rank: 14Rank: 14Rank: 14Rank: 14

帖子
174
软币
3639
在线时间
377 小时
注册时间
2013-7-5
 楼主| 发表于 2013-7-8 15:23:32 | 显示全部楼层
nyfor 发表于 2013-7-8 13:05
嗯,不错,试过了,可以用
另外, 发送消息的窗口句柄可以传入 -1, 我在  Console 程序中可用.

{:3_48:}
回复

使用道具 举报

0

精华

79

贡献

36

赞扬

帖子
125
软币
1754
在线时间
107 小时
注册时间
2013-7-1
发表于 2013-7-9 18:36:02 | 显示全部楼层
真心不错
哈哈

评分

参与人数 1赞扬 +1 收起 理由
jjhh + 1 淡定

查看全部评分

回复

使用道具 举报

0

精华

137

贡献

95

赞扬

帖子
48
软币
630
在线时间
111 小时
注册时间
2013-6-21

神经正常

发表于 2013-7-9 22:05:31 | 显示全部楼层
这个好,我喜欢,前段日子。还想着有没好方法可以实现。
回复

使用道具 举报

0

精华

454

贡献

16

赞扬

帖子
45
软币
3024
在线时间
64 小时
注册时间
2013-6-7
发表于 2013-7-13 09:58:08 | 显示全部楼层
不错,可以用.
回复

使用道具 举报

0

精华

42

贡献

46

赞扬

帖子
136
软币
812
在线时间
86 小时
注册时间
2013-6-30
发表于 2013-9-20 07:25:27 | 显示全部楼层
这个主要用来干啥?。。。。
回复

使用道具 举报

0

精华

102

贡献

15

赞扬

帖子
136
软币
2024
在线时间
288 小时
注册时间
2013-6-22
发表于 2013-9-20 10:25:59 | 显示全部楼层
好像可以用来挂机,不用别人开,自己再搞外钩子,
设定下按下某些键才开显示器.
回复

使用道具 举报

0

精华

518

贡献

401

赞扬

正版授权组

Rank: 14Rank: 14Rank: 14Rank: 14

帖子
213
软币
7221
在线时间
1177 小时
注册时间
2013-6-9
发表于 2013-10-16 13:41:56 | 显示全部楼层
有人试过吗 这个可行吗
回复

使用道具 举报

0

精华

130

贡献

74

赞扬

帖子
106
软币
266
在线时间
16 小时
注册时间
2015-10-16
发表于 2015-10-17 11:01:35 | 显示全部楼层
不错,学习了
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
19
软币
149
在线时间
11 小时
注册时间
2015-4-17
发表于 2015-12-9 11:14:08 | 显示全部楼层
好厉害的代码
回复

使用道具 举报

Archiver|手机版|小黑屋|开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-12-23 08:58

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表