电脑连了一个ID卡读卡器,即插即用那种。
测试时,做了个窗体,一个textbox获取焦点,然后刷卡后textbox会显示度过来的ID数据(一个10位的10进制整数)。然后去库里找这个ID对应的其他数据。现在想修改下,不用这个窗体和textbox。在主窗体开一个线程,实时监控USB端口,有数据读入时直接获取。C#如何实现这个功能?有现成代码参考吗?谢谢了。

解决方案 »

  1.   

    既然原来是可以读取的 你就在线程里监测系统硬件信息如果有新USB硬件就检测是不是U盘 ,然后读里面数据 执行你的操作不就行了 或者推测应该可以找到关于新硬件的一个系统事件的 把你“新USB硬件就检测是不是U盘 ,然后读里面数据 执行你的操作”这一步的操作添加到事件的关联方法里。就OK了。没做过USB的东西 但是过程应该是大同小异的,把USB设备当做字节码的信号就明白了。
      

  2.   

    既然有数据过来,
    那在那个窗体都监视都是回事的,
    最简单的就是,你在主窗体里,整个 timer,不停里去监控,
      

  3.   

    既然你在其它窗体可以得到它的值,
    最简单的就是,
    你在主窗体里,整个 timer 控件,不停去监控它,就是了
      

  4.   

    不可能有现成的代码,你的设备是什么型号的?什么类型的?什么接口?硬件厂商的SDK有么?如果能够获取硬件消息通知(如USB设备插上时,系统会广播一条消息,如果那个组件响应了消息就去处理该消息...扯远了),就按照该消息进行设计,不需要自己去监视,否则需要自己写个线程,不断轮询该接口看看是否有数据,然后再处理...
      

  5.   

    [C# code]
    protected override void WndProc(ref Message m)
            {
                #region U盘播放
                if (m.Msg == 0x0219)//WM_DEVICECHANGE
                {
                    switch (m.WParam.ToInt32())
                    {
                        case 0x8000://DBT_DEVICEARRIVAL
                            {
                                Console.WriteLine("设备接入");
                                break;
                            }
                        case 0x8004://DBT_DEVICEREMOVECOMPLETE
                            {
                               Console.WriteLine("设备拔出");
                                break;
                            }
                    }
                }
                base.WndProc(ref m);
    }
    [/code]
    我都是用系统消息来检测U盘的接入和拔出的
      

  6.   

    [C# code]
    protected override void WndProc(ref Message m)
            {
                #region U盘播放
                if (m.Msg == 0x0219)//WM_DEVICECHANGE
                {
                    switch (m.WParam.ToInt32())
                    {
                        case 0x8000://DBT_DEVICEARRIVAL
                            {
                                Console.WriteLine("设备接入");
                                break;
                            }
                        case 0x8004://DBT_DEVICEREMOVECOMPLETE
                            {
                               Console.WriteLine("设备拔出");
                                break;
                            }
                    }
                }
                base.WndProc(ref m);
    }
    [/code]
    我都是用系统消息来检测U盘的接入和拔出的
      

  7.   


    protected override void WndProc(ref Message m)
       {
       #region U盘播放
       if (m.Msg == 0x0219)//WM_DEVICECHANGE
       {
       switch (m.WParam.ToInt32())
       {
       case 0x8000://DBT_DEVICEARRIVAL
       {
       Console.WriteLine("设备接入");
       break;
       }
       case 0x8004://DBT_DEVICEREMOVECOMPLETE
       {
       Console.WriteLine("设备拔出");
       break;
       }
       }
       }
       base.WndProc(ref m);
    }