关于WinForm拦截屏幕保护消息

minioreo 2008-06-09 01:18:27
SC_MONITORPOWER SC_SCREENSAVE这两个消息接收到以后要想拦截屏保或者关闭监视器 应该怎样设置msg.result或者return什么?
...全文
334 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
srxljl 2011-12-06
  • 打赏
  • 举报
回复
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case (0x0011):
m.Result = IntPtr.Zero;
break;
//SC_SCREENSAVE
case (0xF140):
m.Result = IntPtr.Zero;
break;
//SC_MONITORPOWER
case (0xF170):
m.Result = IntPtr.Zero;
break;
default:
base.WndProc(ref m);
break;
}
}

case (0x0011):系统发出关系程序的信息
富莱工作室 2008-06-11
  • 打赏
  • 举报
回复
返回0, 表示程序已经处理这个消息
对于SC_SCREENSAVE, 系统会禁止屏幕保护
SC_SCREENSAVE只会发送给处于Active状态的窗口
minioreo 2008-06-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 longlijun 的回复:]
WM_SYSCOMMAND

An application should return zero if it processes this message.
[/Quote]
能说的详细点么?我看过有MFC做这个的 可是按同样的方法不知道为什么就不行了
ziseliuxingzh 2008-06-11
  • 打赏
  • 举报
回复
UP,,,我也想知道
富莱工作室 2008-06-11
  • 打赏
  • 举报
回复
WM_SYSCOMMAND

An application should return zero if it processes this message.
SuperTyro 2008-06-11
  • 打赏
  • 举报
回复
我记得好象有个DOS 的命令可以做到 刚刚找了下 原来写的程序
那个还找不到了 ....

帮你顶下 LZ可以自己找下看看

我是小菜鸟! 说的不好清见谅, 希望能够帮到你!
minioreo 2008-06-11
  • 打赏
  • 举报
回复
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
//WM_QUERYENDSESSION
case (0x0011):
m.Result = IntPtr.Zero;
break;
//WM_SYSCOMAND SC_SCREENSAVE SC_MONITORPOWER
case (0x0112):
if (m.LParam == (IntPtr)0xF140||m.LParam==(IntPtr)0XF170)
m.Result = IntPtr.Zero;
else
base.WndProc(ref m);
break;
default:
base.WndProc(ref m);
break;
}
}
minioreo 2008-06-11
  • 打赏
  • 举报
回复
是的 我这是一个Winform 是处于激活状态 改了一下 在接到Wm_SysCommand的时候判断lparam是否SC_ScreenSave 如果是就返回0
但是不能工作 屏保还是照常启动了 第一个防止关机的可以正常工作

protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
//WM_QUERYENDSESSION
case (0x0011):
m.Result = IntPtr.Zero;
break;
//WM_SYSCOMAND SC_SCREENSAVE
case (0x0112):
if (m.LParam == (IntPtr)0xF140)
m.Result = IntPtr.Zero;
else
base.WndProc(ref m);
break;
//SC_MONITORPOWER
case (0xF170):
m.Result = IntPtr.Zero;
break;
default:
base.WndProc(ref m);
break;
}
}
minioreo 2008-06-09
  • 打赏
  • 举报
回复
这段代码不可以组织屏幕保护启动 为什么?


protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case (0x0011):
m.Result = IntPtr.Zero;
break;
//SC_SCREENSAVE
case (0xF140):
m.Result = IntPtr.Zero;
break;
//SC_MONITORPOWER
case (0xF170):
m.Result = IntPtr.Zero;
break;
default:
base.WndProc(ref m);
break;
}
}

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