Konu: Harici Disk MAC adresi
Arkadaşlar selam,
VFP 9 ile harici disk mac adresini nasıl okurum.
Saygılar.
Giriş yapmadınız. Lütfen giriş yapın yada kayıt olun.
Arkadaşlar selam,
VFP 9 ile harici disk mac adresini nasıl okurum.
Saygılar.
MAC ifadesini harddisk ile birlikte hiç duymadım.
"Harici disk" dediğine göre: söz konusu olan harddik bir NAS'ın içindeki bir harddisk ve sen NAS'ın network kartın MAC adresinimi öğrenmek istiyorsun?
Yanlış ifade etmişim.. Harici diske ait üretici seri numarasını kastetmiştim.
Bir de bu numara, disk formatlandığında volume id gibi değişiyor mu ?
Diskin seri numarasını mı yoksa kastediyorsun ?
*!* HDD Firmware serial number
*!* Author: Mike Gagnon
*!* http://www.foxite.com/archives/hdd-firmware-serial-number-0000075916.htm
?diskserial("c")
FUNCTION DiskSerial
LPARAMETER cDisk
DECLARE SHORT GetVolumeInformation IN Win32API ;
STRING wroot, ;
STRING wnombuf, ;
LONG wnomsize, ;
STRING wnumero, ;
STRING wmx, ;
STRING wflag, ;
STRING wsysbuf, ;
INTEGER wsyssize
LOCAL wroot, wnombuf, wnumero, wmx
LOCAL wflag, wsysbuf, wnomsize, wsyssize
LOCAL n1,n2,n3,n4, w1,w2,w3,w4
wroot = IIF(EMPTY(cDisk), SYS(5), cDisk + ':') + "\"
wnombuf = SPACE(255)
wnumero = SPACE(10)
wmx = SPACE(255)
wflag = SPACE(255)
wsysbuf = SPACE(255)
wnomsize = 255
wsyssize = 255
GetVolumeInformation (wroot, @wnombuf, @wnomsize, @wnumero, ;
@wmx, @wflag, @wsysbuf, @wsyssize)
n4 = ASC(SUBSTR(wnumero,1,1))
n3 = ASC(SUBSTR(wnumero,2,1))
n2 = ASC(SUBSTR(wnumero,3,1))
n1 = ASC(SUBSTR(wnumero,4,1))
w1 = TRANSFORM(n1,'@0')
w2 = TRANSFORM(n2,'@0')
w3 = TRANSFORM(n3,'@0')
w4 = TRANSFORM(n4,'@0')
RETURN RIGHT(w1,2) + RIGHT(w2,2) + "-" + RIGHT(w3,2) + RIGHT(w4,2)
EndFunc
Public code from VFP Forums
? HDSerialNo()
FUNCTION HDSerialNo
xWMI = getobject("winmgmts:")
xDisks = xWMI.InstancesOf("Win32_PhysicalMedia")
for each xDisk in xDisks
HDSerialNo=xDisk.SerialNumber && The first HD in your computer
exit
NEXT
HDSerialNo=ALLTRIM(HDSerialNo) && The first HD in your computer
? HDSerialNo
IF HDSerialNo='123456789'
*** Program continues and return to the calling program.
RETURN
ENDI
* QUIT && Quiting the program because the HD doesn't match.
RETURN
Public code from VFP Forums
?HDD("C")
Function HDD
lparameter m.drv
* Limitations:
* 1. Supported Windows versions: 2000, XP, Vista, 7 (untested)
* 2. Can't get HD Serial Number for USB drives
* 3. Needs administrative rights to get HD Serial Number for SCSI drives
* 4. May be something else
* Usage:
* ?HDD() && for drive where Windows is installed
* ?HDD("D") && for drive D:\</font>
Declare Integer CloseHandle in kernel32 Integer hObject
Declare Integer CreateFile in kernel32 String lpFileName, Integer dwDesiredAccess, Integer dwShareMode, ;
Integer lpSecurityAttributes, Integer dwCreationDisposition, Integer dwFlagsAndAttributes, ;
Integer hTemplateFile
Declare Integer DeviceIoControl in kernel32 Integer hDevice, Integer dwIoControlCode, String @lpInBuffer, ;
Long nInBufferSize, String @lpOutBuffer, Long nOutBufferSize, Integer @lpBytesReturned, ;
Integer lpOverlapped
Declare Integer GetVolumeInformation in Win32API ;
String lpRootPathName, String @lpVolumeNameBuffer, ;
Integer nVolumeNameSize, Long @lpVolumeSerialNumber, ;
Integer @lpMaximumComponentLength, Integer @lpFileSystemFlags, ;
String @lpFileSystemNameBuffer, Integer nFileSystemNameSize
local m.vnb,m.vnbs,m.mcl,m.fsf,m.fsnb,m.fsnbs,m.sn,m.mod,m.rev, ;
m.pos0,m.pos1,m.pos2,m.pos3,m.pos4,m.ch1,m.ch2, m.vsn, handle, drivenumber, m.sci, ;
m.sco, m.otv, m.ret_buffersize, m.sco1, m.j, m.scl
if vartype(m.drv)<>"C" or empty(m.drv)
m.drv=Get_windows_drive()
endif
if empty(m.drv)
return ""
endif
m.drv=left(m.drv,1)+":\"
m.vnb=replicate(chr(0),64)
m.vnbs=64
m.vsn=0
m.mcl=0
m.fsf=0
m.fsnb=replicate(chr(0),10)
m.fsnbs=10
GetVolumeInformation(m.drv,@m.vnb,m.vnbs,@m.vsn,@m.mcl,@m.fsf,@m.fsnb,m.fsnbs)
if m.vsn<0
m.vsn=m.vsn+16^8
endif
m.vsn=padl(allt(substr(Transform(m.vsn,"@0"),3)),8,"0")
if Windows_Major_Version()>=5
m.drivenumber=asc(left(m.drv,1))-asc("C")
handle = CreateFile("\\.\"+chr(asc("c")+m.drivenumber)+":", 0xC0000000, 3, 0, 3, 0, 0)
m.sn=""
m.mod=""
m.rev=""
if handle<>-1
m.sci=""
m.sci=m.sci+chr(0)+chr(2)+chr(0)+chr(0)
m.sci=m.sci+chr(0)
m.sci=m.sci+chr(1)
m.sci=m.sci+chr(1)
m.sci=m.sci+chr(0)
m.sci=m.sci+chr(0)
m.sci=m.sci+chr(bitor(0xA0, bitand(m.drivenumber,1)*16))
m.sci=m.sci+chr(0xEC)
m.sci=m.sci+chr(0)
m.sci=m.sci+chr(m.drivenumber)
m.sci=m.sci+repl(chr(0),499)
m.sco=replicate(chr(0),2048)
m.ret_buffersize=0
m.otv=DeviceIoControl(handle, 0x7C088, @m.sci, len(sci), @m.sco, len(sco), @m.ret_buffersize, 0)
CloseHandle(handle)
if m.otv<>0
m.sn=chrtran(allt(conv21(substr(m.sco,37,20))),chr(0),"")
m.rev=chrtran(allt(conv21(substr(m.sco,63,8))),chr(0),"")
m.mod=chrtran(allt(conv21(substr(m.sco,71,40))),chr(0),"")
endif
endif
*************************************
if empty(m.sn)
handle = CreateFile("\\.\"+chr(asc("c")+m.drivenumber)+":", 0x00000000, 3, 0, 3, 0, 0)
if handle<>-1
m.sn=""
m.mod=""
m.rev=""
m.sci=replicate(chr(0),1024)
m.sco=replicate(chr(0),1024)
m.ret_buffersize=0
m.otv=DeviceIoControl(handle, 0x2D1400, ;
@m.sci, len(sci), @m.sco, len(sco), @m.ret_buffersize, 0)
CloseHandle(handle)
if m.otv<>0
m.pos0=asc(substr(m.sco,13,1))
m.pos1=asc(substr(m.sco,17,1))
if m.pos0>0
m.pos1=m.pos0
endif
m.pos2=asc(substr(m.sco,21,1))
m.pos3=asc(substr(m.sco,25,1))
m.mod=substr(m.sco,m.pos1+1,m.pos2-m.pos1)
m.pos4=at(chr(0),m.mod)
if m.pos4>0
m.mod=allt(chrtran(m.mod,chr(0),""))
endif
if m.pos3>m.pos2
m.rev=substr(m.sco,m.pos2+1,m.pos3-m.pos2)
else
m.rev=substr(m.sco,m.pos2+1)
endif
m.pos4=at(chr(0),m.rev)
if m.pos4>0
m.rev=allt(left(m.rev,m.pos4-1))
endif
if m.pos3>0
m.pos3=m.pos3+1
m.sco1=substr(m.sco, m.pos3,40)
m.sco1=allt(m.sco1)
m.sn=""
m.pos3=1
for m.j=1 to 20
m.ch1=chr(eval("0x"+allt(substr(m.sco1,m.pos3,2))))
m.pos3=m.pos3+2
m.ch2=chr(eval("0x"+allt(substr(m.sco1,m.pos3,2))))
m.pos3=m.pos3+2
m.sn=m.sn+m.ch2+m.ch1
endfor
m.sn=allt(chrtran(m.sn,chr(0),""))
else
m.sn=""
endif
endif
endif
if empty(m.sn)
m.drivenumber=asc(left(m.drv,1))-asc("C")
handle = CreateFile("\\.\"+chr(asc("c")+m.drivenumber)+":", 0xC0000000, 3, 0, 3, 0, 0)
if handle<>-1
m.sci=""
m.sci=m.sci+chr(44)+chr(0)
m.sci=m.sci+chr(0)
m.sci=m.sci+chr(0)
m.sci=m.sci+chr(0)
m.sci=m.sci+chr(0)
m.sci=m.sci+chr(6)
m.sci=m.sci+chr(24)
m.sci=m.sci+chr(1)+chr(0)+chr(0)+chr(0)
m.sci=m.sci+chr(192)+chr(0)+chr(0)+chr(0)
m.sci=m.sci+chr(2)+chr(0)+chr(0)+chr(0)
m.sci=m.sci+chr(76)+chr(0)+chr(0)+chr(0)
m.sci=m.sci+chr(44)+chr(0)+chr(0)+chr(0)
m.sci=m.sci+chr(0x12)+chr(1)+chr(0x80)+chr(0)
m.sci=m.sci+chr(192)+chr(0)+chr(0)+chr(0)
m.sci=m.sci+chr(0)+chr(0)+chr(0)+chr(0)
m.sci=m.sci+chr(0)+chr(0)+chr(0)+chr(0)
m.sci=m.sci+repl(chr(0),32)
m.sci=m.sci+repl(chr(0),192)
m.ret_buffersize=0
m.otv=DeviceIoControl(handle, 0x4D004, ;
@m.sci, 44, @m.sci, 268, m.ret_buffersize, 0)
CloseHandle(handle)
if m.otv<>0
m.scl=asc(substr(m.sci,80))
m.sn=substr(m.sci,81,m.scl)
endif
endif
endif
endif
*************************************
return m.drv+" Vol SN: "+m.vsn+" "+chrtran(m.fsnb,chr(0),"")+" # Model: "+m.mod+ ;
" Revision: "+m.rev+" Serial: "+m.sn
else
return "Unsupported Windows version"
endif
*** conv21 *************
Function conv21
lpara m.str
if len(m.str)%2=1
m.str=m.str+" "
endif
local m.i, m.str2
m.str2=""
for m.i=1 to len(m.str)
m.str2=m.str2+substr(m.str,m.i+iif(m.i%2=0,-1,1),1)
next
return m.str2
*** Windows Major Version ************
Function Windows_Major_Version
local m.str, m.otv
Declare Integer GetVersionEx in Win32API String @str
m.str=chr(148)+replic(chr(0),147)
m.otv=GetVersionEx(@m.str)
if m.otv>0
return asc(substr(m.str,5,1))
else
return 0
endif
*** Get Windows Drive ***************
Function Get_Windows_Drive
Declare Integer GetLogicalDriveStrings in Win32API Integer buflen, String @buf
Declare Integer GetDriveType in Win32API String m.pth
local m.buflen, m.buf, m.str1, m.i, m.drvtype
m.buflen=104
m.buf=replicate(chr(0),m.buflen)
GetLogicalDriveStrings(m.buflen, @m.buf)
m.buf=chrtran(m.buf,chr(0)+"\:","")
m.str1=""
for m.i=1 to len(m.buf)
m.drvtype=GetDriveType(substr(m.buf,m.i,1)+":\")
if m.drvtype=3
m.str1=m.str1+upper(substr(m.buf,m.i,1))
endif
next
if empty(m.str1)
return ""
endif
local m.sd
m.sd=read_sysdir()
if upper(left(m.sd,1)) $ m.str1 and substr(m.sd,2,2)==":\"
return upper(left(m.sd,3))
else
return ""
endif
*** Get System Directory ************
Function read_sysdir
Declare GetSystemDirectory in Win32API String @buffer, Integer buffersize
local m.buf
m.buf=space(128)
GetSystemDirectory(@m.buf,128)
return allt(m.buf)
Public code from VFP Forums
*!* Author : Samir H.
oWMi = getobject("winmgmts://")
col = oWMI.ExecQuery("Select * from win32_diskdrive")
for each disk in col
?disk.PNPDeviceID
next
*!* Author : Mike Gagnon
Local objWMI,colClass,objClass,strComputer
Create Cursor PhysicalMedia (serialnumber c(100) Null)
strComputer = "."
objWMI = Getobject("winmgmts:\\" +strComputer + "\root\cimv2")
colClass = objWMI.ExecQuery("Select * from Win32_PhysicalMedia",,48)
For Each objClass In colClass
Insert Into PhysicalMedia (serialnumber) Values (objClass.serialnumber)
Next
Browse Normal
******* OR
Local objWMIService, objItem, colItems, strComputer
strComputer = "."
objWMIService = Getobject("winmgmts:\\"+ strComputer + "\root\cimv2")
colItems = objWMIService.ExecQuery("Select * from Win32_DiskDrive")
For Each objItem In colItems
? "Computer: " +Transform(objItem.SystemName)
?"Status: " + Transform(objItem.Status)
?" =================================="
?"Name: " + Transform(objItem.Name)
?"PNPDeviceID:" + Transform(objItem.PNPDeviceID)
?"Serial Number:" + Transform(objItem.SerialNumber)
?"Description: " + Transform(objItem.Description)
?"Manufacturer: " + Transform(objItem.Manufacturer)
?"Model: " + Transform(objItem.Model)
?"Size: " + Transform(Val(objItem.Size )/1073741824) + " GB"
?"Number of Partitions: " + Transform(objItem.Partitions)
?"Total Cylinders: " + Transform(objItem.TotalCylinders)
?"Tracks PerCylinder: " + Transform(objItem.TracksPerCylinder)
?"Total Heads: " + Transform(objItem.TotalHeads)
?"Total Sectors: " + Transform(objItem.TotalSectors)
?"Bytes PerSector: " + Transform(objItem.BytesPerSector)
?"Sectors PerTrack: " + Transform(objItem.SectorsPerTrack)
?"Total Tracks: " + Transform(objItem.TotalTracks)
Next
Uğur Bey bombalamış resmen
teşekkürler.
Arşivde olan kodlardan
Bu arada aradığım tam olarak şuydu :
Create Cursor myDisks (DriveLetter c(1),SerialNumber c(50),Model c(50),DeviceID c(50),VolumeName c(50),VolumeSerialNumber c(20))
wmiServices = Getobject("winmgmts:{impersonationLevel=Impersonate}!//.")
wmiDiskDrives = wmiServices.ExecQuery("SELECT Model,DeviceID FROM Win32_DiskDrive")
For Each wmiDiskDrive In wmiDiskDrives
lcDeviceID = Trim(Strtran(wmiDiskDrive.DeviceID,'\','\\'))
wmiDiskPartitions = wmiServices.ExecQuery(;
'ASSOCIATORS OF {Win32_DiskDrive.DeviceID="' +;
m.lcDeviceID + '"} WHERE '+ ;
'AssocClass = Win32_DiskDriveToDiskPartition')
For Each wmiDiskPartition In wmiDiskPartitions
wmiLogicalDisks = wmiServices.ExecQuery( ;
'ASSOCIATORS OF {Win32_DiskPartition.DeviceID="'+;
wmiDiskPartition.DeviceID + '"} WHERE '+;
'AssocClass = Win32_LogicalDiskToPartition')
For Each wmiLogicalDisk In wmiLogicalDisks
wmiDiskVolumes = wmiServices.ExecQuery(;
"Select deviceID,VolumeName,VolumeSerialNumber from Win32_LogicalDisk"+;
" where deviceID = '" + wmiLogicalDisk.deviceID + "'" )
For Each oVolume In wmiDiskVolumes
lcVolumeName = oVolume.VolumeName
lcVolumeSerialNumber = oVolume.VolumeSerialNumber
Exit
Endfor
wmiDisks = wmiServices.ExecQuery(;
'SELECT * FROM Win32_PhysicalMedia where Tag="'+m.lcDeviceID+'"')
For Each wmiDisk In wmiDisks
Insert Into myDisks ;
(DriveLetter,SerialNumber,Model,DeviceID,VolumeName,VolumeSerialNumber) ;
values ;
(wmiLogicalDisk.DeviceID,;
wmiDisk.SerialNumber,;
wmiDiskDrive.Model,;
wmiDiskDrive.DeviceID,;
m.lcVolumeName,;
m.lcVolumeSerialNumber)
Endfor
Endfor
Endfor
Endfor
Browse
***NOT: Kod Windows XP 'de Harici Disk Bilgilerini Okuyamıyor. (Belkide USB bağlantılarını..)
Benim yazdigim bir koda cok benziyor
Create Cursor myDisks (DriveLetter c(1),SerialNumber c(50),Model c(50),;
DeviceID c(50),VolumeName c(50),VolumeSerialNumber c(20))
wmiServices = Getobject("winmgmts:{impersonationLevel=Impersonate}!//.")
wmiDiskDrives = wmiServices.ExecQuery("SELECT Model,DeviceID FROM Win32_DiskDrive")
For Each wmiDiskDrive In wmiDiskDrives
lcDeviceID = Trim(Strtran(wmiDiskDrive.DeviceID,'\','\\'))
wmiDiskPartitions = wmiServices.ExecQuery(;
'ASSOCIATORS OF {Win32_DiskDrive.DeviceID="' +;
m.lcDeviceID + '"} WHERE '+ ;
'AssocClass = Win32_DiskDriveToDiskPartition')
For Each wmiDiskPartition In wmiDiskPartitions
wmiLogicalDisks = wmiServices.ExecQuery( ;
'ASSOCIATORS OF {Win32_DiskPartition.DeviceID="'+;
wmiDiskPartition.DeviceID + '"} WHERE '+;
'AssocClass = Win32_LogicalDiskToPartition')
For Each wmiLogicalDisk In wmiLogicalDisks
wmiDiskVolumes = wmiServices.ExecQuery(;
"Select deviceID,VolumeName,VolumeSerialNumber from Win32_LogicalDisk"+;
" where deviceID = '" + wmiLogicalDisk.DeviceID + "'" )
For Each oVolume In wmiDiskVolumes
lcVolumeName = oVolume.VolumeName
lcVolumeSerialNumber = oVolume.VolumeSerialNumber
Exit
Endfor
wmiDisks = wmiServices.ExecQuery(;
'SELECT * FROM Win32_PhysicalMedia where Tag="'+m.lcDeviceID+'"')
For Each wmiDisk In wmiDisks
Insert Into myDisks ;
(DriveLetter,SerialNumber,Model,DeviceID,VolumeName,VolumeSerialNumber) ;
values ;
(wmiLogicalDisk.DeviceID,;
SwapAndTranslate(wmiDisk.SerialNumber),;
wmiDiskDrive.Model,;
wmiDiskDrive.DeviceID,;
m.lcVolumeName,;
m.lcVolumeSerialNumber)
Endfor
Endfor
Endfor
Endfor
Browse
Procedure SwapAndTranslate(tcString)
tcString = Trim(m.tcString)
If Len(m.tcString)%2 = 0 And ;
EMPTY(Chrtran(Upper(m.tcString),'0123456789ABCDEF',''))
Local ix,lcString
lcString = Space(Len(m.tcString)/2)
For ix = 1 To Len(m.tcString)/2
lcString = Stuff(m.lcString,;
m.ix+Iif(m.ix%2=0,-1,1),1,;
Chr(Eval('0x'+Substr(m.tcString,(m.ix-1)*2+1,2))))
Endfor
Return Alltrim(m.lcString)
Else
Return m.tcString
Endif
Endproc
Çok şaşırtıcı , bence de sen yazmışsın ama şimdi nerede bulduğumu hatırlamıyorum bile.
Galiba bir forumdu.