Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Использование WMI для получения информации о параллельных портах в Delphi

Delphi , Файловая система , Порты

WMI (Windows Management Instrumentation) — это технология, предоставляющая доступ к информации о компонентах системы, включая аппаратное обеспечение и программное обеспечение. В контексте Delphi, WMI может быть использован для получения данных о параллельных портах, что может быть полезно для разработки драйверов и других системного уровня приложений.

Шаг 1: Подключение к WMI

Для начала работы с WMI в Delphi, необходимо установить соединение с WMI-сервисом. Это можно сделать с помощью следующего кода:

uses ComObj, ActiveX;

function TForm1.GetObject(const objectName: String): IDispatch;
var
  bindCtx: IBindCtx;
  moniker: IMoniker;
  chEaten: Integer;
begin
  OleCheck(CreateBindCtx(0, bindCtx));
  OleCheck(MkParseDisplayName(bindCtx, StringToOleStr(objectName), chEaten, moniker));
  OleCheck(moniker.BindToObject(bindCtx, nil, IDispatch, Result));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  objWMIService: OLEVariant;
begin
  objWMIService := GetObject('winmgmts:\\YourPCname\root\CIMV2');
end;

Шаг 2: Запрос информации о параллельных портах

После установления соединения, можно выполнить запрос к классу Win32_ParallelPort, чтобы получить список доступных параллельных портов:

procedure TForm1.Button1Click(Sender: TObject);
var
  objWMIService: OLEVariant;
  colItems, colItem: OLEVariant;
  oEnum: IEnumVariant;
  iValue, test: LongWord;
begin
  objWMIService := GetObject('winmgmts:\\YourPCname\root\CIMV2');
  colItems := objWMIService.ExecQuery('SELECT * FROM Win32_ParallelPort', nil, WBEM_FLAG_RETURN_IMMEDIATELY or WBEM_FLAG_FORWARD_ONLY);
  oEnum := IUnknown(colItems._NewEnum) as IEnumVariant;
  while oEnum.Next(1, colItem, iValue) = 0 do
  begin
    // Здесь можно получить все свойства, например, colItem.Caption
    // Дополнительная информация о классах Win32_ParallelPort: http://msdn.microsoft.com/en-us/library/aa394247%28VS.85%29.aspx
  end;
end;

Шаг 3: Получение адресов I/O

Для получения адресов I/O параллельных портов, необходимо выполнить дополнительный запрос к классу Win32_PNPAllocatedResource, чтобы найти соответствующие ресурсы:

procedure TForm1.Button2Click(Sender: TObject);
var
  objWMIService: OLEVariant;
  colItems, colItem: OLEVariant;
  oEnum: IEnumVariant;
  iValue: LongWord;
begin
  objWMIService := GetObject('winmgmts:\\YourPCname\root\CIMV2');
  colItems := objWMIService.ExecQuery('SELECT * FROM Win32_PnPAllocatedResource', nil, WBEM_FLAG_RETURN_IMMEDIATELY or WBEM_FLAG_FORWARD_ONLY);
  oEnum := IUnknown(colItems._NewEnum) as IEnumVariant;
  while oEnum.Next(1, colItem, iValue) = 0 do
  begin
    // Фильтруем записи, связанные с параллельными портами
    if colItem['Dependent'].ToString.Contains('Win32_PnPEntity.DeviceID') then
    begin
      // Получаем соответствующий ресурс Win32_PortResource
      // ...
    end;
  end;
end;

Шаг 4: Получение информации о ресурсах портов

После того как найдены соответствующие зависимости, можно запросить информацию о ресурсах портов из класса Win32_PortResource:

// ...
while oEnum.Next(1, colItem, iValue) = 0 do
begin
  if // условие, что запись относится к параллельному порту then
  begin
    // Запрос к Win32_PortResource для получения адресов
    var portResourceQuery := 'SELECT * FROM Win32_PortResource WHERE Antecedent = ''';
    portResourceQuery := portResourceQuery + colItem['Antecedent'].ToString + '''';
    var portResources := objWMIService.ExecQuery(portResourceQuery, nil, WBEM_FLAG_RETURN_IMMEDIATELY or WBEM_FLAG_FORWARD_ONLY);
    // Обработка результатов запроса для получения адресов I/O
    // ...
  end;
end;

Заключение

Приведенный выше код является лишь примером того, как можно использовать WMI для получения информации о параллельных портах и их адресах I/O в Delphi. Важно помнить, что работа с WMI может быть довольно сложной, и для успешного выполнения запросов необходимо точно понимать структуру классов и свойств, которые вы собираетесь использовать.

Создано по материалам из источника по ссылке.

WMI используется в Delphi для получения информации о параллельных портах через серию запросов к соответствующим классам и ресурсам.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Порты ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 16:57:35/0.003619909286499/0