我的USB设备是模拟成COM口的。
我的程序在打开COM口的情况下,拔了该设备,再插到另外一个端口,设备驱动就出问题了。
我的程序要先关闭COM口,再插设备才正常。

解决方案 »

  1.   

    用sysinfo控件SysInfo 可以用于检测系统事件,例如桌面的大小改变、分辨率改变、时间改变,或用于提供操作系统平台和版本信息。它也可以用于管理交流电 (AC) 和电池电源之间的切换,以及硬件配置的改变。在 Windows 95 中,在新设备添加到系统之后能够被自动检测出来。使用 SysInfo 控件的属性和事件可以分享这种“即插即用”技术带来的好处。例如,在专门为笔记本电脑编写的应用程序中,可以对在 PC 卡插槽中插入或者拔出 PC 卡作出响应。在运行时,SysInfo 控件是不可见的。图 2.27 SysInfo 控件可能的用途
    确定操作系统平台和版本
    检测桌面和监视器大小和分辨率的改变
    检测并管理即插即用设备
    监视电池和电源状态 
    SysInfo 控件的特性
    使用 SysInfo 控件,可以监视操作系统提供的信息,并对系统生成的事件作出响应。该控件的特性可分为如下几个部分: 操作系统属性(例如 OSVersion 和 WorkAreaHeight 属性)。
    与系统的改变有关的事件(例如 DisplayChanged、TimeChanged 和SettingChanged 事件)。
    即插即用事件(例如 DeviceArrival、DeviceRemoveComplete 事件)。
    电源状态事件和属性(例如 PowerSuspend 和 PowerResume 事件,以及 ACStatus 和 BatteryStatus 属性)。 
    下面几节将介绍如何使用上文中描述的事件和属性。操作系统属性和事件
    SysInfo 控件的操作系统属性和事件可以用于检测当前操作系统及其版本、某些全局设置的改变,或者桌面大小和分辨率的改变。操作系统平台和版本属性
    下表列出了可以用于确定当前的操作系统平台和版本的属性:类别 项目 描述 
    属性 OSPlatform 返回值标识应用程序运行在什么操作系统上。 
      OSVersion 返回值标识运行应用程序的操作系统的版本号。 
      OSBuild 返回值提供运行应用程序的操作系统的编译序号。 
    详细信息 “SysInfo 应用实例 1:检测当前操作系统和版本”提供了如何使用这些属性的示例。桌面大小和屏幕分辨率属性和事件
    下表列出了专门用于管理桌面和屏幕分辨率的操作系统属性和事件:类别 项目 描述 
    属性 ScrollBarSize 返回滚动条宽度的系统量度,以缇为单位。 
      WorkAreaHeight 返回可见桌面的高度,这是为 Windows 95 和 Windows NT 4.0 任务条作了调整之后的值。 
      WorkAreaLeft 返回可见桌面左边界的坐标,这是为 Windows 95 和 Windows NT 4.0 任务条作了调整之后的值。 
      WorkAreaTop 返回可见桌面上边界的坐标,这是为 Windows 95 和 Windows NT 4.0 任务条作了调整之后的值。 
      WorkAreaWidth 返回可见桌面宽度,这是为 Windows 95 和 Windows NT 4.0 任务条作了调整之后的值。 
    事件 DisplayChanged 在系统屏幕分辨率发生变化时产生该事件。 
      SysColorsChanged 当应用程序或控制面板改变了系统颜色设置时产生该事件。 
    当屏幕的分辨率发生改变时,将触发 DisplayChanged 事件。在 DisplayChanged 事件中使用 WorkAreaHeight、WorkAreaWidth、WorkAreaRight 和 WorkAreaLeft 属性即可确定当前的系统大小(可用的屏幕区域),并进行相应的调整。如果在 Windows 95 或 Windows NT 4.0 中任务条是可见的,则它不被算在可用的屏幕区域之内。如果用户通过 Windows 95 或 Windows NT 4.0 的控制面板中的“显示”设置改变了滚动条的大小,则有可能需要更新显示区域以正确地放置滚动条。可以在 DisplayChanged 事件中使用 ScrollBarSize 属性进行调整。详细信息 在“SysInfo 应用实例 2:屏幕大小和分辨率改变时进行相应调整”一节中提供了如何运用这些属性和事件的示例。管理硬件配置和即插即用事件
    如果操作系统支持该特性,则即插即用事件提供了管理系统硬件配置变化的手段。例如,硬件配置改变、系统正在连接或断开,或者 PC 插槽中正在插入或拔出 PC 卡。下表列出了专门用于管理硬件配置和即插即用设备的 SysInfo 控件事件。事件 描述 
    ConfigChanged 当系统的硬件配置文件改变时产生。 
    ConfigChangeCancelled 当操作系统发送硬件配置变化被取消的消息时产生。 
    DeviceArrival 当系统中添加新设备时产生。 
    DeviceEventOther 未映射到通用事件的通告事件。 
    DevModeChange 当设备模式设置发生改变时产生 
    DeviceQueryRemove 从系统中删除设备之前产生. 
    DeviceQueryRemoveFailed 当 DeviceQueryRemove 事件的代码取消设备删除时产生。 
    DeviceRemoveComplete 在设备被删除之后产生。 
    DeviceRemovePending 当所有应用程序均同意删除某个设备,且该设备即将被删除时产生。 
    QueryChangeConfig 请求改变当前的硬件配置文件时产生。 
    在 Windows 95 中,用 ConfigChanged 事件通告硬件配置文件的改变。在连接和断开时,笔记本电脑通常使用不同的硬件配置文件。例如,在连接时,笔记本电脑也许会连接到网络、外部监视器上,或访问光盘驱动器。SysInfo 控件的与设备有关的事件提供了硬件配置中的设备改变反馈信息。在硬件添加到系统中之后,应用程序可以动态地使用它。使用电源状态属性和事件
    电源状态事件和属性能用来监视台式或笔记本电脑的交流电或电池电源状态。笔记本电脑通常都实现了电源挂起、电源恢复和电池状态等特性,然而应用程序应该适用于所有类型的计算机。下表列出了 sysInfo 控件关于电池和电源状态的事件和属性:类别 项目 描述 
    属性 ACStatus 返回值指出系统正在使用交流电还是电池电源。 
      BatteryFullTime 返回值指示电池的完全充电时间。 
      BatteryLifePercent 返回电池所剩电能占完全充满时的百分比。 
      BatteryLifeTime 返回值指示电池的剩余使用时间。 
      BatteryStatus 返回值给出电池的充电状态。 
    事件 PowerQuerySuspend 在系统电源准备挂起时产生。 
      PowerResume 当系统结束挂起模式时产生。 
      PowerStatusChanged 当系统的电源状态变化时产生。 
      PowerSuspend 在系统即将进入挂起模式之前产生。 
    在电源挂起时,电源事件可为应用程序提供一定的安全保护。PowerSuspend 事件通知应用程序电源即将被挂起。这样就可以在电源挂起前保存应用程序的状态,或保存尚未存储的文件。PowerStatusChanged 事件通知交流电和电池电源状态的改变。如果电池能量已经很少,就需要保存数据。
      

  2.   

    我知道sysinfo控件。
    问题是这个sysinfo控件在XP下一点效果也没有啊!