我在程序开发过程中用到了USB转串口线,但是它虚拟成COM口后端口自动侦测就成了一个问题。在有的笔记本上它被虚拟成了COM17,如果我用程序循环从COM1到COM20,这也太慢了也太蠢了。请问哪位高手可以赐教,用WindowsAPI或者其他一些方式获取Windows的USB转串口所形成的虚拟COM口号!
解决方案 »
- 求解stringgrid
- edit一个小问题,如何取其中一部分值,急
- 哪位兄弟有Wavecom wmod2 的短信开发接口?给我发一个,万分感谢!分不够再加!
- 这个问题有点儿难,有点儿难!
- 请问哪里能下载荷Report Machine 2.5(最新版),我觉得它很好用的。
- 我如何在WebBrowser中访问HTML页面里面的元素?
- 我做的flash播放器,请大家提点意见,有分加的哦.
- 向各位请教一个关于application.messagebox的问题
- delphi6自带的控件能否实现delphi中那个“打开文件”按钮的功能?一定给分!up有分!
- 我的程序窗体图标不见了
- 问一个非Delphi的问题,望有高手指点!!!!!!!!!!
- “测试连接失败,因为初始化程序提供时发生错误。发生了一个Oracle错误,但无法从Oracle中检索错误信息”
LONG ret;
OSVERSIONINFO osvi;
BOOL bOsVersionInfoEx;
char keyinfo[100],comm_name[40],ValueName[40];
int i;
DWORD sType,Reserved,cbData,cbValueName; hIcon=AfxGetApp()->LoadIcon(IDI_HARDWARE);
SetIcon(hIcon,false); ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
memset(keyinfo,0,100);
strcpy(keyinfo,"HARDWARE\\DEVICEMAP\\SERIALCOMM");
i=0; sType=REG_SZ;Reserved=0;
bOsVersionInfoEx =GetVersionEx(&osvi);
ret=RegOpenKeyEx(HKEY_LOCAL_MACHINE,keyinfo,0,KEY_ALL_ACCESS,&hKey);
if (ret==ERROR_SUCCESS){
// 10-25
if (osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
{
for(i=1;i<=128;i++)
{
sprintf(comm_name,"COM%d",i);
if (CommPortIsUsed(comm_name)==1) m_comlist.AddString(comm_name);
}
}
else if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)
{
do
{
cbData=40;cbValueName=40;
memset(comm_name,0,40);
memset(ValueName,0,40);
ret=RegEnumValue(hKey,i,ValueName,&cbValueName,NULL,&sType,(LPBYTE)comm_name,&cbData);
if (ret==ERROR_SUCCESS)
{
if (CommPortIsUsed(comm_name)==1) m_comlist.AddString(comm_name);
i++;
}
}while (ret==ERROR_SUCCESS);
}
}
RegCloseKey(hKey);
//读取可用串口
function getComNames():TStringList;
var
reg:TRegistry;
strName:TStringList;
i:integer;
begin
strName:=TStringList.Create;
reg:= TRegistry.Create;
reg.RootKey:=HKEY_LOCAL_MACHINE;
if reg.OpenKeyReadOnly('hardware\devicemap\serialcomm') then
begin
reg.GetValueNames(strName);
end;
Result:=TStringList.Create;
for i:=0 to strName.Count-1 do
Result.Add(reg.ReadString(strName.Strings[i]));
reg.CloseKey;
reg.Destroy;
end;
//添充到
procedure TFcomPara.FormCreate(Sender: TObject);
var Reg: TRegistry;
strName:TStringList;
i:integer;
begin
strName:=getComNames();
cobComName.Clear;
for i:=0 to strName.Count-1 do
cobComName.AddItem(strName[i],self);
cobComName.ItemIndex:=0;
end;