我用EVC做了一个工程,想要实现功能:不管程序执行到什么状态,只要SD卡或其它卡被拔出就退出程序。问题是怎么实时检测到SD卡的状态呢???在WINCE下没有WM_DEVICECHANGE等检测设备的消息,象这个功能在WINCE下应该怎么实现比较好呢??!!
奇怪,我发一个帖子怎么出现4个了~~~~~~~~斑竹是不是出什么问题了。
不过还是请各位先帮忙解决问题吧!!!
有的.
LRESULT CXXXXXDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
if ( message == WM_DEVICECHANGE )
{
switch (wParam)
{
case DBT_DEVICEARRIVAL: //U盘插进来
{
DEV_BROADCAST_HDR* dhr = (DEV_BROADCAST_HDR *)lParam;
PDEV_BROADCAST_PORT lpdbp = (PDEV_BROADCAST_PORT)dhr;
if( lpdbp->dbcp_devicetype == DBT_DEVTYP_PORT )
{
if ( wcsicmp(lpdbp->dbcp_name, TCH_PATH3) == 0 ) //盘符,自己断点看看,我们是CF卡
{ //判断到升级u盘
}
}
break;
}
case DBT_DEVICEREMOVECOMPLETE:
break;
default:
break;
}
}
{GUID}=GUID_friendly_name".
{0}; // or any known and relevant d
谢谢各位的回答。
回 KevinCEC:WINCE下不支持这个WM_DEVICECHANGE消息。
回楼上的,谢谢你的提示,看来在WINCE下得自己创建一个消息队列来处理了
不可能,你的ce是什么版本?
我在ce5.0上就使用过WM_DEVICECHANGE
而且在platform builder for ce5中也能找到WM_DEVICECHANGE
WINCE下的WM_DEVICECHANGE消息是要自己定义的吧???
我用的就是CE5.0的啊,我在EVC工程下使用,提示说WM_DEVICECHANGE没有定义,难道还要包括什么头文件???
错误如下:
error C2065: 'WM_DEVICECHANGE' : undeclared identifier
error C2065: 'DBT_DEVICEARRIVAL' : undeclared identifier
error C2051: case expression not constant
warning C4060: switch statement contains no 'case' or 'default' labels
在dbt.h中有
#define WM_DEVICECHANGE 0x0219
那就是说我只要在我的工程里包含dbt.h头文件就可以使用WM_DEVICECHANGE消息了哦
用Message queue messages来实现设备消息通知的具体实现原理是怎么样的?以上哪位朋友能否详细说下呢?!
谢谢了~~
KevinCEC 的方法最好,很全面了.
wince 2.0以上都支持WM_DEVICECHANGE.
支不支持要看OS机制,而不能光看有没有定义.
因为WM_DEVICECHANGE只是一个常量.