cpuid alma fonksiyonu bulamıyorum.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
Shou
Üye
Mesajlar: 260
Kayıt: 26 Ağu 2011 02:00

cpuid alma fonksiyonu bulamıyorum.

Mesaj gönderen Shou »

Merhaba arkadaşlar projem için işlemci no veya hdd nosu kullanıyordum ama bunu değiştirebiliyorlar ben cpuid için bir çok araştırma yaptım ama bir türlü onun fonksiyonunu bulamadım örnek görüntü bir companent var ama herhangi bir düzenleme olmuyor yani pas dosyası yok ben fonksiyon ile almak istiyorum ve düzenlemek istiyorum kendi projemde.

Resim

Bana bu konuda yardımcı olursanız sevinirim.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: cpuid alma fonksiyonu bulamıyorum.

Mesaj gönderen mrmarman »

Arşivimden bir tane buldum. Şunu deneyip sonucu bildir lütfen. Bende çalışıyor "Windows Enterprise x64"
Aralara çizgi koymak istersen kolaydır biliyorsundur... Bunlarla uğraştığına göre... :wink:
Ayrıca aşağıdaki düzenlemeyi, http://www.lohninger.com/cpuid.html linkindeki örnek aldığın projenin formatına göre düzenleyerek aynı CPUID'yi almak üzere düzenledim.

Kod: Tümünü seç

Serial number of CPU

Kod: Tümünü seç

Function GET_CPUID : String;
  function IsCPUID_Available : Boolean; register;
  const
   ID_BIT = $200000;
  asm
    PUSHFD
    POP     EAX
    MOV     EDX,EAX
    XOR     EAX,ID_BIT
    PUSH    EAX
    POPFD
    PUSHFD
    POP     EAX
    XOR     EAX,EDX
    JZ      @exit
    MOV     AL,True
  @exit:
  end;

  type
   TCPUID = array[1..4] of Longint;

  function GetCPUID : TCPUID; assembler; register;
  asm
    PUSH    EBX
    PUSH    EDI
    MOV     EDI,EAX
    MOV     EAX,1
    DW      $A20F
    STOSD
    MOV     EAX,EBX
    STOSD
    MOV     EAX,ECX
    STOSD
    MOV     EAX,EDX
    STOSD
    POP     EDI
    POP     EBX
  end;
var
  CPUId : TCPUID;
  i     : Integer;
begin
  FillChar( CPUId, SizeOf(CPUId), 0);
  if IsCPUID_Available then
  begin
    CPUId  := GetCPUID;
    Result := IntToHex( CPUId[1], 8 ) + IntToHex( CPUId[4], 8 ) + IntToHex( CPUId[3], 8 ) ;
  end
  else Result:='ASDZXC';
end;
Kullanımı da

Kod: Tümünü seç

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  Edit1.Text := GET_CPUID;
end;
Resim
Resim ....Resim
Kullanıcı avatarı
Shou
Üye
Mesajlar: 260
Kayıt: 26 Ağu 2011 02:00

Re: cpuid alma fonksiyonu bulamıyorum.

Mesaj gönderen Shou »

Abi teşekkür ederim cevabın ve ilgin için senin fonksiyonda veren değer şu,

Kod: Tümünü seç

BFEBFBFF0001067A
Ama diğer programdakı,

Kod: Tümünü seç

134A-2A9F-18A2-7176
senin veren değer değişiyor yani işlemci nodaki değeri veriyor bunu değiştiriyorlar ama cpuid istiyorum ben bunu değiştiremiyorlar.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: cpuid alma fonksiyonu bulamıyorum.

Mesaj gönderen mrmarman »

Fonksiyonu senin için yeniden güncelledim. Tekrar dener misin.

Ayrıca adı üzerinde "Calculated CPU Id" program tarafından kombinasyon kurulan değil mi ?

Sana aslen seri numarası lazım değil miydi ? Ben mi yanlış anladım. Yukarıdaki fonksiyon sana aynı seri numarasını bulup getiriyor.
Resim
Resim ....Resim
Kullanıcı avatarı
Shou
Üye
Mesajlar: 260
Kayıt: 26 Ağu 2011 02:00

Re: cpuid alma fonksiyonu bulamıyorum.

Mesaj gönderen Shou »

