加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Delphi7:获取附加的监视器属性

发布时间:2020-12-15 09:16:16 所属栏目:大数据 来源:网络整理
导读:如何获取显示器的属性?我最感兴趣的是制造商名称和型号.我也不想从注册表中获取它. (有些PC就像我的工作PC一样限制了对属性密钥的访问,所以我宁愿想要扫描系统总线或其他东西.) 有任何想法吗? 谢谢SoulBlade 解决方法 尝试使用 Win32_DesktopMonitor WMI类
如何获取显示器的属性?我最感兴趣的是制造商名称和型号.我也不想从注册表中获取它. (有些PC就像我的工作PC一样限制了对属性密钥的访问,所以我宁愿想要扫描系统总线或其他东西.)

有任何想法吗?
谢谢SoulBlade

解决方法

尝试使用 Win32_DesktopMonitor WMI类.这堂课有你所看到的所有信息.

检查此示例代码.

program GetWMI_MonitorInfo;

{$APPTYPE CONSOLE}

uses
  SysUtils,ActiveX,ComObj,Variants;

function VarStrNull(VarStr:OleVariant):string;//dummy function to handle null variants
begin
  Result:='';
  if not VarIsNull(VarStr) then
  Result:=VarToStr(VarStr);
end;


procedure  GetMonitorInfo;
var
  objWMIService : OLEVariant;
  colItems      : OLEVariant;
  colItem       : OLEVariant;
  oEnum         : IEnumvariant;
  iValue        : LongWord;

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

begin
  objWMIService := GetWMIObject('winmgmts:localhostrootCIMV2');
  colItems      := objWMIService.ExecQuery('SELECT * FROM Win32_DesktopMonitor','WQL',0);
  oEnum         := IUnknown(colItems._NewEnum) as IEnumVariant;
  if oEnum.Next(1,colItem,iValue) = 0 then
  begin
    Writeln('Caption      '+VarStrNull(colItem.Caption));
    Writeln('Description  '+VarStrNull(colItem.Description));
    Writeln('Device ID    '+VarStrNull(colItem.DeviceID));
    Writeln('Manufacturer '+VarStrNull(colItem.MonitorManufacturer));//Manufacter
    Writeln('Type         '+VarStrNull(colItem.MonitorType));//Model
  end;

end;


begin
 try
    CoInitialize(nil);
    try
      GetMonitorInfo;
      Readln;
    finally
    CoUninitialize;
    end;
 except
    on E:Exception do
    Begin
        Writeln(E.Classname,': ',E.Message);
        Readln;
    End;
  end;
end.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读