2010-02-25 2 views
2

Windows Mobile 기기의 전원 끄기 버튼을 누를 때 알림을받을 수있는 쉬운 방법이 있습니까? 물론 C# 사용.Windows Mobile - 전원 끄기 버튼을 눌렀을 때 감지하기

감사합니다.

+0

Dupe : http://stackoverflow.com/questions/2331343/detect-and-prevent-delay-windows-mobile-power-off –

+0

나는 이것을 속임수라고 부르지 않을 것이다. 그는 통보를 받고 싶어하지만 그것을 막을 수는 없습니다. – ctacke

+0

필자는 필자의 좌절감을 극복해야한다. 현재 Windows Mobile SDK의 상태는 애처 롭다. 백그라운드 활동을 시작하고 끌 수있는 방법이 없습니다. 사용자가 PowerOff 버튼을 눌러도 계속 실행됩니다. 반면에 사용자의 설득을 위해 백그라운드 활동을 중지하고 실행할 수있는 코드는 실행될 수 없습니다. 멋지다. 그냥 놀랍다 ... – kape123

답변

3

전원 버튼을 누르면 전원 관리자가 상태 변경 알림을 발송합니다. 귀하는 오후에 RequestPowerNotifications으로 전화하여 통지를 보내달라고 요청할 수 있습니다. 통지를받을 point-to-point messgae queue (관리되는 버전 here)의 핸들을 보내야합니다.

이 작품을 만들기 위해 모든 글씨체를 쓰고 싶지 않은 tho의 경우,이 모든 것은 이미 자발적으로 자위대의 PowerManagement class에 미리 설정되어 있습니다. 또한

는 알림이 은 상태 변화가 발생하기 전에 앱에서 알림을받을 것이라는 점을 의미하지 않는 요청 단지를 변경할 수 없기 미리 양해. 예를 들어, 앱이 알림을 보지 못한다는 것은 매우 일반적인 일이며, 실제로 앱이 알림을 보지 못하더라도 실제로 일시 중지되기 전에는 아무 것도 실행할 시간이 없습니다. 일반적으로 처리기는 장치가 다시 시작될 때 실행되고 그 다음에 다시 시작 상태의 처리기가 실행됩니다.

전력 관리자가 기다리지 않고 단순히 메시지를 브로드 캐스트합니다. 종료 전에이 코드를 사용하여 실행할 수는 없습니다.

+0

흠 ... 전원 버튼을 눌러도 계속 소리가 나는데 ... 자동 스크롤 = false로 설정하려고합니다. – kape123

+0

내가 왜 "OpenNETCF.WindowsCE.PowerManagement '에서'OpenNETCF.WindowsCE '유형의 PowerManagement 클래스를 사용할 때로드 할 수 없습니까? – kape123

+0

어셈블리 버전이 불일치하거나 다른 버전의 SDF 바이너리 등 여러 복사본이있는 것 같습니다. – ctacke

0

불행히도 Windows CE 6 장치에서 CreateMsgQueue가 CoreDll에 존재하지 않습니다. 다른 제안?

내가 생각할 수있는 유일한 점은 지속적으로 장치의 실시간 클럭에 대해 Environment.TickCount를 확인하는 것입니다. 시간이 앞으로 움직 였지만 틱 수가 아니라면 아마도 장치가 잠자고 있었을 것입니다. 시간이 점프 경우 인해 장치의 실시간 시계의 고장으로 속임수를 얻을 것이기 때문에이 솔루션 같은

망가

+0

이미지를 바꿀 수 있습니까? CreateMsgQueue는 정말로 공통적 인 API이며, 귀하의 OS에는없는 API가 있습니다. 나는 그렇지 않다는 말은 아니지만, 이미지는 제한된 기능을 가지고 있습니다. 대기열 지원이있는 새로운 OS를 만들거나 OEM에게 추가하여 추가하는 방법에 대해 열심히 노력할 것입니다. – ctacke

+0

나는 실제로 이것을 포기했다. WM이 얼마나 부숴 졌는지 분명히 시연한다. ( – kape123

1
난 그냥 소스 코드 나 OEM을위한 필요없이 XIP의 RPM 바이너리로 CreateMsgQueue()를 배치

도움. 16 진수 편집기와 XDA 포럼의 몇 가지 도구를 사용해야합니다.

<DllImport("coredll.dll", SetLastError:=True)> _ 
Public Shared Function CreateMsgQueue(ByVal lpszName As String, ByVal lpOptions As MsgQueueOptions) As IntPtr 
End Function 

는 그냥 이벤트를 전원을 차단하기위한 간단한 드라이버를 작성해야합니다, 당신의 드라이버는 파워 다운 장치 이벤트에 과정을 힘을 아래로 잡아 허용된다. 그런 식으로 플래그를 설정하고 백그라운드 실행 프로세스를 중지하고 모든 변수를 저장 한 다음 PowerEp 이벤트로 복원 할 수있는 보장 된 이벤트를 얻을 수 있습니다.이 이벤트는 winCE 장치 드라이버의 표준 evC++ 이벤트이기도합니다. 아주 간단합니다. 이것을 위해 인터넷에 데모 소스 코드가 100 개 있습니다. 사이트의 100 개에서 보았습니다.

관련 문제