知道91助手和豌豆莢吧? 说到这两个东西,最让人好奇的应该是就是和手机的交互了。我之前有研究过电脑和安卓的交互,基本功能已经走通了,在这里我想分享一下。 初初看这个问题觉得很简单,然后如果你有点计算机基础的话深入想一下却发现有很多实现上的空白。
---------------------------------------------------------上面是废话,进入正题。
首先要解决的问题就是自动在设备插入电脑时作出响应。
这个问题得解决方法就是:WM_DEVICECHANGE 事件。
这个事件是一个全局事件,不需要预先向系统注册之类的,只要你的程序有窗口就能随时响应设备变更事件WM_DEVICECHANGE,当然全局事件是进程的Top-Level窗口才能收的到,如果你想在子窗口或者模态窗口中直接收到的话可以考虑使用RegisterDeviceNotification注册一下。
事件的WPARAM参数包含了设备更新的类型,设备变更(Device Change)有很多种情况的嘛,有插入、移除、驱动安装成功神马神马的。类型种类在MSDN中有说,如下:
DBT_CONFIGCHANGECANCELED
A request to change the current configuration (dock or undock) has been canceled.
(设备设置取消,我还没怎么研究过这个设置的问题,不过这个跟我现在讲的主题都没关系的。)
DBT_CONFIGCHANGED
The current configuration has changed, due to a dock or undock.
(设备设置变更)
DBT_CUSTOMEVENT
A custom event has occurred.
(这个只是告诉你,设备驱动发出了一个消息)
DBT_DEVICEARRIVAL
A device or piece of media has been inserted and is now available.
(设备或者多媒体插入)
DBT_DEVICEQUERYREMOVE
Permission is requested to remove a device or piece of media. Any application can deny this request and cancel the removal.
(用戶请求弹出设备,返回TRUE允许弹出,返回BROADCAST_QUERY_DENY拒绝弹出,这就是为什么有些时候会发现U盘死活弹不出,非得强拔,这是因为有些进程一直拒绝弹出。)
DBT_DEVICEQUERYREMOVEFAILED
A request to remove a device or piece of media has been canceled.
(请求弹出失败)
DBT_DEVICEREMOVECOMPLETE
A device or piece of media has been removed.
(请求成功)
DBT_DEVICEREMOVEPENDING
A device or piece of media is about to be removed. Cannot be denied.
(强制弹出U盘,这个在360的强制弹出USB时会收到的了)
DBT_DEVICETYPESPECIFIC
A device-specific event has occurred.
(这个是某些个性设备自定义的消息的方法了,自定义部分在LPARAM指针指向的区域中)
DBT_DEVNODES_CHANGED
A device has been added to or removed from the system.
(DevNodes就是设备管理器里面显示的那棵树的节点,这个跟DBT_DEVICEARRIVAL有一点点区别,因为add有可能是因为你新装了某些驱动产生的消息。另外提个醒SAMSUNG手机插入时就是很扑街的收不到DBT_DEVICEARRIVAL类型,只能收到这个。。。)
DBT_QUERYCHANGECONFIG
Permission is requested to change the current configuration (dock or undock).
(请求修改设备设置)
DBT_USERDEFINED
The meaning of this message is user-defined.
(这个类型主要是给用户一个自定义的方法,上面DBT_DEVICETYPESPECIFIC是设备自定义的,这个主要是进程通过BroadcastSystemMessage 来广播的,我还没怎么用过这个玩意。)
好吧,检测设备插入的问题解决了,后面是判断设备是否是手机了。
原版地址:http://mongamind.blog.163.com/blog/static/1932872612013928084398/
---------------------------------------------------------上面是废话,进入正题。
首先要解决的问题就是自动在设备插入电脑时作出响应。
这个问题得解决方法就是:WM_DEVICECHANGE 事件。
这个事件是一个全局事件,不需要预先向系统注册之类的,只要你的程序有窗口就能随时响应设备变更事件WM_DEVICECHANGE,当然全局事件是进程的Top-Level窗口才能收的到,如果你想在子窗口或者模态窗口中直接收到的话可以考虑使用RegisterDeviceNotification注册一下。
事件的WPARAM参数包含了设备更新的类型,设备变更(Device Change)有很多种情况的嘛,有插入、移除、驱动安装成功神马神马的。类型种类在MSDN中有说,如下:
DBT_CONFIGCHANGECANCELED
A request to change the current configuration (dock or undock) has been canceled.
(设备设置取消,我还没怎么研究过这个设置的问题,不过这个跟我现在讲的主题都没关系的。)
DBT_CONFIGCHANGED
The current configuration has changed, due to a dock or undock.
(设备设置变更)
DBT_CUSTOMEVENT
A custom event has occurred.
(这个只是告诉你,设备驱动发出了一个消息)
DBT_DEVICEARRIVAL
A device or piece of media has been inserted and is now available.
(设备或者多媒体插入)
DBT_DEVICEQUERYREMOVE
Permission is requested to remove a device or piece of media. Any application can deny this request and cancel the removal.
(用戶请求弹出设备,返回TRUE允许弹出,返回BROADCAST_QUERY_DENY拒绝弹出,这就是为什么有些时候会发现U盘死活弹不出,非得强拔,这是因为有些进程一直拒绝弹出。)
DBT_DEVICEQUERYREMOVEFAILED
A request to remove a device or piece of media has been canceled.
(请求弹出失败)
DBT_DEVICEREMOVECOMPLETE
A device or piece of media has been removed.
(请求成功)
DBT_DEVICEREMOVEPENDING
A device or piece of media is about to be removed. Cannot be denied.
(强制弹出U盘,这个在360的强制弹出USB时会收到的了)
DBT_DEVICETYPESPECIFIC
A device-specific event has occurred.
(这个是某些个性设备自定义的消息的方法了,自定义部分在LPARAM指针指向的区域中)
DBT_DEVNODES_CHANGED
A device has been added to or removed from the system.
(DevNodes就是设备管理器里面显示的那棵树的节点,这个跟DBT_DEVICEARRIVAL有一点点区别,因为add有可能是因为你新装了某些驱动产生的消息。另外提个醒SAMSUNG手机插入时就是很扑街的收不到DBT_DEVICEARRIVAL类型,只能收到这个。。。)
DBT_QUERYCHANGECONFIG
Permission is requested to change the current configuration (dock or undock).
(请求修改设备设置)
DBT_USERDEFINED
The meaning of this message is user-defined.
(这个类型主要是给用户一个自定义的方法,上面DBT_DEVICETYPESPECIFIC是设备自定义的,这个主要是进程通过BroadcastSystemMessage 来广播的,我还没怎么用过这个玩意。)
好吧,检测设备插入的问题解决了,后面是判断设备是否是手机了。
原版地址:http://mongamind.blog.163.com/blog/static/1932872612013928084398/