Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Старожил


Сообщения: 435
Благодарности: 63

Профиль | Отправить PM | Цитировать


Я так понимаю, что вы хотите отследить кто, что подключал к компьютеру.

Я бы делал так:
1. Обработал событие message WM_DEVICECHANGE и таким образом узнал, что подключено.
Примеры обработки есть на диске к книге Агурова (DeviceMonitor.Delphi).

2. Если это логический диск, то через WMI из класса Win32_DiskDrive получил интересующие вас Caption и PNPDeviceID.

Код: Выделить весь код
procedure TForm1.GetAllMediaData;
var
  SWbemLocator: TSWbemLocator;
  Service: ISWbemServices;
  DiskDrives, SWbemObjectSet: ISWbemObjectSet;
  SWbemObject: ISWbemObject;
  PropSet: ISWbemPropertySet;
  DriveEnum: IEnumVariant;
  Value: Cardinal;
  TempObj: OleVariant;
begin
  Memo1.Lines.Add('======================');

  SWbemLocator := TSWbemLocator.Create(Nil);
  try
    Service := SWbemLocator.ConnectServer('.', 'root\CIMV2', '', '', '', '', 0,
      Nil);
    DiskDrives := Service.ExecQuery(
      'SELECT * FROM Win32_DiskDrive', 'WQL', 0, Nil);

    DriveEnum := (DiskDrives._NewEnum) as IEnumVariant;
    while DriveEnum.Next(1, TempObj, Value) = S_OK do
    begin
      SWbemObject := IUnknown(TempObj) as ISWbemObject;
      PropSet := SWbemObject.Properties_;

      if PropSet.Count > 0 then
        try
          Memo1.Lines.Add('======================');
          Memo1.Lines.Add('DeviceID = ' + PropSet.Item('DeviceID', 0).Get_Value);
          Memo1.Lines.Add('SerialNumber = ' + PropSet.Item('SerialNumber', 0).Get_Value);
          Memo1.Lines.Add('Caption = ' + PropSet.Item('Caption', 0).Get_Value);
          Memo1.Lines.Add('Size = ' + IntToStr(PropSet.Item('Size', 0).Get_Value));
          Memo1.Lines.Add('InterfaceType = ' + PropSet.Item('InterfaceType', 0).Get_Value);
          Memo1.Lines.Add('Manufacturer = ' + PropSet.Item('Manufacturer', 0).Get_Value);
          Memo1.Lines.Add('Model = ' + PropSet.Item('Model', 0).Get_Value);
          Memo1.Lines.Add('Name = ' + PropSet.Item('Name', 0).Get_Value);
          Memo1.Lines.Add('PNPDeviceID = ' + PropSet.Item('PNPDeviceID', 0).Get_Value);
          Memo1.Lines.Add(' ');
        except

        end;

    end;
  finally
    SWbemLocator.Free;
    Memo1.Lines.Add('======================');
  end;
end;

-------
black-eric.livejournal.com

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:34, 26-03-2011 | #6