2017-12-22 2 views
2

안녕하세요! 나는 USB 플래시 드라이브 연결을 감지하고 연결된 드라이브로 뭔가를하는 Windows 서비스를 작성합니다. 그리고 지금은 테스트 후 슬립 모드에서 깨어 난 후 장치를 다시 처리해야합니다. 서비스가 Windows 프로그램으로 작동 할 때이 문제를 해결합니다. 문제를 해결하려면 DBT_DEVNODES_CHANGED, 서비스가이 메시지를받지 못하면 DBT_DEVICE_ARRIVALDBT_DEVICEREMOVECOMPLETE 만받습니다. 또한 시스템이 잠자기 상태가되어 메시지가 나타나지 않으면 SERVICE_CONTROL_DEVICEEVENTSERVICE_CONTROL_STOP을 제외한 모든 메시지를 확인하려고했습니다.Windows 서비스에서 절전 모드 해제를 감지하는 방법은 무엇입니까?

시스템이 깨어 났을 때를 어떻게 알 수 있습니까?

답변

4

정상적인 응용 프로그램은 창 메시지가 WM_POWERBROADCAST:PBT_APMRESUMEAUTOMATIC이지만 메시지가 창이없는 경우이 메시지를받지 못합니다. 그러나, 서비스가 WM_POWERBROADCAST

과 같은 매개 변수를 사용하여, 자사의 HandlerEx 콜백 함수에 SERVICE_CONTROL_POWEREVENT를받을 수는 시스템의 전원 이벤트의 서비스를 통지합니다. dwEventType 매개 변수에는 추가 정보가 들어 있습니다. dwEventType이 PBT_POWERSETTINGCHANGE이면 lpEventData 매개 변수는 추가 정보도 포함합니다. 시스템이 일시 중단 또는 재개 될 때 알림을 수신 할 수 있도록

레지스터 :

윈도우 8에

이후, 당신은 또한 PowerRegisterSuspendResumeNotification() 기능을 사용할 수 있습니다.

WM_DEVICECHANGE의 서비스 상응하는 SERVICE_CONTROL_DEVICEEVENT입니다 :

장치 이벤트의 서비스를 통지합니다. 서비스는 RegisterDeviceNotification 함수를 사용하여 이러한 알림을 수신하도록 등록되어 있어야합니다. dwEventType 및 lpEventData 매개 변수에는 추가 정보가 들어 있습니다.

+0

감사합니다. 나는'SERVICE_CONTROL_DEVICEEVENT'을 처리합니다. 나는 월요일에 더 많은 테스트를 해보 겠지만, 나는 SERVICE_CONTROL_POWEREVETN'을 얻지 못하고 이유를 모른다. – drem1lin

+0

너는 권리가 있지만, 나는 너와 작은 일을 잊어 버린다. SetServiceStatus를 호출하려면'SERVICE_ACCEPT_POWERBROADCAST'를 추가해야합니다. – drem1lin

0

시스템을 깨우는 가장 좋은 방법은 프로세스 전원 메시지입니다. 윈도우 WM_POWERBROADCAST 서비스 SetServiceStatus에 마지막 호출에 SERVICE_ACCEPT_POWEREVENT를 추가하고 내 오류가 아주 바보 SERVICE_CONTROL_POWEREVENT

처리해야 처리해야합니다. SERVICE_ACCEPT_POWEREVENT을 추가하는 것을 잊었습니다.

관련 문제