环境:windows2000SP4 VC6.0
前提条件:2000屏幕保护程序已经运行(知道密码),
请教:怎么在程序中定时解除.

解决方案 »

  1.   

    //禁用屏保
    LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
    {
    switch( message )
    { case WM_SYSCOMMAND:
    switch( LOWORD(wParam) )
    {
    case SC_SCREENSAVE:
    return 0; //禁用屏保
    }
    break;
    } return DefWindowProc( hWnd, message, wParam, lParam );
    }解除屏保动一下鼠标或键盘就可以了,可用mouse_event和keybd_event函数模拟。
      

  2.   

    谢谢楼上回答! 我的意思可能没说明白,不是禁止屏幕保护程序.是要在屏幕保护程序启动了以后,设定一个时间解除,并返回到正常状态.mouse_event 确实可以去掉屏保,但随后出现了登录框(带密码),在已经知道密码的情况下,怎么进入系统呢?也就是说怎么登录呢?  请指教!
      

  3.   

    这个是登陆的问题了,用写注册表的方法让系统自动登陆,VC怎样读写注册表不用我说了吧。在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon下加:   
      AutoAdminLogon       REG_SZ     1   
      AutoForceLogon       REG_SZ     1   
      DefaultUserName     REG_SZ     用户名   
      DefaultPassword     REG_SZ     密码
      

  4.   

    登录是由winlogon进程负责的,登录桌面跟普通用户桌面不在同一个winsta里面,你必须切换到登录的winsta里才能控制登录
      

  5.   

    先设置HKEY_CURRENT_USER\Control Panel\Desktop下ScreenSaverIsSecure为0, 然后模拟按键,
    屏保取消后再恢复ScreenSaverIsSecure
      

  6.   

    look here from vckbase.屏幕保护是运行在专门的桌面当中,这个桌面叫做"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);
    }
      

  7.   

    要个SYS 下钩子来弄了.
    将程序运行为SYSTEM权限来模拟键盘操作,应该是可行的.
    因为没装2000.   不知具体怎么去做了.
      

  8.   

    直接把屏保进程杀掉得了
    获取屏保窗口,GetWindowProcessID得到进程ID,杀掉
    或者枚举当前进程,进程名的扩展名为.scr,杀掉。
      

  9.   


    你这个方法我觉得应该可以.
    怎么运行在SYSTEM权限下呢?