概述
隨著系統安全性的加強,每個系統里越來越多不同的帳號登錄。假如你正在開發一個上網安全軟體,讓不同的用戶有不同的上網許可權,這樣就需要識別當前的用戶是什麼帳號登錄了,然後再作出許可權分配。還有出錯時,也需要對當前帳號進行記錄下來,因為不同的帳號有不同的許可權,有些磁碟是不允許操作的。面對這些需求,就需要使用函式GetUserName。
聲明
VB聲明
Declare Function GetUserName Lib "advapi32.dll " Alias "GetUserNameA " (ByVal lpBuffer As String, nSize As Long) As Long
定義
GetUserName(
lpBuffer: PChar; {緩衝區}
var nSize: DWORD {緩衝區大小}
): BOOL;
WINADVAPI BOOL WINAPI GetUserNameA (
__out_ecount_part(*pcbBuffer, *pcbBuffer) LPSTR lpBuffer,
__inout LPDWORD pcbBuffer
);
#ifdef UNICODE
#define GetUserName GetUserNameW
#else
#define GetUserName GetUserNameA
#endif // !UNICODE
說明
取得當前用戶的名字
返回值
Long,TRUE(非零)表示成功,否則返回零。會設定GetLastError
參數表
參數 類型及說明
lpBuffer String,一個字串緩衝區,預先初始化成由nSize指定的長度。它將用於容納用戶名,是獲取名稱緩衝區。
nSize Long,初始化成lpBuffer的長度。返回以後,它會包含載入lpBuffer的字元數量 ,是緩衝區的大小和返回帳號的大小。
註解
1、lpBuffer和nSize需要賦初值。
2、庫名:advapi32.dll
3、分類:硬體與系統函式
4、Long,TRUE(非零)表示成功,否則返回零。會設定GetLastErrorlpBuffer(String),一個字串緩衝區,預先初始化成由nSize指定的長度。它將用於容納用戶名
nSize Long,初始化成lpBuffer的長度。返回以後,它會包含載入lpBuffer的字元數量
例子
Dim s$, cnt&, dl&
cnt& = 199
s$ = String$(200,0)
dl& = GetUserName(s$, cnt)
Debug.Print Left$(s$, cnt); cnt
例一:
var
arr: array[0..254] of Char;
d: DWORD;
begin
d := SizeOf(arr);
GetUserName(arr, d);
ShowMessage(arr); {wy}
end;
例二:
var
p: PChar;
num: DWORD;
begin
num := 0;
GetUserName(nil, num);
ShowMessage(IntToStr(num));
GetMem(p, num);
GetUserName(p, num);
ShowMessage(p); {wy}
FreeMem(p);
end;
例三:
var
p: PChar;
num: DWORD;
begin
num := 0;
GetUserName(nil, num);
p := StrAlloc(num);
if GetUserName(p,num) then
ShowMessage(p) {wy}
else ShowMessage(‘無‘);
StrDispose(p);
end;
例四:如何獲得當前Windows登錄的用戶名?
Private Sub Form_Load()
Dim s As String,cnt As Long ,dl As Long,CurUser As String cnt = 199
s = String$(200, 0)
dl = GetUserName(s, cnt)
Debug.Print(dl <> 0,"當前用戶=" & Left$(s,cnt),"當前用戶=")
End Sub