刚刚看了一下MSDN,下面就是解决方法:
A screen saver application's ScreenSaverProc window procedure should use
DefScreenSaverProc instead of the DefWindowProc function to provide
default message processing.
其实原因在DefScreenSaverProc的解释里,摘下:
WM_SYSCOMMAND
Returns FALSE if the wParam parameter of WM_SYSCOMMAND is either
SC_CLOSE or SC_SCREENSAVE.
在你的程序开头的部分(DPR)使用互斥对象判断一下是否运行了该程序的一个实例就可以了,
否则系统不断向屏保程序发送带/S 的命令来启动,所以会越来越多.
还有一个办法是告诉系统已经运行了屏保程序,使用函数原形如下:
The SystemParametersInfo function queries or sets systemwide parameters. This function can also update the user profile while setting a parameter.
BOOL SystemParametersInfo(
UINT uiAction, // system parameter to query or set
UINT uiParam, // depends on action to be taken
PVOID pvParam, // depends on action to be taken
UINT fWinIni // user profile update flag
);
.