1。怎么检查机器上是否已经插入U盘?如何获得U盘盘符?
2。怎么设置通信端口的波特率,奇偶校验位?
全都能答出来的得满分,答出任意一问的得一半分。
各位大侠,急救呀!!!!!!

解决方案 »

  1.   

    2
    MSComm 控件示例
    下面这个简单的例子演示了用调制解调器进行基本的串行通讯:Private Sub Form_Load ()
       ' 保存输入子串的缓冲区
       Dim Instring As String
       ' 使用 COM1。
       MSComm1.CommPort = 1
       ' 9600 波特,无奇偶校验,8 位数据,一个停止位。
       MSComm1.Settings = "9600,N,8,1"
       ' 当输入占用时,
       ' 告诉控件读入整个缓冲区。
       MSComm1.InputLen = 0
       ' 打开端口。
       MSComm1.PortOpen = True
       ' 将 attention 命令送到调制解调器。
       MSComm1.Output = "ATV1Q0" & Chr$(13) ' 确保
       ' 调制解调器以"OK"响应。
       ' 等待数据返回到串行端口。
       Do
          DoEvents
       Buffer$ = Buffer$ & MSComm1.Input
       Loop Until InStr(Buffer$, "OK" & vbCRLF)
       ' 从串行端口读 "OK" 响应。   ' 关闭串行端口。
       MSComm1.PortOpen = False
    End Sub注意   MSComm 控件可以采用轮询或事件驱动的方法从端口获取数据。这个简单的例子使用了轮询方法。关于事件驱动方法的例子请参阅 OnComm 事件的帮助。
      

  2.   

    1.简单的一个方法放一个driverlistbox,隔段时间刷新一下,如果有u盘,会自动列出来
      

  3.   

    (续)
    二.中文Win 95/98下的通信问题与解决方法   1.接收的数据少于发送的数据   如果通过MSComm控件一次性传送较多的二进制数据,那么,很可能收到的数据不足。例如在设置为2400bps传输率的情况下,一次性可以传输2048个字符数据,那么在大多数情况下一次只能收到1200个字符左右,这是因为新版的MSComm32.OCX中存在一个影响传输二进制数据的臭虫(bug),注意这不是特性。   32位Windows API函数(以下简称API)使用了几个用COMMTIMEOUTS结构表示的限时变量,WriteTotalTimeOutConstant即是其中的一个,它被Windows内部设定为5000(即5秒),这个常量决定了在通信驱动程序停止传输之前花费在发送缓冲区中数据的时间的长短。5秒钟意味着通信速度为1200bps情况下仅能发送600个字符,2400bps情况下仅能发送1200个左右的字符。事实上,在一个缓冲区内一次性发送更多的数据是非常可能的。这个bug同样也能引发问题,甚至在高速串口通信情况下,即使系统在使用流控制,无论是软件流(Xon/Xoff)还是硬件流(CTS/RTS)。假如数据在发送缓冲区中时流控制停止了传输,如果停止时间超过5秒钟,则数据就会丢失。在某些环境下,5秒钟可能相当短,不过也不必担心,VB 5.0/6.0版本的MSComm控件有一个新增的重要的属性称为CommID,CommID指的是当串口被打开时,被API所调用的串口句柄或称标志,这也意味着能利用API接口函数去修改这个常量。每次串口关闭后,Windows会自动将之恢复为5000,所以,每次打开串口后需要重新设定以下API声明,其代码如下。   Type COMMTIMEOUTS   ReadIntervalTimeout As Long ReadTotalTimeoutMultiplier As Long ReadTotalTimeoutConstant As Long   WriteTotalTimeoutMultiplier As Long   WriteTotalTimeoutConstant As Long   End Type   Declare Function SetCommTimeouts Lib "Kernel32" (ByVal hFile As Long,lpComm TimeoutsAs COMMTIMEOUTS) As Long   Declare Function GetCommTimeouts Lib "Kernel32" (ByVal hFile As Long,lpCommTimeouts As COMMTIMEOUTS) As Long   Dim timeouts As COMMTIMEOUTS   Dim Ret As Long   If Comm1.PortOpen = False Then    Comm1.PortOpen = True   End If   Ret=GetCommTimeouts(Comm1.CommID,timeouts)   'Set some default timeouts   timeouts.ReadIntervalTimeout = 1   timeouts.ReadTotalTimeoutMultiplier = 1   timeouts.ReadTotalTimeoutConstant = 1   timeouts.WriteTotalTimeoutMultiplier = 1   timeouts.WriteTotalTimeoutConstant=(Comm1.OutBufferSize\Val(Comm1.Settings))*10000+1000   Ret=SetCommTimeouts(Comm1.CommID,timeouts)   (程序1)   2.如何发送大于128的字符数据   在通信程序中,以单字符方式逐个发送数据时,每一个数据范围为0-255(即十六进制的00-FF)。在单字符版本的英文Win 95或DOS版的BASIC程序中,只需要将相应的数据转换成相应的字符发送到通信端口即可。但在中文Win 95/98下却行不通,假设在中文Win 95/98下运行以下程序:   DIM i   For i = 0 To 255    MSComm1.Output = chr(i)   Next i   希望在接收端得到预期的0-255之间的数据,结果却是:前129个数据接收正确,为0-128,后面127个数据为126个0和一个255。造成这种结果的原因在于中文Windows使用的是双字节字符集(DBCS)系统。DBCS系统使用0-128之间的数字表示ASCII字符,大于128的数字仅作为前导字符,它只是显示是一个非拉丁语系的字符,而并不代表实际意义。上述程序在调用CHR()函数时用到了DBCS字符集,因此产生了此类错误。那么,如何发送大于128的数据呢?答案是使用字节数组,将以上程序改为:   Dim cc(255) As Byte   For i = 0 To 255    cc(i) = i   Next i   MSComm1.Output = cc   Do    DoEvents   Loop Until MSComm1.OutBufferCount = 0      '接收过程 MSComm1_OnComm()   Select Case MSComm1.CommEvent   Case comEvReceive    Dim Buffer As Variant,b1,i    MSComm1.InputMode = comInputModeBinary    MSComm1.InputLen = 0    Buffer = MSComm1.Input    For i=LBound(Buffer) To UBound(Buffer)    Debug.Print Buffer(i);    Next i   case .....   3.如何发送0字符(00H,NULL)   在Visual C++中使用串口控件发送0字符有些麻烦,但在VB 5.0/6.0中只要注意以下两点即可:   (1)设置MSComm控件的属性NullDiscard=False;   (2)使用二进制接收,即用MSComm1.InputMode=comInputModeBinary便可以解决问题;   4.如何发送中文字符串(DBCS字符)   VB 5.0/6.0的各种参考书上均指明MSComm通信控件不能发送或接收双字节字符集系统(DBCS)的二进制数据,这对于我国及亚洲一些使用DBCS字符集的国家不能不说是一大遗憾。但是我在实践中发现,用MSComm控件也可以发送中文字符,具体方法有两种:   (1)直接发送   直接发送即把中文字符等同于英文字符。如:MSComm1.output="这是一行中文数据!",但这种方法发送的中文数据不能太长,发送缓冲区和接收缓冲区的大小需设定为中文字符的两倍以上,而且发送与接收系统所处的操作系统版本最好要一致,否则会出现接收或发送缓冲区溢出之类的错误。这种方法可用于一般要求不太高的场合。   (2)间接发送   在发送端将汉字或字符转换为机器内码或区位码数据数组,然后将转换后的数据发送到串口,在接收端接收到数据后,按照相反的顺序将得到的数据转换为相应的汉字或字符。在转换过程中,要用到位运算,如取得汉字的内码后需要将高字节和低字节分开,而VB 5.0/6.0中并没有提供此类函数,以下是求整数高、低字节的函数。   Public Function HiByte(a As Integer)    Dim b    b = a And &HFF00    b = b / 256    If b < 0 Then b = b + 256    HiByte = b   End Function      Public Function LowByte(a As Integer)    Dim b    b = a And &HFF    LowByte = b   End Function      5.如何更精准地计算时间差   在通信过程中,特别是在工业控制中,需要每隔若干秒做某一件工作,即延时,以下是延时函数代码。   Public Sub Delay(PauseTime As Single)    Dim Start    Start = Timer    '设定开始时间    Do While Timer    DoEvents    Loop   End Sub   实际上,当PauseTime<0.05秒时,Delay函数几乎不起作用,即Timer函数几乎每次都得到相同的时间,只有大约隔了0.005秒才会得到不同的时间,也就是说Timer的准确性只有0.05秒,但希望进行的工作却是每0.005秒一次,该怎么办呢?可以改用Windows API的TimeGetTime函数,该函数会传回Windows开机以来所经过的时间,时间单位是1/1000秒,例如,开机经过2分钟,则传回值等于2*60*1000。TimeGetTime的优点是可以将时间精确到1/1000秒,所以可以用来解决上述问题,具体代码如下:   'API的声明   Declare Function timeGetTime Lib "winmm.dll" Alias "timeGetTime" () As Long   '延时函数   Public Sub Delay(PauseTime As Single)    Dim Start    Start = timeGetTime    '设定开始时间    Do While Timer    DoEvents    Loop   End Sub   6.如何用单机进行通信测试   通常在写好了通信程序后需要两台PC或一台PC、一台单片机,将通信口连接后进行测试,但很多时侯因条件限制仅有单台PC机,测试项目很简单,那么能否测试呢?当然可以,而且方法也很简单。对于九针的串口,找一个废弃的串口鼠标,剥开鼠标线,将连接2、3针的线对接即可;对于25针的串口,可找一枚曲别针(最好有塑料外套的)将它扯直,剥去两头的塑料后在两头各弯一个圆圈,中间对折后直接套接在串口的2、3针上即可。如果担心不够安全,则可以将5针接地。   以上问题均经过测试,并且已经成功地应用于本人开发的远程字幕处理系统中,这在各类通信问题中也具有一定的普遍性。
      

  4.   

    问一下online,列出来驱动器后,我怎么知道哪个是U盘呀?
      

  5.   

    除了找最后一个字母,还有其他方法吗?再问一下billykinggym,你下面的这段程序中
    Select Case MSComm1.CommEvent   Case comEvReceive    Dim Buffer As Variant,b1,i    MSComm1.InputMode = comInputModeBinary    MSComm1.InputLen = 0    Buffer = MSComm1.Input    For i=LBound(Buffer) To UBound(Buffer)    Debug.Print Buffer(i);    Next i   case ..... 
    你的这段程序中,为啥要将InputMode设置为comInputModeBinary 呢?而且为啥又立刻将MSComm1.InputLen设置为0 呢,难道不是读出来后再设置为0吗?
      

  6.   

    1 用GetDriveType()判断
    函数的返回值应该可以依据下面的进行判断。
    0 无法检测驱动器类型
    1 根目录不存在
    DRIVE_REMOVABLE 可移动驱动器
    DRIVE_FIXED 固定驱动器
    DRIVE_REMOTE 网络驱动器
    DRIVE_CDROM CD-ROM驱动器
    DRIVE_RAMDISK 虚拟驱动器
      

  7.   

    可以试一下  dongle2001(dl)  如果可以 到是不错的方法
    这些变量很好记亚  而且应该是固定的常量
      

  8.   

    搂主不看MSDN的吗?对于MSComm有详细的说明和范例。
      

  9.   

    添加新硬件可以添加SysInfo这个部件
    事件 描述 
    ConfigChanged 当系统的硬件配置文件改变时产生。 
    ConfigChangeCancelled 当操作系统发送硬件配置变化被取消的消息时产生。 
    DeviceArrival 当系统中添加新设备时产生。 
    DeviceEventOther 未映射到通用事件的通告事件。 
    DevModeChange 当设备模式设置发生改变时产生 
    DeviceQueryRemove 从系统中删除设备之前产生. 
    DeviceQueryRemoveFailed 当 DeviceQueryRemove 事件的代码取消设备删除时产生。 
    DeviceRemoveComplete 在设备被删除之后产生。 
    DeviceRemovePending 当所有应用程序均同意删除某个设备,且该设备即将被删除时产生。 
    QueryChangeConfig 请求改变当前的硬件配置文件时产生。 
      

  10.   

    billykinggym说对于9针串口用废弃串口鼠标连2,3针,那我直接连接串口得2,3针行吗?
    还有,串口得波特率能随便设置吗?如设成57600