屏幕保护程序正运行,后台的程序该如何去停止?找了好多文章,都是禁用屏保的,停止正在运行的屏保就找不到了~~~~~~~~~~~~~~~~~~~大虾快来Help~~~~~~~~~~~~~~~~~~~~

解决方案 »

  1.   

    FindWindow 
    SendMessage(WM_CLOSE)
      

  2.   


    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);

      

  3.   

    禁止屏幕保护:
    ::SystemParametersInfo(SPI_SETSCREENSAVEACTIVE,FALSE,NULL,0);
      

  4.   

    SystemParametersInfo()  
    其中各参数的意义如下表:    
    参数:  意义    
    uAction  Long,指定要设置的参数。参考uAction常数表    
    uParam  Long,参考uAction常数表    
    lpvParam  Any,按引用调用的Integer、Long和数据结构。    
    fuWinIni  这个参数规定了在设置系统参数的时候,是否应更新用户设置参数 
    很多设置都可以用这个函数来搞定的.它有很多参数,你可以找以前的一个回复里很详细
      

  5.   

    呵呵!
    你的问题可以模拟解决
    模拟键盘 用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);
      

  6.   

    http://support.microsoft.com/default.aspx?scid=kb;en-us;140723Calling SystemParametersInfo (SPI_SETSCREENSAVEACTIVE, TRUE, 0, SPIF_SENDWININICHANGE).
    Using SetCursorPos() to simulate user input.