Merhaba,
Delphide işlemci seri numarasını öğrenebileceğim bir kod bulamadum. Netten bulduğum birkaç fonksiyonu denedim ama bunlarda birçok bilgisayarda aynı numarayı veriyor. Core 2 Duo ve i5 işlemciye aynı numarayı verdi. AMD ye farklı numara verebildi.
Kod aşağıda
O bayağa birşeylerin içinde doğru düzgün birşey yok. Anlaşılmıyor veya işe yapamıyor yada gereksiz sayfalarca kod içerdiğinden temizleyip sadece işime yarayanı alamıyorum.
CPU ile ilgili bilgilere WMI kullanarak ve Win32_Processor sınıfını araştırarak ulaşabilirsiniz.
Emin değilim ama aradığınız değer bu sınıfın ProcessorId özelliği olabilir.
Yok abim vazgeçtim ben. Başka yöntem kullanacam. Şimdi Visual basicde bunu yapan kodlarım var bir api kullanıyor. Aynı şeyi delphide nasıl yaparım? Yani oradaki herhangi bir API yı nasıl delphide kullanırım?
function cpuid: dword;
const
ID_BIT = $200000; // EFLAGS ID bit
type
TCPUID = array[1..4] of Longint;
var
CPUID: TCPUID;
I: integer;
function IsCPUID_Available: Boolean; register;
asm
PUSHFD {direct access to flags no possible, only via stack}
POP EAX {flags to EAX}
MOV EDX,EAX {save current flags}
XOR EAX,ID_BIT {not ID bit}
PUSH EAX {onto stack}
POPFD {from stack to flags, with not ID bit}
PUSHFD {back to stack}
POP EAX {get back to EAX}
XOR EAX,EDX {check if ID bit affected}
JZ @exit {no, CPUID not availavle}
MOV AL,True {Result=True}
@exit:
end;
function GetCPUID: TCPUID; assembler; register;
asm
PUSH EBX {Save affected register}
PUSH EDI
MOV EDI,EAX {@Resukt}
MOV EAX,1
DW $A20F {CPUID Command}
STOSD {CPUID[1]}
MOV EAX,EBX
STOSD {CPUID[2]}
MOV EAX,ECX
STOSD {CPUID[3]}
MOV EAX,EDX
STOSD {CPUID[4]}
POP EDI {Restore registers}
POP EBX
end;
begin
for I := Low(CPUID) to High(CPUID) do CPUID[I] := -1;
if IsCPUID_Available then CPUID := GetCPUID;
Result := 10000 * CPUID[1] + CPUID[4];
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
//
Memo1.Lines.Add(floattostr(cpuid));
end;
In dubio pro reo... Şüpheden sanık/özgürlük yararlanır...
Arkadaşlar bu kodu kullanan/test eden oldu mu hiç her bilgisayara özel bir koda ihtiyacım var işlemci seri numarası gibi,bu kod şuana kadar düzgün çalışıyor ancak formatta veya parça değişimlerinde değişiyor mu test edemedim
Bu tarz assembler kodlarını kullanmamaya gayret ediyorum. Çoğu 32bit işletim sistemi destekli olup 64bit uygulamalarda sorun çıkarıyor.
Aşağıdaki kütüphaneden memnunum. Anakart ile ilgili birçok bilgiye ulaşabilirsiniz. Ancak tek başına herşeyi çözmez. Farklı donanımlar için (sabit disk, ethernet vb) bunun yanında ek koda ihtiyaç olur. https://github.com/RRUZ/tsmbios/