Harddiskin seri numarasının bulanması
Harddiskin seri numarasının bulanması
Harddiskin seri numarasını bulan delphi .net kodu var mı?
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
.net dll'i
Bunu .net üzerinde değilde win32'de bulan bir .dll hazırlayıp .net'te bu .dll'i kullanmayı dene.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
GetVolumeInformation() Fonksiyonu
Hard diskin Volume nosunu öğrenmek istiyorsanız bu fonksiyondan yararlanabilirsiniz. Çok sayıda parametreye sahip olan bu fonksiyon Volume veya seri nosu öğrenilmek istenen sürücünün adını 1. parametre olarak almaktadır. Bu fonksiyonun orijinal ve Delphi’ye uyarlanmış halini aşağıda görebilirsiniz.
BOOL GetVolumeInformation(
LPCTSTR lpRootPathName,
LPTSTR lpVolumeNameBuffer,
DWORD nVolumeNameSize,
LPDWORD lpVolumeSerialNumber,
LPDWORD lpMaximumComponentLength,
LPDWORD lpFileSystemFlags,
LPTSTR lpFileSystemNameBuffer,
DWORD nFileSystemNameSize);
[DllImport('kernel32.dll')]
function GetVolumeInformation(
lpRootPathName : string;
lpVolumeNameBuffer :StringBuilder;
nVolumeNameSize : LongInt;
var lpVolumeSerialNumber: LongInt;
var lpMaximumComponentLength: LongInt;
var lpFileSystemFlags : LongInt;
lpFileSystemNameBuffer : StringBuilder;
nFileSystemNameSize: LongInt) : Integer; external;
Fonksiyonu deklare ettikten sonra forma 2 TextBox ve bir düğme yerleştirip düğmenin Click() metodunu aşağıdaki gibi düzenledim.
procedure TWinForm.Button1_Click(sender: System.Object; e: System.EventArgs);
Var
Str1 : StringBuilder;
Str2 : StringBuilder;
Kapasite1 : LongInt;
Kapasite2 : LongInt;
Yol : String;
Seri : LongInt;
Max : LongInt;
Flags : LongInt;
Sonuc : Integer;
begin
Str1 := StringBuilder.Create(255);
Str2 := StringBuilder.Create(255);
Kapasite1 := Str1.Capacity;
Kapasite2 := Str2.Capacity;
Yol := 'C:\';
Seri:=0;
Max:=0;
Flags:=0;
Sonuc := GetVolumeInformation(Yol, Str1, Kapasite1, Seri, Max, Flags, Str2, Kapasite2);
textBox1.Text := Seri.ToString();
textBox2.Text := Seri.ToString('X');
end;
Hard diskin Volume nosunu öğrenmek istiyorsanız bu fonksiyondan yararlanabilirsiniz. Çok sayıda parametreye sahip olan bu fonksiyon Volume veya seri nosu öğrenilmek istenen sürücünün adını 1. parametre olarak almaktadır. Bu fonksiyonun orijinal ve Delphi’ye uyarlanmış halini aşağıda görebilirsiniz.
BOOL GetVolumeInformation(
LPCTSTR lpRootPathName,
LPTSTR lpVolumeNameBuffer,
DWORD nVolumeNameSize,
LPDWORD lpVolumeSerialNumber,
LPDWORD lpMaximumComponentLength,
LPDWORD lpFileSystemFlags,
LPTSTR lpFileSystemNameBuffer,
DWORD nFileSystemNameSize);
[DllImport('kernel32.dll')]
function GetVolumeInformation(
lpRootPathName : string;
lpVolumeNameBuffer :StringBuilder;
nVolumeNameSize : LongInt;
var lpVolumeSerialNumber: LongInt;
var lpMaximumComponentLength: LongInt;
var lpFileSystemFlags : LongInt;
lpFileSystemNameBuffer : StringBuilder;
nFileSystemNameSize: LongInt) : Integer; external;
Fonksiyonu deklare ettikten sonra forma 2 TextBox ve bir düğme yerleştirip düğmenin Click() metodunu aşağıdaki gibi düzenledim.
procedure TWinForm.Button1_Click(sender: System.Object; e: System.EventArgs);
Var
Str1 : StringBuilder;
Str2 : StringBuilder;
Kapasite1 : LongInt;
Kapasite2 : LongInt;
Yol : String;
Seri : LongInt;
Max : LongInt;
Flags : LongInt;
Sonuc : Integer;
begin
Str1 := StringBuilder.Create(255);
Str2 := StringBuilder.Create(255);
Kapasite1 := Str1.Capacity;
Kapasite2 := Str2.Capacity;
Yol := 'C:\';
Seri:=0;
Max:=0;
Flags:=0;
Sonuc := GetVolumeInformation(Yol, Str1, Kapasite1, Seri, Max, Flags, Str2, Kapasite2);
textBox1.Text := Seri.ToString();
textBox2.Text := Seri.ToString('X');
end;
Memik YANIK - http://www.memikyanik.com
Öncelikle Memik hoca hoşgeldin. Uzun zamandır yoktunuz
HDD Seri no dan kasıt, volume seri no mu yoksa fabrika seri no su mu
Aşağıdaki başlıklar delphi de nasıl yapıldığı hakkında fikir verecektir
viewtopic.php?t=617
viewtopic.php?t=1764