Pardon abi özür dilerim ilk verdiğin kodu denemişim çok teşekkür ederim son güncellediğin aslı oldu şimdi asıl cpu id bumu oluyor yani seri numarası bu bilgisayarda değiştirilebiliyor mu mac adresi gibi bu konuda bilgilendirirsen sevinirim birde her bilgisayarınki farklı oluyor mu aynı olma ihtimalı var mıdır?
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: cpuid alma fonksiyonu bulamıyorum.

Mesaj gönderen mrmarman »

Bu CPU'nun seri numarası. Bu değiştirilmez, ancak şu konuda garanti veremem; bu mesajı gören ve bilenler varsa açıklarsa ben de öğrenmiş olurum.

- Windows işletim sisteminin geçmiş, şimdiki ve gelecek versiyonlarında bu bilgiyi okumayı engelleyici bir yaklaşımı var mıdır ?! O konuda emin değilim.
Resim
Resim ....Resim
Kullanıcı avatarı
Shou
Üye
Mesajlar: 260
Kayıt: 26 Ağu 2011 02:00

Re: cpuid alma fonksiyonu bulamıyorum.

Mesaj gönderen Shou »

Teşekkür ederim abi cevabın ve ilgin için bu mesajı gören bilen biri varsa cevap yazarsa makbule geçer inş.
Kullanıcı avatarı
Shou
Üye
Mesajlar: 260
Kayıt: 26 Ağu 2011 02:00

Re: cpuid alma fonksiyonu bulamıyorum.

Mesaj gönderen Shou »

@mrmarman

hocam kusura bakmayın rahatsız edıoyorum ama bu kodlar %60 oranda her pcde aynı idyi veriyor bir anormallik yok mu bende çözemedim ama benim istediğim şey her pcde 1 kod almak ve o pc lisans vermek yani cpuid dışında başka nasıl yaparım işimi görsün yeterki ama karşıdakı adam bunu değiştirmesin mesela mac-id adamlar değiştirebiliyor onu kullanmak istemıyorum yardımcı olursanız sevinirim.
Kullanıcı avatarı
loaded
Üye
Mesajlar: 122
Kayıt: 12 Eki 2010 09:45
Konum: Konya
İletişim:

Re: cpuid alma fonksiyonu bulamıyorum.

Mesaj gönderen loaded »

Selam
Zamanında yaptığım denemelerden edindiğim tecrübe;
Cpu-id bilgisi eski nesil işlemcilerin aynı üretim bandından çıkmış aynı modellerde, aynı değeri taşıyor oldukları yönünde.
Her bilgisayar için tüm windows sürümlerinde lisanslamada kullanabileceğin farklı bildiğim kadarıyla değiştirilemeyen 2 değer var
1-Bios
2-Harddisk Fiziksel Seri Numaraları

Bunlardan Bios numarası ise bazı windows sürümlerinde boş gelebilmekte bu yüzden pek kullanmanı tavsiye etmem.
Harddisk Fiziksel Seri Numaraları ise stabil olup gönül rahatlığıyla kullanabilirsin.Win7,Win8 sistemlerinde bu değere ulaşabilmek için programını yönetici olarak çalıştırman gerekli olabilir.

http://stackoverflow.com/questions/1321 ... ith-delphi Linkinden alıntılanıp kullanıma göre düzenlenmiş aşağıdaki kodlar işini görecektir.

Ayrıca, Virtual Box kullanarak farklı platformlarda farklı işlemci özelliklerinde format yada disk değişikliklerinde kodun nasıl tepki verdiğini inceleyebilirsin.

Kod: Tümünü seç

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs,ActiveX,ComObj, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  FSWbemLocator : OLEVariant;
  FWMIService   : OLEVariant;

implementation

{$R *.dfm}


 function  GetWMIstring(const WMIClass, WMIProperty:string): string;
    const
      wbemFlagForwardOnly = $00000020;
    var
      FWbemObjectSet: OLEVariant;
      FWbemObject   : OLEVariant;
      oEnum         : IEnumvariant;
      iValue        : LongWord;
    begin;
      Result:='';
      FWbemObjectSet:= FWMIService.ExecQuery(Format('Select %s from %s',[WMIProperty, WMIClass]),'WQL',wbemFlagForwardOnly);
      oEnum         := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
      if oEnum.Next(1, FWbemObject, iValue) = 0 then

  if not VarIsNull(FWbemObject.Properties_.Item(WMIProperty).Value) then

     Result:=FWbemObject.Properties_.Item(WMIProperty).Value;

    FWbemObject:=Unassigned;
    end;


