精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● VFP>>〖外部引用〗>>[转贴]VFP6调用API获取网卡序列号

主题:[转贴]VFP6调用API获取网卡序列号
发信人: hotpc(不回头)
整理人: foxzz(2004-12-28 08:54:12), 站内信件
* 大家都在找,不贴出来就不好意思了

* GetNicID - uses Win-32 API call to get NIC ID (physical address)

* this is the DLL declaration to access the API method
DECLARE INTEGER GetAdaptersInfo IN iphlpapi ; 
    STRING @pAdapterInfo, LONG @pOutBufLen 

LOCAL lcBuffer, lnBufsize 
lnBufsize = 0 
lcBuffer = "" 

* first call to GetAdaptorsInfo() method
* this call usually returns: ERROR_BUFFER_OVERFLOW (111)
* with lnBufsize set to the required amount of memory 
= GetAdaptersInfo(@lcBuffer, @lnBufsize) 

* build buffer string from nulls
lcBuffer = Repli(Chr(0), lnBufsize) 

* call method again
IF GetAdaptersInfo(@lcBuffer, @lnBufsize) <> 0 && ERROR_SUCCESS 
  * no joy 
  =MESSAGEBOX('WinAPI problem - GetAdaptorsInfo')
  RETURN 
ENDIF 

LOCAL lnAddrlen, lcAddress, ii
* 401st byte of lcBuffer is size of NIC address string
lnAddrlen = Asc(SUBSTR(lcBuffer, 401, 1)) 
* actual NIC address starts at byte 405 of lcBuffer
lcAddress = SUBSTR(lcBuffer, 405, lnAddrlen) 

* build decimal and hex strings from ASCII values of returned characters
lcThisID = ''
lcThisHex = ''

FOR ii = 1 TO lnAddrLen
lcThisID = lcThisID + ;
IIF(ii>1,',','') + ;
ALLTRIM(STR(ASC(SUBSTR(lcAddress,ii,1))))

lcThisHex = lcThisHex + ;
IIF(ii>1,'-','') + ;
RIGHT(TRANSFORM(ASC(SUBSTR(lcAddress,ii,1)),'@0'),2)
NEXT 

* display decimal and hex versions of NIC ID
?
? 'NIC ID (decimal): '+lcThisID
? 'NIC ID (hex): '+ lcThisHex

[关闭][返回]