"MiTeC Systm Information Component"i çalıştıramad

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
huseyinkucuk
Üye
Mesajlar: 142
Kayıt: 29 Nis 2005 10:03
Konum: İstanbul
İletişim:

"MiTeC Systm Information Component"i çalıştıramad

Mesaj gönderen huseyinkucuk »

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...
29.04.2005 tarihi itibariyle Delphi öğrenmeye başlayan yeni bir kullanıcı sayılabilirim.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7605
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

Ben bir ara o formu bulup iyice küçültüp, left ve top özelliklerini 2000 yaparak gizlemiştim. İsmini hatırlamıyorum, bu makinmada kurulu değil. mitec diye aratırsanız forumda vardı.

Kolay gelsin.
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1527
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

Demo larında bazı örnekler vardı, mesela komponent olarak değilde sadece dll leri projeye ekleyerek kullanılabiliyordu.
DeveloperToolKit

..::|YeşilMavi|::..
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: "MiTeC Systm Information Component"i çalıştır

Mesaj gönderen Lost Soul »

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...
ben de bi ara denemiştim onu aynı şekilde bende deboş değer döndürmüştü.
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;


Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@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;
Resim
Resim ....Resim
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Mesaj gönderen Lost Soul »

Ah evet o kısmı unutmuşum. :) Teşekkürler.
Kullanıcı avatarı
huseyinkucuk
Üye
Mesajlar: 142
Kayıt: 29 Nis 2005 10:03
Konum: İstanbul
İletişim:

Mesaj gönderen huseyinkucuk »

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...
29.04.2005 tarihi itibariyle Delphi öğrenmeye başlayan yeni bir kullanıcı sayılabilirim.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

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.
Resim
Resim ....Resim
Kullanıcı avatarı
huseyinkucuk
Üye
Mesajlar: 142
Kayıt: 29 Nis 2005 10:03
Konum: İstanbul
İletişim:

Mesaj gönderen huseyinkucuk »

@mrmarman hocam, teşekkür ederim... Sanırım forumda HDD'nin fabrika seri numarasını veren kodlar bir yerde geçiyordu (öyle hatırlıyorum)... Çok teşekkürler, çalışmalarınızda başarılar...
29.04.2005 tarihi itibariyle Delphi öğrenmeye başlayan yeni bir kullanıcı sayılabilirim.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

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. - .
Kullanıcı avatarı
huseyinkucuk
Üye
Mesajlar: 142
Kayıt: 29 Nis 2005 10:03
Konum: İstanbul
İletişim:

Mesaj gönderen huseyinkucuk »

@sabanakman hocam, çok teşekkür ederim. Kod çok güzel çalışıyor (başka bilgisayarda deneme fırsatım olmadı henüz ama heralde farklı numara veriyordur). Allah razı olsun... Kolay gelsin...
29.04.2005 tarihi itibariyle Delphi öğrenmeye başlayan yeni bir kullanıcı sayılabilirim.
Cevapla