首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

急切希望能解决!   100相送!解决方法

2012-01-21 
急切希望能解决!!!   100相送!!我的程序是一开机就运行,我想在屏保启动前让程序做些处理,并禁止屏保!BOOLC

急切希望能解决!!!   100相送!!
我的程序是一开机就运行,我想在屏保启动前让程序做些处理,并禁止屏保!

BOOL       CMFPApp::PreTranslateMessage(MSG*       pMsg)          
    {      
 
    if(pMsg-> message==WM_SYSCOMMAND       &&       pMsg-> wParam==SC_SCREENSAVE)return       true;      
    return       CWinApp::PreTranslateMessage(pMsg);      
    }      

这样当我的应用程序是激活状态的时候没有问题,但如果我的程序没有在激活状态,它就收不到WM_SYSCOMMAND   消息, 

我希望不管我的程序是否在激活状态都能在屏保启动前处理一些事情.


[解决办法]
激活什么意思?是运行?如果你的程序不在运行状态的话``````那就只是硬盘上的数据,怎么能截获消息~~~所以一定是要在运行状态.(不晓得我理解是不是有问题)
[解决办法]
http://support.microsoft.com/kb/238882
[解决办法]
你的意思是在开机还没有进入界面就激活的你程序, 可以这样理解吗?
[解决办法]
用钩子可不可以
[解决办法]
屏幕保护程序启动时它回到前景窗口与 WPARAM 作为 SC_SCREENSAVE WM_SYSCOMMAND 消息。 来检测和通知其他应用程序与此事件, 使用以下步骤: 1. 安装 WH_GETMESSAGE 全局挂钩。
hHook = SetWindowsHookEx(WH_GETMESSAGE, (HOOKPROC)HookProc,
(HINSTANCE) hMod, 0);


2. 定义, 例如, " ScreenSaverStarted " 注册用户定义消息。 UINT WM_SCRNSVSTART = RegisterWindowMessage( "ScreenSaverStarted ");


3. 此消息向所有顶层窗口广播系统中。 LRESULT CALLBACK HookProc(UINT code , WPARAM wParam, LPARAM lParam)
{
MSG *msg = (MSG *)lParam;
if ( msg-> message == WM_SYSCOMMAND &&
msg-> wParam == SC_SCREENSAVE)
{// broadcast message to all top-level windows
// Or execute some other code here
PostMessage(HWND_BROADCAST, WM_SCRNSVSTART, 0, 0);
}
// Always call next hook in chain
return CallNextHookEx(hHook, code, wParam, lParam);
}


4. 卸载挂钩。 UnhookWindowsHookEx(hHook);

在 Windows 98 和 Windows 2000, 通过调用带有 uiAction 作为 SPI_GETSCREENSAVERRUNNING SystemParametersInfo 可查询系统。 BOOL bActive;
SystemParametersInfo(SPI_GETSCREENSAVERRUNNING, NULL,(LPVOID) &bActive, NULL);
//bActive will be true if Screen Saver is running


热点排行