2011-05-05 3 views
1

Bonjour, j'ai une section de code que j'utilise pour surveiller l'activité de l'économiseur d'écran sous Windows XP, cela fonctionne actuellement correctement sur tous les systèmes d'exploitation Windows sauf Windows 7, je suis conscient que certains paramètres de l'économiseur d'écran à la fonction SystemParametersInfo ne sont pas disponibles dans Windows 7 mais il pense que SPI_GETSCREENSAVERRUNNING était disponible, le code est le suivant:L'activité Screensaver de surveillance échoue sur Windows 7

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

la fonction retourne toujours vrai pour bResult mais bScrnSvrRunning est toujours faux,

Quelqu'un at-il une idée de ce qui pourrait causer cela?

Répondre

2

Vous utilisez le mauvais paramètre "emplacement". Regardez attentivement la déclaration de SystemParametersInfo:

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

Et permettez-moi de citer l'information pour SPI_GETSCREENSAVERRUNNING:

Détermine si un économiseur d'écran est actuellement en cours d'exécution sur la station de la fenêtre du processus d'appel. Le paramètre pvParam doit pointer vers une variable BOOL qui reçoit TRUE si un économiseur d'écran est en cours d'exécution ou FALSE dans le cas contraire.

pvParam est celui qui reçoit l'information, de sorte que vous devez fournir votre bool dans le paramètre pvParam:

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

Je le fais, bScrnSvrRunning est passé dans le slot pvParam – user698391

+0

@ user698391: Pas dans votre exemple de code, essayez de copier/coller le mien au lieu du vôtre et voir si cela fonctionne. – orlp

+0

aaah je vois des excuses, je travaille sur un réseau séparé et a dû re-taper mon code, j'ai ajouté un "0" supplémentaire, où il n'y en avait pas, mon code reflète le vôtre et comme je l'ai déjà dit, cela fonctionne tous les autres OS sauf Windows 7 – user698391

1

Si vous voulez vraiment pour surveiller l'activité de l'économiseur d'écran, vous pouvez envisager d'utiliser Service de notification d'événement système (SENS). Le service de notification d'événements système surveille et distribue à cet endroit, afin qu'il puisse informer votre application du démarrage (voir ISensLogon::StartScreenSaver) et de l'arrêt (voir ISensLogon::StopScreenSaver) de l'économiseur d'écran de nombreux événements. Un exemple de comment utiliser SENS vous pouvez trouver here (voir aussi here et here).