glgyzhou 发表于 2009-7-25 22:37:03

怎样才能用BCB自动检测新增串口

用USB转串口的芯片通信,当插入USB线后会在电脑里自动增加一个串口,如果能在程序里自动检测到这个新增的串口,而不是手工的去指定串口,这样使用起来就方便得多了。
    我现用的是TYbCommDevice串口控件,当插入USB线后,在端口设置里增加了一个端口(COM3或COM5等不定),打开注册表
HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM,也发现新增了同样的端口,但就是不知怎样用BCB编程自动找到这个新增的端口,有高手能指点一下吗?
    我学习BCB编程时间不长,上面的问题想了好久不得其解,找了很多资料也没得答案,真不知从何着手。

helloshi 发表于 2009-7-25 23:14:02

去查注册表,不过我用VC,BCB不懂

powerg7 发表于 2009-7-25 23:17:06

那检测USB插入的消息好了,查这个USB芯片的GUID,然后注册变更消息通知,然后处理win发过来的硬件变更消息就好了

helloshi 发表于 2009-7-25 23:17:52

Windows Registry Editor Version 5.00


"\\Device\\Serial0"="COM1"

helloshi 发表于 2009-7-25 23:20:00

调用读注册表的函数。

glgyzhou 发表于 2009-7-26 02:08:27

谢谢以上各位高手指点,但目前的我还是一头雾水,未求得解决方法,(唉,只怪我学术不精)。哪位高手是否可以提供详细点的解决方案或这方面的参考资料也行,在这里谢谢先。
   下面简单说说我的东东及想急需解决的问题:我做的是用电脑经过USB转串口线进行控制由单片机制作的一个小仪器,串口的通讯参数如波特率,数据位等已经用程序设好,使用时不需改变,唯独端口这项COM1(或许是COM2,COM3.....)不能用程序设定,因为在不同的电脑及同一台电脑的不同USB插口,这个COM*是不确定的,因此我的这个程序就必需保留(如图)的这个按钮,使用起来非常不方便,如何能省掉这个按钮及“端口设置”这个对话框,让程序自动找到与小仪器的通讯端口,这就是我想要的东东。
http://cache.amobbs.com/bbs_upload782111/files_17/ourdev_464591.jpg
(原文件名:11.jpg)

yu_studio 发表于 2009-7-26 09:45:47

顶!

rube 发表于 2009-7-26 10:42:05

如果用comport控件我知道怎么做,但TYbCommDevice就不知道了

qdvenus 发表于 2009-7-27 20:46:27

读注册表后就知道串口数了,再通过握手就知道要使用哪个串口了

hyz_avr 发表于 2009-7-27 20:55:14

TYbCommDevice 就可以自动识别电脑的所有串口.. 你要自动识别哪个串口和你设备相连的话.就用楼上的方法--握手

glgyzhou 发表于 2009-7-28 19:30:39

感谢有这么多网友给支招,但我乃不知怎样具体编写程序,我好笨哦,呵呵。
    这贴子的原意是:能否使“USB转串口设备”在使用中就像使用U盘那么方便,(即插入U盘在“我的电脑”就出现一个盘符,拔出U盘该盘符就即刻消失,但程序不会出现死机现象)。
    觉得读注册表这个方法不错,但具体怎么实现现在不懂,下面换一种提问方式,看看是否有高手给出BCB原程序代码。(如果程序很麻烦,给点提示或付费也行,谢谢先)。
    题目是这样:建一个窗口,放上一个控件Edit1,通过程序来实现:当插入USB/232线,Edit1显示该串口的编号,当拔出线时,Edit1显示的是0,(见下图)。若能实现以上功能,目的就容易达到了。
http://cache.amobbs.com/bbs_upload782111/files_17/ourdev_465287.jpg
(原文件名:3.jpg)

glgyzhou 发表于 2009-7-29 18:53:36

现在市场上的电脑在接口方面大多已取消了传统的9针串行接插口,与此同时市场上推出了大量的"USB转串口线",价格从几元到几十元钱,这给常使用串行通讯的使用者带来方便,但如何使用好这种线,是否能像真正的USB设备一样那样,即插即用,(好象原九针串插头是不允许带电拔插的).这给串口编程爱好者带来新的课题,那就是能否自动找到新增串口,有这方面使用经验的网友是否能给介绍介绍.
   http://cache.amobbs.com/bbs_upload782111/files_17/ourdev_465669.jpg
(原文件名:1.jpg)

kingsabbit 发表于 2009-7-29 19:05:28

Delphi的,我是用Spcom写的:

procedure TForm1.EnumComPorts(Ports: TStrings);
var
KeyHandle: HKEY;
ErrCode, Index: Integer;
ValueName, Data: string;
ValueLen, DataLen, ValueType: DWORD;
TmpPorts: TStringList;
begin
ErrCode := RegOpenKeyEx(
    HKEY_LOCAL_MACHINE,
    'HARDWARE\DEVICEMAP\SERIALCOMM',
    0,
    KEY_READ,
    KeyHandle);

if ErrCode <> ERROR_SUCCESS then
    Exit;// raise EComPort.Create(CError_RegError, ErrCode);

TmpPorts := TStringList.Create;
try
    Index := 0;
    repeat
      ValueLen := 256;
      DataLen := 256;
      SetLength(ValueName, ValueLen);
      SetLength(Data, DataLen);
      ErrCode := RegEnumValue(
      KeyHandle,
      Index,
      PChar(ValueName),
      Cardinal(ValueLen),
      nil,
      @ValueType,
      PByte(PChar(Data)),
      @DataLen);

      if ErrCode = ERROR_SUCCESS then
      begin
      SetLength(Data, DataLen);
      TmpPorts.Add(Data);
      Inc(Index);
      end
      else
      if ErrCode <> ERROR_NO_MORE_ITEMS then
          exit; //raise EComPort.Create(CError_RegError, ErrCode);

    until (ErrCode <> ERROR_SUCCESS) ;

    TmpPorts.Sort;
    Ports.Assign(TmpPorts);
finally
    RegCloseKey(KeyHandle);
    TmpPorts.Free;
end;

end;

自动识别计算机有多小个控件,不过要关闭程序再打开后就可见到新的串口存在了

kingsabbit 发表于 2009-7-29 19:11:23

SPCOM控件:
SPCOM.PASourdev_465673.rar(文件大小:14K) (原文件名:SPComm.rar)

Delphi中直接添加此控件,然后就有一个类似MSCOM的图标,此控件就可以使用了,非常方便,比MSCOM好用

kingsabbit 发表于 2009-7-29 19:14:00

Delphi调用方法如下:EnumComPorts(COMNumberCoMboBox.Items);COMNumberCoMboBox.Items为所要列出端口号的组合控件(COMBOBOX),即列表框或组合框之类的组件

zend 发表于 2011-5-14 09:40:32

回复【楼主位】glgyzhou
-----------------------------------------------------------------------

楼主,问题解决了吗,我也有相同的问题,有方法了共享一下,感谢!

dwwzl 发表于 2012-1-29 11:24:17

咱也关注啊,需要顶

at90s 发表于 2012-1-29 16:29:28

整一个定时器,每秒查询一下注_册表。

huzaizai007 发表于 2012-1-30 15:51:04

学习……
页: [1]
查看完整版本: 怎样才能用BCB自动检测新增串口