2011-05-05 4 views
1

오후에 Windows XP에서 화면 보호기 활동을 모니터하는 데 사용하는 코드 섹션이 있는데, 현재 Windows 7을 제외한 모든 Windows OS에서 올바르게 작동합니다. SystemParametersInfo 함수에 화면 보호기 매개 변수는 Windows 7에서 사용할 수 없습니다하지만 SPI_GETSCREENSAVERRUNNING 가능하다고 생각, 코드는 다음과 같다 :Windows 7에서 스크린 세이버 활동 모니터링 오류가 발생했습니다.

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

기능은 항상 bResult에 대해 true를 반환하지만 bScrnSvrRunning 항상 거짓,

누구든지이 문제를 일으킬 수있는 아이디어가 있습니까?

답변

2

잘못된 "slot"매개 변수를 사용하고 있습니다.

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

을 그리고 나를 SPI_GETSCREENSAVERRUNNING에 대한 정보를 인용 보자 : SystemParametersInfo의 선언을 자세히 보면 화면 보호기가 현재 호출 프로세스의 윈도우 스테이션에서 실행되고 있는지 여부를

가 결정합니다. pvParam 매개 변수는 화면 보호기가 현재 실행중인 경우 TRUE를 받거나 그렇지 않으면 FALSE 인 BOOL 변수를 가리켜 야합니다.

pvParam

는 정보를 접수에 하나입니다, 그래서 당신은 pvParam 매개 변수에 부울을 제공해야합니다 : 당신이 정말 당신이 사용하는 고려할 수있는 화면 보호기 활동을 모니터링 할 수 을 원하는 경우에

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

bScrnSvrRunning이 pvParam 슬롯으로 전달됩니다. – user698391

+0

@ user698391 : 코드 예제에 나와 있지 않은 경우, 내 것이 아닌 복사/붙여 넣기를 시도하고 작동하는지 확인하십시오. – orlp

+0

aaah 나는 사과를보고, 나는 분리 된 네트워크에서 일하고 있으며 코드를 다시 입력해야한다. "0"이 추가되지 않았을 때, 코드가 당신을 비 춥니 다. Windows 7을 제외한 다른 모든 OS – user698391

1

시스템 이벤트 통지 서비스 (SENS). 시스템 이벤트 알림 서비스는 모니터하고 거기에 디스패치하기 때문에 화면 보호기 시작 (ISensLogon::StartScreenSaver 참조) 및 화면 보호기 중지 (ISensLogon::StopScreenSaver 참조)에 대해 응용 프로그램에 알릴 수 있습니다. SENS를 사용하는 방법에 대한 예는 here입니다 (herehere 참조).

관련 문제