- 相關推薦
在VFP中獲取Windows注冊信息的方法
葛曉濱(中國國際電子商務中心安徽代表處)
關鍵詞:
在Visual Foxpro軟件的程序設計中,我們經常需要關注其程序設計的環境,尤其是獲得Windows軟件系統注冊的用戶名及單位名稱。為此我們設計了一個在Windows 3.X、Window 95、Windows 98及Windows NT 4.0環境下均通用的一個子程序,可以滿足上述的需要。
#DEFINE MACHINE_ID -2147483646
#DEFINE VER_PATH "Software\Microsoft\Windows\CurrentVersion"
*--聲明Windows API 函數
DECLARE INTEGER GetProfileString IN Win32API AS GetProStr ;
String cSection, String cKey, String cDefault, ;
String @cBuffer, Integer nBufferSize
*-- 聲明注冊表函數
DECLARE Integer RegOpenKeyEx IN Win32API ;
Integer nKey, String @cSubKey, Integer nReserved,;
Integer nAccessMask, Integer @nResult
DECLARE Integer RegQueryValueEx IN Win32API ;
Integer nKey, String cValueName, Integer nReserved,;
Integer @nType, String @cBuffer, Integer @nBufferSize
DECLARE Integer RegCloseKey IN Win32API ;
Integer nKey
*-- 初始化DLL調用變量
OutBuffer = SPACE(128)
STORE 0 TO Reserved, Result, Type
BufferSize = LEN(OutBuffer)
STORE "" TO OutUser, OutCompany
*-- 通過VFP的OS()函數判定當前操作系統類型
DO CASE
CASE UPPER(OS()) = "WINDOWS 4"
*-- 系統為Windows 95 以上版本
Error = RegOpenKeyEx(MACHINE_ID, VER_PATH, ;
Reserved, 1, @Result)
IF Error = 0
Type = 0
OutBuffer = SPACE(128)
BufferSize = LEN(OutBuffer)
Error = RegQueryValueEx(Result, "RegisteredOwner", Reserved, ;
@Type, @OutBuffer, @BufferSize)
IF Error = 0 AND OutBuffer <> CHR(0)
OutUser = LEFT(OutBuffer, BufferSize - 1)
ENDIF
Type = 0
OutBuffer = SPACE(128)
BufferSize = LEN(OutBuffer)
Error = RegQueryValueEx(Result, "RegisteredOrganization", Reserved, ;
@Type, @OutBuffer, @BufferSize)
IF Error = 0 AND OutBuffer <> CHR(0)
OutCompany = LEFT(OutBuffer, BufferSize - 1)
ENDIF
ENDIF
=RegCloseKey(Result)
CASE UPPER(OS()) = "WINDOWS NT"
*-- 系統為Windows NT
Error = RegOpenKeyEx(MACHINE_ID, KEY_SHARED_TOOLS_LOCATION, ;
Reserved, 1, @Result)
IF Error = 0
Type = 0
OutBuffer = SPACE(128)
BufferSize = LEN(OutBuffer)
Error = RegQueryValueEx(Result, "RegisteredOwner", Reserved, ;
@Type, @OutBuffer, @BufferSize)
IF Error = 0 AND OutBuffer <> CHR(0)
OutUser = LEFT(OutBuffer, BufferSize - 1)
ENDIF
Type = 0
OutBuffer = SPACE(128)
BufferSize = LEN(OutBuffer)
Error = RegQueryValueEx(Result, "RegisteredOrganization", Reserved, ;
@Type, @OutBuffer, @BufferSize)
IF Error = 0 AND OutBuffer <> CHR(0)
OutCompany = LEFT(OutBuffer, BufferSize - 1)
ENDIF
ENDIF
=RegCloseKey(Result)
OTHERWISE
*-- 系統為Windows 3.X 版本
OutRetVal = GetProStr("MS USER INFO", "DEFNAME", "", @OutBuffer, BufferSize)
OutUser = LEFT(OutBuffer, OutRetVal)
OutRetVal = GetProStr("MS USER INFO", "DEFCOMPANY", "", @OutBuffer,BufferSize)
OutCompany = LEFT(OutBuffer, OutRetVal)
ENDCASE
If Error = 0
=MessageBox("用戶:" + OutUser + Chr(13) + "單位:" + OutCompany)
Else
=MessageBox("未找到用戶及單位。")
Endif
【在VFP中獲取Windows注冊信息的方法】相關文章:
論小數教學中培養學生獲取和處理信息的能力08-07
從失誤中獲取機遇的國旗下講話08-24
[國旗下講話]從失誤中獲取機遇08-17
從失誤中獲取機遇國旗下講話07-20
信息技術教學中的問題及改進方法08-07
在信息課中嘗試“任務驅動”教學方法08-07