2012-08-13 7 views
1

로그인 한 사용자의 컨텍스트에서 Windows 플랫폼의 로컬 서비스에서 실행할 수있는이 사용자 모드 실행 파일을 코딩하고 있습니다. 주요 목적은 로그인 한 모든 사용자의 데스크탑을 구성하는 것입니다. 나는 둘 이상의 사용자가 나는이 이상한 오류 ERROR_OPERATION_IN_PROGRESS를 얻을 Windows 콘솔에 로그온 한 경우SystemParametersInfo 및 ERROR_OPERATION_IN_PROGRESS

if(!SystemParametersInfo(SPI_SETSCREENSAVETIMEOUT, nTimeoutSec, 0, 0)) 
{ 
    //Error 
    GetLastError(); 
} 

if(!SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, nActive, 0, 0)) 
{ 
    //Error 
    GetLastError(); 
} 

위의 코드는 시간을 제외하고, 대부분의 경우에 작동합니다 : 그것은 화면 보호기를 설정하려면 다음 API를 호출합니다. 나는 documentation을 고개는이 설명이 있습니다 기계가 절전 모드 또는 시스템 잠금 상태를 입력 한 경우

, ERROR_OPERATION_IN_PROGRESS 예외가 발생합니다.

그래, 어떻게해야합니까?

추신. 이것은 Windows 8에서 가장 자주 발생합니다.

답변

0

SPI_SETSCREENSAVEACTIVE 일부 오류가 발생하고 아무 것도 수행하지 않습니다. 창에 메시지와 함께 WM_SYSCOMMAND 메시지를 보내십시오.

+0

제안 해 주셔서 감사합니다.하지만이 시점에서 나는 그 조건을 에뮬레이션 할 수 없습니다 ... 정확히 언제 그 오류가 반환되는지 아십니까? – ahmd0

0

그래, 실제로 MSDN에서는 명시 적으로 언급되지 않았지만 Windows 8 이상에서는 실제로 불가능합니다.

내 연구

는 윈도우 8에 ES_DISPLAY_REQUIRED 플래그가 화면을 깨워하지 않습니다 SetThreadExecutionState 또 다른 MSDN 기사에 상태를 않습니다.

Windows 8 :이 플래그는 디스플레이를 켠 상태로 유지할 수 있으며 현재 꺼져있는 디스플레이를 켤 수 없습니다. 활성 화면 보호기 (SPI_SETSCREENSAVEACTIVE)을 제거하기위한 API 호출이 있습니다

다음과 같은 상태 않습니다 : 컴퓨터가 절전 모드 또는 시스템 잠금 상태를 입력 한 경우

을 ERROR_OPERATION_IN_PROGRESS 예외가

발생

결론

시스템은 잠금 상태가 아니었고하지 절전 모드 (,853,432를 사용하여 10), Windows 8 이상의 컴퓨터에서는 화면을 깨울 수 없습니다.