【发布时间】:2011-09-07 20:10:13
【问题描述】:
我不得不将某些软件从 Windows Mobile 6.5 反向移植到 Windows CE 5.0,该软件当前检测到该单元何时位于基本单元中(ActiveSync 正在运行)。
我需要知道 ActiveSync 何时在设备上运行,以便准备设备发送和接收文件。
我找到了一篇关于使用 PINVOKE 方法(例如 CeRunAppAtEvent)的文章,但我对它的工作原理一无所知。
bool terminateDeviceEventThreads = false;
IntPtr handleActiveSyncEndEvent;
while (!terminateDeviceEventThreads)
{
handleActiveSyncEndEvent = NativeMethods.CreateEvent (IntPtr.Zero,
true, false, "EventActiveSync");
if (IntPtr.Zero != handleActiveSyncEndEvent)
{
if (NativeMethods.CeRunAppAtEvent ("\\\\.\\Notifications\\NamedEvents\\EventActiveSync",
(int) NOTIFICATION_EVENT.NOTIFICATION_EVENT_RS232_DETECTED))
{
NativeMethods.WaitForSingleObject (handleActiveSyncEndEvent, 0);
//
NativeMethods.ResetEvent (handleActiveSyncEndEvent);
if (!NativeMethods.CeRunAppAtEvent ("\\\\.\\Notifications\\NamedEvents\\EventActiveSync",
(int) NOTIFICATION_EVENT.NOTIFICATION_EVENT_NONE))
{
break;
}
handleActiveSyncEndEvent = IntPtr.Zero;
}
}
}
【问题讨论】:
-
那么这里的问题是什么?您发布的代码会在设备处于支架状态时设置一个命名事件,因此您可能可以在应用程序的其他地方等待它。
-
嗨,这就是问题所在,我不明白我找到的代码,我需要一个触发器,当设备放入底座和取出时触发,很像 WM6 中的 SystemState
标签: c# pinvoke windows-ce activesync