procedure TForm1.Button1Click(Sender: TObject);
 var
      x:string;
      Y:string;
    begin
      FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
      FWMIService   := FSWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', '');
      X:=GetWMIstring('Win32_BIOS','SerialNumber');
      Y:=GetWMIstring('Win32_PhysicalMedia','SerialNumber');
      ShowMessage('Bios Seri No:'+trim(x)+#13+'Harddisk Seri No:'+trim(y));
    end;
end.
Kalk ve işe yarar bir şey yap! Çünkü Allah (c.c.) yeniden başlayanların yardımcısıdır.
Kullanıcı avatarı
Shou
Üye
Mesajlar: 260
Kayıt: 26 Ağu 2011 02:00

Re: cpuid alma fonksiyonu bulamıyorum.

Mesaj gönderen Shou »

Hocam teşekkür ederim cevabın için ama windows xp kullanıyorum bende veren değer şu,

Kod: Tümünü seç

Bios Seri No: (BOŞ)

Kod: Tümünü seç

Harddisk Seri No:S2R4J9FB807285
Bios seri no boş verdi neden acaba?
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: cpuid alma fonksiyonu bulamıyorum.

Mesaj gönderen SimaWB »

BIOS bilgilerini okumak için kullanılan Win32_BIOS sınıfına bakarsanız:
Minimum supported client = Windows Vista yazdığını görürsünüz.
There's no place like 127.0.0.1
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: cpuid alma fonksiyonu bulamıyorum.

Mesaj gönderen xxxjedixxx »

"Minimum supported client Windows Vista" yazması sizi yanıltmasın, baktığım sınıfların hepsinde böyle yazıyor. Win32_Bios sınıfı Windows XP'de de çalışıyor.

WMI sistemindeki donanım ile ilgili bilgileri üretici yazılımları sağlıyor olmalı. Mesela HP'nin sunucu ve PC sistemlerinde bu bilgilerin hepsini bulabilirsin. Ama her sistemde maalesef bu bilgiler dolu olmuyor.

Örnek olarak WMI'dan aldığım sistemime ait bilgiler;
Kullandığım sınıflar: Win32_Bios, Win32_BaseBoard, Win32_Processor, Win32_ComputerSystemProduct

Manufacturer: Hewlett-Packard
Model: HP EliteBook 8540w
UUID: 531694EE-F40D-11DE-81D0-B9F76E39E4A1
Bios: Hewlett-Packard
SMBios: 68CVD Ver. F.50 (2.6)
Bios Version: HPQOEM - f
Bios Serial Number: CND0511KC1
Board Serial Number: CND0511KC1
CPU: GenuineIntel Intel(R) Core(TM) i7 CPU M 620 @ 2.67GHz
Cpu Speed: 2667 MHz
CPU Id: BFEBFBFF00020655
Kullanıcı avatarı
Shou
Üye
Mesajlar: 260
Kayıt: 26 Ağu 2011 02:00

Re: cpuid alma fonksiyonu bulamıyorum.

Mesaj gönderen Shou »

Kod: Tümünü seç

Harddisk Seri No:S2R4J9FB807285
hocam hdd seri no her pcde çalışıyormu mesela xp de çalışıyor vista win7 win8 felan bunun çalışmama ihtimalı var mı bios seri no gibi?
Kullanıcı avatarı
ALUCARD
Üye
Mesajlar: 1269
Kayıt: 27 Eyl 2003 10:12
Konum: Samsun
İletişim:

Re: cpuid alma fonksiyonu bulamıyorum.

Mesaj gönderen ALUCARD »

(hdd'si olan) her pc de çalışır. ancak 7 ve 8 de Yönetici olarak çalıştırman gerekebilir.
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz

Erkan ÇAĞLAR
Kullanıcı avatarı
Shou
Üye
Mesajlar: 260
Kayıt: 26 Ağu 2011 02:00

Re: cpuid alma fonksiyonu bulamıyorum.

Mesaj gönderen Shou »

Peki hocam bunun gibi başka ne kullanabiliriz ben her pcde 1 kod almak istiyorum mesela mac adresi alıyorum ama bunu değiştiriyorlar?
Cevapla