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