首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 調用 WinAPI:GetUserName 取得目前登入使用者名稱

     編輯:Delphi

三種緩衝區策略完整示範

GetUserName 可取得目前執行緒安全性內容的使用者名稱。關鍵在於緩衝區大小的處理:先呼叫一次取得所需大小,再配置記憶體,最後正式取值。本文提供三種寫法:固定陣列、GetMem/FreeMem、StrAlloc/StrDispose。

函數宣告

function GetUserName(lpBuffer: PChar; var nSize: DWORD): BOOL; stdcall;

寫法一:固定大小陣列 (最簡單)

var
  arr: array[0..254] of Char;
  d: DWORD;
begin
  d := SizeOf(arr);
  GetUserName(arr, d);
  ShowMessage(arr); // 例如 'wy'
end;

寫法二:動態配置 (GetMem/FreeMem)

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;

寫法三:StrAlloc/StrDispose (Delphi 風格)

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 2000 以上最大使用者名稱長度為 256 字元 (含終止符)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved