"MiTeC Systm Information Component"i çalıştıramad
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- huseyinkucuk
- Üye
- Mesajlar: 142
- Kayıt: 29 Nis 2005 10:03
- Konum: İstanbul
- İletişim:
"MiTeC Systm Information Component"i çalıştıramad
Arkadaşlar... MiTeC System Information Component Suite i indirdim bir yerden bedava olduğunu duyduğum için... İlk problem olarak programı çalıştırdığım zaman (yani delphide yazacağı programı) direk olarak MİTEC in reklamı çıkıyor bi tane, tamam diyerek geçiyorum... Delhi forum, offline vb.nden okuduğum kadarıyla böyle bir reklamın çıkmaması gerektiği kanısına varmıştım bedava bir komponent olduğu için, yanlış mı indirdim acaba?
İkinci problemim de şu: CPU numarasını alamadım... mesela ShowMessage(Mitec_CPU1.serial) yazdığım zaman hiçbirşey yazmıyor. Bunu nasıl yapabilirim... Yardımlarınızdan dolayı şimdiden teşekkür ederim...
İkinci problemim de şu: CPU numarasını alamadım... mesela ShowMessage(Mitec_CPU1.serial) yazdığım zaman hiçbirşey yazmıyor. Bunu nasıl yapabilirim... Yardımlarınızdan dolayı şimdiden teşekkür ederim...
29.04.2005 tarihi itibariyle Delphi öğrenmeye başlayan yeni bir kullanıcı sayılabilirim.
Re: "MiTeC Systm Information Component"i çalıştır
ben de bi ara denemiştim onu aynı şekilde bende deboş değer döndürmüştü.huseyinkucuk yazdı:Arkadaşlar... MiTeC System Information Component Suite i indirdim bir yerden bedava olduğunu duyduğum için... İlk problem olarak programı çalıştırdığım zaman (yani delphide yazacağı programı) direk olarak MİTEC in reklamı çıkıyor bi tane, tamam diyerek geçiyorum... Delhi forum, offline vb.nden okuduğum kadarıyla böyle bir reklamın çıkmaması gerektiği kanısına varmıştım bedava bir komponent olduğu için, yanlış mı indirdim acaba?
İkinci problemim de şu: CPU numarasını alamadım... mesela ShowMessage(Mitec_CPU1.serial) yazdığım zaman hiçbirşey yazmıyor. Bunu nasıl yapabilirim... Yardımlarınızdan dolayı şimdiden teşekkür ederim...
Bunu doğru düzgün çalıştıran var ise bi zahmet söylesin

O Component çalışmayınca ben de aşağıdaki kodu kullandım.
Kod: Tümünü seç
{ CPU ve HDD Serial }
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;
function GetCPUVendor : TVendor; assembler; register;
asm
PUSH EBX {Save affected register}
PUSH EDI
MOV EDI,EAX {@Result (TVendor)}
MOV EAX,0
DW $A20F {CPUID Command}
MOV EAX,EBX
XCHG EBX,ECX {save ECX result}
MOV ECX,4
@1:
STOSB
SHR EAX,8
LOOP @1
MOV EAX,EDX
MOV ECX,4
@2:
STOSB
SHR EAX,8
LOOP @2
MOV EAX,EBX
MOV ECX,4
@3:
STOSB
SHR EAX,8
LOOP @3
POP EDI {Restore registers}
POP EBX
end;
// CPU İŞLEMLERİ SON
// ALL CPU
FUNCTION GET_CPUID : STRING;
var
CPUID : TCPUID;
I : Integer;
// S : TVendor;
SONUC: STRING;
begin
for I := Low(CPUID) to High(CPUID) do CPUID[I] := -1;
if IsCPUID_Available then begin
CPUID := GetCPUID;
SONUC:= IntToHex(CPUID[1],8)+
IntToHex(CPUID[2],8)+
IntToHex(CPUID[3],8)+
IntToHex(CPUID[4],8);
END else SONUC:='ASDZXC';
RESULT:=SONUC;
end;
// END OF ALL CPU
function gethddserial : string;
var
SerialNum : pdword;
a, b : dword;
Buffer: array [0..255] of char;
begin
result:='';
GetVolumeInformation('c:\', Buffer, SizeOf(Buffer), SerialNum, a, b, nil, 0);
result:= IntToStr(SerialNum^);
end;
@Lost Soul'un eksik gönderdiği tanımları da ben yazayım...
Kod: Tümünü seç
const
ID_BIT = $200000; // EFLAGS ID bit
type
TCPUID = array[1..4] of Longint;
TVendor = array [0..11] of char;
- huseyinkucuk
- Üye
- Mesajlar: 142
- Kayıt: 29 Nis 2005 10:03
- Konum: İstanbul
- İletişim:
Arkadaşlar... Allah sizden razı olsun... Allah ne muradınız varsa versin... Siz olmasaydınız benim halim nice olurdu...
Bu arada Mustafa hocam; mitec komponenti koyduğum zaman çıkan ilk pencere sanki formcreate olayının içine konulmuş showmessage gibi... Yani "tamam" demeden form açılmıyor... Bu yüzden sanıyorum o formu ne kadar küçültürsem küçülteyim bi kere tamam demem (en azından enter'a basmam) gerekiyor...
@Lost Soul hocamın yukarıdaki verdiği kod ile benim makinenin CPU Numarası 00000F41000208000000441DBFEBFBFF, HDD numarası da 2346224467 çıktı... Hani önceki konularda geçen kodlarda bazı makinelerinki aynı çıkıyormuş da, test etmek isteyen arkadaşlar olursa -ki onların test'iyle ben de test etmiş sayılacağım- diye çıkan seri numaralarını buraya yazdım...
Arkadaşlar, tekrar teşekkür ederim... Çok sağolun... Hepinize kolay gelsin...
Bu arada Mustafa hocam; mitec komponenti koyduğum zaman çıkan ilk pencere sanki formcreate olayının içine konulmuş showmessage gibi... Yani "tamam" demeden form açılmıyor... Bu yüzden sanıyorum o formu ne kadar küçültürsem küçülteyim bi kere tamam demem (en azından enter'a basmam) gerekiyor...
@Lost Soul hocamın yukarıdaki verdiği kod ile benim makinenin CPU Numarası 00000F41000208000000441DBFEBFBFF, HDD numarası da 2346224467 çıktı... Hani önceki konularda geçen kodlarda bazı makinelerinki aynı çıkıyormuş da, test etmek isteyen arkadaşlar olursa -ki onların test'iyle ben de test etmiş sayılacağım- diye çıkan seri numaralarını buraya yazdım...
Arkadaşlar, tekrar teşekkür ederim... Çok sağolun... Hepinize kolay gelsin...
29.04.2005 tarihi itibariyle Delphi öğrenmeye başlayan yeni bir kullanıcı sayılabilirim.
HDD numarası fabrika seri numarası değil, küçük bir ihtimal de olsa belki de aynısı tesadüf edebilecek şekilde formatlanınca değişen Volume Seri Nosu olduğunu hatırlatmak isterim... Her formatta değişen bir numara olacağından Lisans işlemini buna bağlamak demek, hdd formatlandığında tekrar lisans almak için size başvurulacağı anlamına gelir.
- huseyinkucuk
- Üye
- Mesajlar: 142
- Kayıt: 29 Nis 2005 10:03
- Konum: İstanbul
- İletişim:
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Sanırım aradığın kod bu. Uyarmak gerekirse fabrikasyon sonucu olarak seri biçimde çıkan bazı harddisklerde aynı değeri üretmektedir. Birde CreateFile( '\\.\PhysicalDrive0',... kodu 0 numaralı ide'ye takılı olan harddiski verir ve diğer harddiskler için başka numara kullanmalısın. SCSI harddisklerde ise bu kod nasıl sonuç veriyor bilmiyorum ama sonuç istenmeyen bir sonuç olabilir. Birde Windows 2003'lerde çalışmadığını söylemişlerdi ama deneme fırsatım olmadı.
Kod: Tümünü seç
function GetIdeSerialNumber :string;
//Bu değer format atılsa bile değişmez
const IDENTIFY_BUFFER_SIZE = 512;
type
TIDERegs = packed record
bFeaturesReg : BYTE; // Used for specifying SMART "commands".
bSectorCountReg : BYTE; // IDE sector count register
bSectorNumberReg : BYTE; // IDE sector number register
bCylLowReg : BYTE; // IDE low order cylinder value
bCylHighReg : BYTE; // IDE high order cylinder value
bDriveHeadReg : BYTE; // IDE drive/head register
bCommandReg : BYTE; // Actual IDE command.
bReserved : BYTE; // reserved for future use. Must be zero.
end;
TSendCmdInParams = packed record
// Buffer size in bytes
cBufferSize : DWORD;
// Structure with drive register values.
irDriveRegs : TIDERegs;
// Physical drive number to send command to (0,1,2,3).
bDriveNumber : BYTE;
bReserved : Array[0..2] of Byte;
dwReserved : Array[0..3] of DWORD;
bBuffer : Array[0..0] of Byte; // Input buffer.
end;
TIdSector = packed record
wGenConfig : Word;
wNumCyls : Word;
wReserved : Word;
wNumHeads : Word;
wBytesPerTrack : Word;
wBytesPerSector : Word;
wSectorsPerTrack : Word;
wVendorUnique : Array[0..2] of Word;
sSerialNumber : Array[0..19] of CHAR;
wBufferType : Word;
wBufferSize : Word;
wECCSize : Word;
sFirmwareRev : Array[0..7] of Char;
sModelNumber : Array[0..39] of Char;
wMoreVendorUnique : Word;
wDoubleWordIO : Word;
wCapabilities : Word;
wReserved1 : Word;
wPIOTiming : Word;
wDMATiming : Word;
wBS : Word;
wNumCurrentCyls : Word;
wNumCurrentHeads : Word;
wNumCurrentSectorsPerTrack : Word;
ulCurrentSectorCapacity : DWORD;
wMultSectorStuff : Word;
ulTotalAddressableSectors : DWORD;
wSingleWordDMA : Word;
wMultiWordDMA : Word;
bReserved : Array[0..127] of BYTE;
end;
PIdSector = ^TIdSector;
TDriverStatus = packed record
// Error code from driver, or 0 if no error.
bDriverError : Byte;
// Contents of IDE Error register. Only valid when bDriverError is SMART_IDE_ERROR.
bIDEStatus : Byte;
bReserved : Array[0..1] of Byte;
dwReserved : Array[0..1] of DWORD;
end;
TSendCmdOutParams = packed record
// Size of bBuffer in bytes
cBufferSize : DWORD;
// Driver status structure.
DriverStatus : TDriverStatus;
// Buffer of arbitrary length in which to store the data read from the drive.
bBuffer : Array[0..0] of BYTE;
end;
var
hDevice : THandle;
cbBytesReturned : DWORD;
// ptr : PChar;
SCIP : TSendCmdInParams;
aIdOutCmd : Array [0..(SizeOf(TSendCmdOutParams)+IDENTIFY_BUFFER_SIZE-1)-1] of Byte;
IdOutCmd : TSendCmdOutParams absolute aIdOutCmd;
procedure ChangeByteOrder( var Data; Size : Integer );
var ptr : PChar;
i : Integer;
c : Char;
begin
ptr := @Data;
for i := 0 to (Size shr 1)-1 do
begin
c := ptr^;
ptr^ := (ptr+1)^;
(ptr+1)^ := c;
Inc(ptr,2);
end;
end;
begin
Result := ''; // return empty string on error
if SysUtils.Win32Platform=VER_PLATFORM_WIN32_NT then // Windows NT, Windows 2000
begin
// warning! change name for other drives: ex.: second drive '\\.\PhysicalDrive1\'
hDevice := CreateFile( '\\.\PhysicalDrive0', GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0 );
end
else // Version Windows 95 OSR2, Windows 98
hDevice := CreateFile( '\\.\SMARTVSD', 0, 0, nil, CREATE_NEW, 0, 0 );
if hDevice=INVALID_HANDLE_VALUE then Exit;
try
FillChar(SCIP,SizeOf(TSendCmdInParams)-1,#0);
FillChar(aIdOutCmd,SizeOf(aIdOutCmd),#0);
cbBytesReturned := 0;
// Set up data structures for IDENTIFY command.
with SCIP do
begin
cBufferSize := IDENTIFY_BUFFER_SIZE;
// bDriveNumber := 0;
with irDriveRegs do
begin
bSectorCountReg := 1;
bSectorNumberReg := 1;
// if Win32Platform=VER_PLATFORM_WIN32_NT then bDriveHeadReg := $A0
// else bDriveHeadReg := $A0 or ((bDriveNum and 1) shl 4);
bDriveHeadReg := $A0;
bCommandReg := $EC;
end;
end;
if not DeviceIoControl( hDevice, $0007c088, @SCIP, SizeOf(TSendCmdInParams)-1,
@aIdOutCmd, SizeOf(aIdOutCmd), cbBytesReturned, nil ) then Exit;
finally
CloseHandle(hDevice);
end;
with PIdSector(@IdOutCmd.bBuffer)^ do
begin
ChangeByteOrder( sSerialNumber, SizeOf(sSerialNumber) );
(PChar(@sSerialNumber)+SizeOf(sSerialNumber))^ := #0;
Result := PChar(@sSerialNumber);
end;
Result:=Trim(Result);
end;
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
- huseyinkucuk
- Üye
- Mesajlar: 142
- Kayıt: 29 Nis 2005 10:03
- Konum: İstanbul
- İletişim: