本文介绍了如何使用Windows API枚举所有已安装的USB调制解调器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经购买了 ZTE MF190 USB调制解调器并开始使用它。

I have bought a ZTE MF190 usb modem and began to harness it.

到目前为止,我已经通过编程方式收到了短信使用 TurboPowers 的免费 AsyncPro 组件发送到另一个移动设备。

So far, I have managed to programmatically have an sms sent to another mobile equipement using free AsyncPro components of TurboPowers.

我想知道是否有一种方法可以检索所有已安装调制解调器的列表及其连接的串行COM端口(希望具有其他有价值的功能)。

I wonder wether there is a way to retrieve the list of all installed modems along with their attached serial COM ports (hopefully with other valuable capabilities).

在此先感谢。

推荐答案

要列出已安装的调制解调器,可以使用 WMI类

To list the installed modems you can use the Win32_POTSModem WMI class

检查此示例代码。

{$APPTYPE CONSOLE}

uses
  SysUtils,
  ActiveX,
  ComObj,
  Variants;


procedure  GetWin32_POTSModemInfo;
const
  WbemUser            ='';
  WbemPassword        ='';
  WbemComputer        ='localhost';
  wbemFlagForwardOnly = $00000020;
var
  FSWbemLocator : OLEVariant;
  FWMIService   : OLEVariant;
  FWbemObjectSet: OLEVariant;
  FWbemObject   : OLEVariant;
  oEnum         : IEnumvariant;
  iValue        : LongWord;
begin;
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService   := FSWbemLocator.ConnectServer(WbemComputer, 'root\CIMV2', WbemUser, WbemPassword);
  FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_POTSModem','WQL',wbemFlagForwardOnly);
  oEnum         := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
  while oEnum.Next(1, FWbemObject, iValue) = 0 do
  begin
    Writeln(Format('AttachedTo      %s',[String(FWbemObject.AttachedTo)]));// String
    Writeln(Format('DeviceID        %s',[String(FWbemObject.DeviceID)]));// String
    Writeln(Format('Model           %s',[String(FWbemObject.Model)]));// String
    Writeln(Format('Name            %s',[String(FWbemObject.Name)]));// String
    Writeln(Format('PortSubClass    %s',[String(FWbemObject.PortSubClass)]));// String
    FWbemObject:=Unassigned;
  end;
end;


begin
 try
    CoInitialize(nil);
    try
      GetWin32_POTSModemInfo;
    finally
      CoUninitialize;
    end;
 except
    on E:EOleException do
        Writeln(Format('EOleException %s %x', [E.Message,E.ErrorCode]));
    on E:Exception do
        Writeln(E.Classname, ':', E.Message);
 end;
 Writeln('Press Enter to exit');
 Readln;
end.

这篇关于如何使用Windows API枚举所有已安装的USB调制解调器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-20 02:33