2011-05-05 64 views
1

下午好,我有一段代码用于监视Windows XP以后的屏幕保护程序活动,目前它可以在Windows 7以外的所有Windows操作系统上正常运行,我知道某些屏幕保护程序参数来SystemParametersInfo函数不可用在Windows 7,但认为SPI_GETSCREENSAVERRUNNING可用,代码如下:在Windows 7上监视屏幕保护程序活动失败

BOOL bScrnSvrRunning = FALSE; 
BOOL bResult = SystemParametersInfo(SPI_GETSCREENSAVERRUNNING, 0, &boolScreenSaverRunning, 0); 

的功能总是bResult返回true,但bScrnSvrRunning永远是假的,

有没有人有任何想法可能会导致此?

回答

2

您正在使用错误的参数“插槽”。在SystemParametersInfo声明仔细一看:

BOOL WINAPI SystemParametersInfo(
    __in  UINT uiAction, 
    __in  UINT uiParam, 
    __inout PVOID pvParam, 
    __in  UINT fWinIni 
); 

让我引用信息的SPI_GETSCREENSAVERRUNNING

确定是否一个屏幕保护程序正在调用进程的窗口站上运行。 pvParam参数必须指向BOOL变量,如果屏幕保护程序当前正在运行,则该变量接收TRUE,否则指向FALSE。

pvParam是临危该信息的人,所以你必须在pvParam参数提供您BOOL:

BOOL bScrnSvrRunning = FALSE; 
BOOL bResult = SystemParametersInfo(SPI_GETSCREENSAVERRUNNING, 0, &boolScreenSaverRunning, 0); 
+0

我这样做,bScrnSvrRunning传递到pvParam插槽 – user698391 2011-05-05 13:39:01

+0

@ user698391:不在您的代码示例中,请尝试复制/粘贴我的代替您的代码并查看它是否有效。 – orlp 2011-05-05 13:40:19

+0

aaah我看到道歉,我正在一个单独的网络上工作,不得不重新输入我的代码,我添加了一个额外的“,0”,那里没有一个,我的代码反映了你的,正如我之前说过的,除Windows 7以外的所有其他操作系统 – user698391 2011-05-05 13:50:58

1

如果你真的想监控屏幕保护程序活动,你可以考虑使用系统事件通知服务(SENS)。系统事件通知服务在那里监视和发送,因此它可以通知您的应用程序有关屏幕保护程序的开始(请参阅ISensLogon::StartScreenSaver)和停止(请参阅ISensLogon::StopScreenSaver)许多事件。一个示例如何使用SENS,您可以找到here(另请参阅herehere)。

相关问题