HDD Seri no dan kasıt, volume seri no mu yoksa fabrika seri no su mu

Aşağıdaki başlıklar delphi de nasıl yapıldığı hakkında fikir verecektir

viewtopic.php?t=617
viewtopic.php?t=1764
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Recep hoca merhaba;
Haklısınız uzun süredir siteye uğramaz olmuştum. Bazen de login olmadan dolaşıyordum. İnşallah bundan sonra fazla kaybolmam.
Verdiğim kod ile bulunan volume seri numarasıdır,
Haklısınız uzun süredir siteye uğramaz olmuştum. Bazen de login olmadan dolaşıyordum. İnşallah bundan sonra fazla kaybolmam.
Verdiğim kod ile bulunan volume seri numarasıdır,
Memik YANIK - http://www.memikyanik.com
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
GetComputerName vs. HDDNo :)
Yukarıda @memiky hocamızın verdiği kodla harddik seri numarası okunuyor. Bildiğim kadarıyla bu kod her disk biçimlendirmesinde değişiyor. Hatta bunu değiştiren programlar bile varmış. HDD fabrika nosunu bulan kodu kullanmam gerekti ve orada da bunu okuyan kodu .net ortamında yazmayı becerememiştim ama onun yerine bu değeri win32'de okuyan dll'i oluşturup .net'ten okumuştum. Mesela bilgisayar adını okuyan GetComputerName benzeri bir dll fonksiyonu oluşturmuştum. Bilindiği gibi GetComputerName'i kullanabilmek için aşağıdaki kodlar kullanılır.
şimdi aynı GetComputerName gibi çalışan kendi win32 dll fonksiyonumuzu yazalım. @rsimsek hocamızın verdiği kısayollar harddisk fabrika numarasını okuyan kodu verdiği için burada tekrar yazmıyorum. Sonuçta oluşan string değeri GetComputerName gibi dll üzerinden aktaracak fonksiyonu aşağıda belirtiyorum. Bu şekilde string değer aktarmaları yapan dll kodu aslında diğer paltformlardan da kullanılabilir. Mesela Visual Basic'ten de bu dll kullanılarak string değer aktarması yapılabilir. Çünkü yapısal mantık olarak GetComputerName ile aynıdır.
win32'de yazılan bu HDDNo isimli dll fonksiyonunu tıpkı GetComputerName fonksiyonu gibi kullanabilir.
kolay gelsin.
Kod: Tümünü seç
{Windows'ta tanımlı şekli
[SuppressUnmanagedCodeSecurity, DllImport(kernel32, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'GetComputerName')]
function GetComputerName(lpBuffer: StringBuilder; var nSize: DWORD): BOOL;external;}
function BilgisayarAdi: string;
var
LocalMachine: StringBuilder;//System.Text.StringBuilder
Size: DWORD;
begin
Size := MAX_COMPUTERNAME_LENGTH;
LocalMachine := StringBuilder.Create(Size);
if GetComputerName(LocalMachine, Size) then
Result := LocalMachine.ToString
else Result := '';
end;
Kod: Tümünü seç
function HDDNo(HDDSeriNo:PChar;var Boyu:DWord):Integer;stdcall;
var S:String; i:Integer;
begin
try
Result:=0;
S:='STRİNG DEĞER';{<--<<--<--<<--harddisk seri nosu bu string değişkene aktarılmalıdır}
//S:=GetIdeSerialNumber();
i:=Length(S);
if Boyu>i then Boyu:=i+1 else S:=Copy(S,1,i-1);{boyut ayarlaması}
StrCopy(HDDSeriNo,PChar(S));
Result:=1;
except
Result:=-1;
end;
end;
Kod: Tümünü seç
{[SuppressUnmanagedCodeSecurity, DllImport('KodOku.dll', CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'HDDNo')]
function HDDNo(HDDSeriNo:StringBuilder;var Boyu:DWord):Integer;external;}
function HDDSeriNo: string;
var
SeriNo: StringBuilder;
Size: DWORD;
begin
Size := 50;
SeriNo := StringBuilder.Create(Size);
if HDDNo(SeriNo, Size)=1 then
Result := SeriNo.ToString
else Result := '';
end;
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
- Trial_Cooder
- Üye
- Mesajlar: 236
- Kayıt: 17 Nis 2006 04:44
Delphi Kodlarını İstiyorsan:
Hazır Programını İstiyorsan:
http://www.programlama.com/Main/delphi/ ... /hddsn.zip
Selametle, Hayırlı Ramazanlar
Kod: Tümünü seç
function GetDiskSerialNumber(DriveName: Char): DWord;
var
Temp: DWord;
begin
GetVolumeInformation(
PChar(DriveName + ':\' ), Nil, 0, @Result,Temp,Temp,
Nil, 0);
end;
// DriveName: A, B, C, D, ...
Kulanım : GetDiskSerialNumber('C')
Hazır Programını İstiyorsan:
http://www.programlama.com/Main/delphi/ ... /hddsn.zip
Selametle, Hayırlı Ramazanlar

- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
.net uyuşmazlığı
Herkese kolay gelsin.
@Trial_Cooder yukarıda ki yazışmaları keşke önce okusaydın.

@Trial_Cooder yukarıda ki yazışmaları keşke önce okusaydın.
Bu kodlar .net te çalışmaz. .net üzerinden çalışan kodu da zaten @memiky hocamız yukarıda vermiş. Ama "Selametle, Hayırlı Ramazanlar" kısmına katılmamak elde değil. Ben bunu kaçırmışım. Herkeze Selametle, Hayırlı Ramazanlar diliyorum.Trial_Cooder yazdı:Delphi Kodlarını İstiyorsan:Kod: Tümünü seç
function GetDiskSerialNumber(DriveName: Char): DWord; var Temp: DWord; begin GetVolumeInformation( PChar(DriveName + ':\' ), Nil, 0, @Result,Temp,Temp, Nil, 0); end; // DriveName: A, B, C, D, ... Kulanım : GetDiskSerialNumber('C')
Hazır Programını İstiyorsan:
http://www.programlama.com/Main/delphi/ ... /hddsn.zip
Selametle, Hayırlı Ramazanlar

Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
- Trial_Cooder
- Üye
- Mesajlar: 236
- Kayıt: 17 Nis 2006 04:44