如何停止屏幕保护程序?

如何停止屏幕保护程序?

<script type="text/javascript"> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script>

摘自:如何停止屏幕保护程序?


屏幕保护程序正运行,后台的程序该如何去停止?找了好多文章,都是禁用屏保的,停止正在运行的屏保就找不到了~~~~~~~~~~~~~~~~~~~大虾快来Help~~~~~~~~~~~~~~~~~~~~  
---------------------------------------------------------------  
 
 
W2k中如何终止屏幕保护  
 
(hangwire发表于2001-11-17  9:30:59)  
 
   
 
[问题]:  
我编写了一个报警程序,功能是当我的报警程序接到报警消息时,必须终止屏幕保护程序或者节能模式并显示报警消息,或者在屏幕保护程序之上显示报警消息也可以。我用SetWindowPos(&wndTopMost…)试过不灵,在W2k的屏保中也没有成功。我的程序想在W2k里运行,如何在特定的事件发生时终止屏幕保护?  
 
[解答]:  
在Windows  9x中,终止屏幕保护的方法很简单,获取活动窗口指针,然后发送WM_CLOSE消息即可:  
PostMessage(GetActiveWindow(),WM_CLOSE,0,0);  
但是,在W2k中这个方法就不灵了,W2k的桌面概念与以往不同,其屏幕保护是运行在专门的桌面当中,这个桌面叫做"Screen-saver"。你用GetActiveWindow  或者  GetForegroundWindow函数是找不到屏幕保护窗口的,因为它运行在另外的桌面里。要获得屏保窗口,你必须打开这个专门的桌面,列举其中的所有窗口,判断窗口是不是屏幕保护窗口,如果保护窗口可见,则发送WM_CLOSE消息。详细代码如下(或者参见MSDN  KB  文章Q140723):  
BOOL  CALLBACK  KillScreenSaverFunc(HWND  hwnd,  LPARAM  lParam)  
{  
     if(IsWindowVisible(hwnd))  
           PostMessage(hwnd,  WM_CLOSE,  0,  0);  
     return  TRUE;  
}  
//  打开屏保专用桌面"Screen-saver"  
//  
HDESK  hdesk  =  OpenDesktop(TEXT("Screen-saver"),  
     0,                                                                      //  flags  
     FALSE,                                                              //  new  processes  inherit  handle?  
     DESKTOP_READOBJECTS    ¦  DESKTOP_WRITEOBJECTS);  //  access  
 
/  
//  用专门的"close"函数列举窗口并关闭桌面。  
//  
if  (hdesk)  {  
     EnumDesktopWindows(hdesk,  KillScreenSaverFunc,  0);  
     CloseDesktop(hdesk);  
}    
 
---------------------------------------------------------------  
 
屏保不是鼠标或者键盘有动作的时候就会被停止吗,不知道发送鼠标移动的消息能不能停止呢?  
---------------------------------------------------------------  
 
用程序模拟鼠标移动或者键盘按键也应该可以的啊  
---------------------------------------------------------------  
 
禁止屏幕保护:  
::SystemParametersInfo(SPI_SETSCREENSAVEACTIVE,FALSE,NULL,0);  
 
---------------------------------------------------------------  
 
呵呵!  
你的问题可以模拟解决  
模拟键盘  用Keybd_event  
模拟鼠标按键用mouse_event函数  
 
模拟按了‘A’键  
keybd_event(65,0,0,0);    
keybd_event(65,0,KEYEVENTF_KEYUP,0);  
模拟鼠标  
POINT  lpPoint;    
GetCursorPos(&lpPoint);    
SetCursorPos(lpPoint.x,  lpPoint.y);    
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);    
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
<script type="text/javascript"> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script>
所属分类: VC/MFC标签: 基础类 系统 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值