Delphi Programlama Dili – İşlemci ve Sistem Temelli Bazı Fonksiyonlar

Bu bölümde bilgisayara ait işlemci, bios, bellek, network bilgileri nasıl alınır onları göstereceğiz. Aşağıdaki Delphi fonksiyonları kopyala-yapıştır yaparak kendi kodlarınız içinde kullanabilirsiniz.

Çalışan bilgisayarın işlemci adını getiren fonksiyon

Kullanılan unit’ler : Windows, Registry
function IslemciAdi: string;
var
  Reg: Registry.TRegistry;
begin
  Result := '';
  Reg := Registry.TRegistry.Create(Windows.KEY_READ);
  try
    Reg.RootKey := Windows.HKEY_LOCAL_MACHINE;
    if not Reg.OpenKey('HARDWARE\DESCRIPTION\System\CentralProcessor\0\', False) then Exit;
    Result := Reg.ReadString('ProcessorNameString');
    Reg.CloseKey;
  finally
    Reg.Free;
  end;
end;

Daha detay bilgilere ihtiyacınız varsa buradaki makalemize göz atınız.

 Çalışan bilgisayarın işlemci tanımını (identifier) getiren fonksiyon

Kullanılan unit’ler : Windows, Registry
function IslemciTanimi: string;
var
  Reg: Registry.TRegistry;
begin
  Result := '';
  Reg := Registry.TRegistry.Create(Windows.KEY_READ);
  try
    Reg.RootKey := Windows.HKEY_LOCAL_MACHINE;
    if not Reg.OpenKey(
      'HARDWARE\DESCRIPTION\System\CentralProcessor\0\', False
    ) then
      Exit;
    Result := Reg.ReadString('Identifier');
    Reg.CloseKey;
  finally
    Reg.Free;
  end;
end;

 Çalışan bilgisayarın MAC adresini getiren fonksiyon

Kullanılan unit’ler : SysUtils, Windows, Nb30
function MacAdres: string;
type
  TAStat = packed record
    Adapt: Nb30.TAdapterStatus;
    NameBuff: array[0..29] of Nb30.TNameBuffer;
  end;
var
  Adapter: TAStat;              // Network adaptörle ilgili bilgi
  AdapterList: Nb30.TLanaEnum;  // Kaç tane network adaptörü var
  Ncb: Nb30.TNCB;               // network control block
  I: Integer;                   // Network adaptörlerini sırasıyla taramak için döngü değişkeni
  // ---------------------------------------------------------------------------
  function NetBiosSucceeded(const RetCode: AnsiChar): Boolean;
  begin
    Result := Windows.UCHAR(RetCode) = Nb30.NRC_GOODRET;
  end;
  // ---------------------------------------------------------------------------
begin
  Result := '';
  // Network adaptör listesini alalım
  FillChar(Ncb, SizeOf(Ncb), 0);
  Ncb.ncb_command := AnsiChar(Nb30.NCBENUM);
  Ncb.ncb_buffer := PAnsiChar(@AdapterList);
  Ncb.ncb_length := SizeOf(AdapterList);
  if not NetBiosSucceeded(Nb30.Netbios(@Ncb)) then
    Exit;
  // Adaptörlerin durumuna bakalım
  for I := 0 to Pred(Integer(AdapterList.length)) do
  begin
    // Adaptörü resetleyelim
    FillChar(Ncb, SizeOf(Ncb), 0);
    Ncb.ncb_command := AnsiChar(Nb30.NCBRESET);
    Ncb.ncb_lana_num := AdapterList.lana[I];
    if not NetBiosSucceeded(Nb30.Netbios(@Ncb)) then
      Exit;
    // Durumunu alalım
    FillChar(Ncb, SizeOf(Ncb), 0);
    Ncb.ncb_command := AnsiChar(Nb30.NCBASTAT);
    Ncb.ncb_lana_num := AdapterList.lana[I];
    Ncb.ncb_callname := '*               ';
    Ncb.ncb_buffer := PAnsiChar(@Adapter);
    Ncb.ncb_length := SizeOf(Adapter);
    if NetBiosSucceeded(Nb30.Netbios(@Ncb)) then
    begin
      with Adapter.Adapt do
        Result := SysUtils.Format(
          '%.2x-%.2x-%.2x-%.2x-%.2x-%.2x',
          [
            Ord(adapter_address[0]),
            Ord(adapter_address[1]),
            Ord(adapter_address[2]),
            Ord(adapter_address[3]),
            Ord(adapter_address[4]),
            Ord(adapter_address[5])
          ]
        );
      Exit;
    end;
  end;
end;

 Çalışan bilgisayarın IP adresini getiren fonksiyon

Kullanılan unit’ler : SysUtils, Windows, WinSock
function IPAdresim: string;
var
  WSData: WinSock.TWSAData;             
  HostName: array [0..14] of AnsiChar;  // bilgisayarın standard adı (hostname)
  HostEnt: WinSock.PHostEnt;            // Host adı ile ilgili bilgi
  Addr: PAnsiChar;                     
begin
  Result := '0.0.0.0';
  if WinSock.WSAStartup(Windows.MakeWord(1, 1), WSData) <> 0 then
    Exit;
  try
    WinSock.GetHostName(HostName, SizeOf(HostName));
    HostEnt := WinSock.GetHostByName(HostName);
    if Assigned(HostEnt) and Assigned(HostEnt^.h_addr_list) then
    begin
      Addr := HostEnt^.h_addr_list^;
      if Assigned(Addr) and (HostEnt^.h_length >= 4) then
      begin
        Result := SysUtils.Format(
          '%d.%d.%d.%d',
          [Ord(Addr[0]), Ord(Addr[1]), Ord(Addr[2]), Ord(Addr[3])]
        );
      end;
    end;
  finally
    WSACleanup;
  end;
end;

 Çalışan bilgisayarın Bios üreticisi kim?

Kullanılan unit’ler : Windows, Registry
function BiosUreticisi: string;
var
  Reg: Registry.TRegistry;
begin
  Result := '';
  Reg := Registry.TRegistry.Create(Windows.KEY_READ);
  try
    Reg.RootKey := Windows.HKEY_LOCAL_MACHINE;
    if not Reg.OpenKey('HARDWARE\DESCRIPTION\System\Bios\', False) then
      Exit;
    Result := Reg.ReadString('BIOSVendor');
    Reg.CloseKey;
  finally
    Reg.Free;
  end;
end;

 Çalışan bilgisayarın toplam fiziksel bellek boyutu

Kullanılan unit’ler : Windows
function ToplamFizikselBellekBoyutu: Int64;
var
  MemoryEx: Windows.TMemoryStatusEx;
begin
  begin
    MemoryEx.dwLength := SizeOf(TMemoryStatusEx);
    Windows.GlobalMemoryStatusEx(MemoryEx);
    Result := MemoryEx.ullTotalPhys;
  end;
end;

 Çalışan bilgisayarın boşta kalan fiziksel bellek boyutu

Kullanılan unit’ler : Windows
function BostaFizikselBellekBoyutu: Int64;
var
  MemoryEx: Windows.TMemoryStatusEx;
begin
  begin
    MemoryEx.dwLength := SizeOf(Windows.TMemoryStatusEx);
    Windows.GlobalMemoryStatusEx(MemoryEx);
    Result := MemoryEx.ullAvailPhys;
  end;
end;

 Çalışan bilgisayarın kullanılan fiziksel bellek yüzdesi

Kullanılan unit’ler : Windows
function BostaFizikselBellekBoyutuYuzde: Byte;
var
  MemoryEx: Windows.TMemoryStatusEx;
begin
  begin
    MemoryEx.dwLength := SizeOf(Windows.TMemoryStatusEx);
    Windows.GlobalMemoryStatusEx(MemoryEx);
    Result := Byte(MemoryEx.dwMemoryLoad);
  end;
end;