终止正在运行的屏幕保护程序
来源:互联网 发布:android加载数据动画 编辑:程序博客网 时间:2024/06/05 14:59
获取当前是否进入屏幕保护程序SystemParametersInfo(SPI_GETSCREENSAVERRUNNING, 0, &isActive, 0);
Sometimes applications need to terminate a screen saver that is already running. In Microsoft Windows 95, a screen saver could be terminated easily by posting a WM_CLOSE message to the currently active screen saver window as in this example:
Microsoft Windows NT, however, introduces the concept of separate desktops, so that applications can run on one, and screen savers can run on another. This makes screen saver termination under Windows NT, Windows 2000, and Windows Server 2003 a bit more difficult.MORE INFORMATION
The process of obtaining a handle to the currently active screen saver window is different for operating systems that are later than Microsoft Windows 95. On Microsoft Windows NT, on Microsoft Windows 2000, and on Microsoft Windows Server 2003, the screen saver may run on either the default desktop or on a separate desktop, depending on a setting in the display properties:
To do this, get a handle to the screen saver's desktop, enumerate that desktop's windows, and then post a WM_CLOSE to the screen saver window.
The following code demonstrates how to do this. Note that if a screen saver password is set, the following code brings up the password dialog box, prompts the user for a password, and then actually terminates the screen saver application.Note that terminating a screen saver that is already running as demonstrated above is totally separate from disabling the screen saver altogether, so that no screen saver starts after the designated time period expires. This can be done easily using:This method works well for terminating the currently running screen saver. However, one problem that you might encounter is that the system will not restart the screen saver unless the user moves the mouse or presses a key. If you need the screen saver to start up again, you'll need to reinitialize the time-out period. Do this by using one of the following methods:
- If you select the On resume, password protect check box on theScreen Saver tab of the Display Properties dialog box, the screen saver runs on its own desktop.
- If you clear the check box that is described in the previous point, the screen saver runs on the default desktop.
- The GetForegroundWindow() function returns NULL because the screen saver is running on a different desktop from the desktop that the calling application is running on.
- The FindWindow function ("WindowsScreenSaverClass", NULL) does not work either.
- Code to dismiss the screen saver first determines whether the screen saver is running on its own desktop.
- If the screen saver is running on its own desktop, the code closes the screen saver there.
- If there is no desktop for the screen saver, the code uses the default desktop.
To do this, get a handle to the screen saver's desktop, enumerate that desktop's windows, and then post a WM_CLOSE to the screen saver window.
The following code demonstrates how to do this. Note that if a screen saver password is set, the following code brings up the password dialog box, prompts the user for a password, and then actually terminates the screen saver application.
BOOL CALLBACK KillScreenSaverFunc(HWND hwnd, LPARAM lParam) { if(IsWindowVisible(hwnd)) PostMessage(hwnd, WM_CLOSE, 0, 0); return TRUE; } HDESK hdesk; hdesk = OpenDesktop(TEXT("Screen-saver"), 0, FALSE, DESKTOP_READOBJECTS | DESKTOP_WRITEOBJECTS); if (hdesk) { EnumDesktopWindows(hdesk, KillScreenSaverFunc, 0);CloseDesktop(hdesk); } else { // Windows 2000 and later: // If there is no screen saver desktop, the screen saver // is on the default desktop. Close it by sending a // WM_CLOSE. PostMessage(GetForegroundWindow(), WM_CLOSE, 0, 0L); }
SystemParametersInfo( SPI_SETSCREENSAVEACTIVE, FALSE, 0, SPIF_SENDWININICHANGE );
- Calling SystemParametersInfo (SPI_SETSCREENSAVEACTIVE, TRUE, 0, SPIF_SENDWININICHANGE).
- Using SetCursorPos() to simulate user input.
Properties
Article ID: 140723 - Last Review: February 22, 2007 - Revision: 3.2
APPLIES TO
- Microsoft Win32 Software Development Kit (SDK) 3.1, when used with:
- Microsoft Windows NT Advanced Server 3.1
- Microsoft Windows NT 4.0
- Microsoft Windows NT 3.51 Service Pack 5
- Microsoft Windows NT 4.0
- Microsoft Windows 2000 Standard Edition
- Microsoft Windows Server 2003, Standard Edition (32-bit x86)
Keywords:
kbcode kbhowto kbscreensaver KB140723- 终止正在运行的屏幕保护程序
- 安全的终止正在运行的线程
- 安全的终止正在运行的线程
- 安全的终止正在运行的线程
- 安全的终止正在运行的线程
- 终止正在运行的matlab引擎
- matlab 终止正在运行的程序
- 如何正确的终止正在运行的子线程
- 如何正确的终止正在运行的子线程
- 如何正确的终止正在运行的子线程
- 如何正确的终止正在运行的子线程
- Linux Shell - kill 0 直接终止正在运行的脚本
- 如何优雅地终止正在运行的子线程
- android如何终止一个正在运行的子线程
- 如何优雅地终止正在运行的Spark Streaming程序
- 在ubuntu中,终止一个进程或终止一个正在运行的程序
- 终止正在执行的线程
- 解决:无法终止无法挂起BizTalk正在运行的服务实例的问题
- 【贪心】tyvj P1260 最优分解方案
- D-Link routers found to contain backdoors
- 并发和竞态
- Unity3D使用SVN进行版本控制(unity3d3.5 or later)
- CAD的一些基本操作(快捷键)
- 终止正在运行的屏幕保护程序
- 一个fork的面试题
- vim基本操作
- 一个SQL Server转SQLite数据库的小工具(SQL Server To SQLite DB Converter)
- 配置管理(可参考用于hadoop集群部署)
- Oracle的体系结构与容易混淆的概念
- VMware workstation unrecoverable error(vmx)
- 如何做好游戏开发项目基本需求分析
- c/c++: uint8_t uint16_t uint32_t uint64_t size_t ssize_t数据类型