Windows API 學習:GetUserName 獲取當前用戶名
函數原型
BOOL GetUserName(
LPTSTR lpBuffer, // 接收用戶名的緩衝區
LPDWORD pcbBuffer // 緩衝區大小(輸入/輸出)
);
- 成功返回非零,失敗返回 0(調用
GetLastError() 獲取錯誤碼)。
pcbBuffer 輸入時為緩衝區字符容量,輸出時為實際寫入字符數(含結束符)。
- 需包含
<windows.h>,鏈接 Advapi32.lib(通常默認已鏈接)。
完整示例(GUI 版)
#include
#include
#define INFO_BUFFER_SIZE 32767
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow) {
TCHAR infoBuf[INFO_BUFFER_SIZE];
DWORD bufCharCount = INFO_BUFFER_SIZE;
if (!GetUserName(infoBuf, &bufCharCount)) {
MessageBox(NULL, TEXT("無法獲得用戶名"), TEXT("錯誤"), MB_ICONSTOP | MB_OK);
} else {
char msg[INFO_BUFFER_SIZE];
sprintf(msg, "歡迎使用本程序,當前用戶名為:\r\n%s", infoBuf);
MessageBox(NULL, TEXT(msg), TEXT("MSG"), MB_OK);
}
return 0;
}
控制台版簡化示例
#include
#include
int main() {
TCHAR name[256];
DWORD size = 256;
if (GetUserName(name, &size)) {
_tprintf(TEXT("Current User: %s\n"), name);
} else {
printf("Error: %lu\n", GetLastError());
}
return 0;
}
相關 API 擴展
| API | 功能 |
GetUserNameEx | 獲取更多格式名(DNS、UPN、SamCompatible 等) |
GetComputerName | 獲取計算機名 |
GetEnvironmentVariable | 獲取環境變數(如 USERNAME、USERDOMAIN) |
NetUserGetInfo | 獲取用戶詳細信息(需管理員權限、Netapi32.lib) |
總結
GetUserName 是 Windows 獲取當前登錄用戶名的最簡單 API。注意緩衝區大小傳遞方式(輸入輸出參數)、TCHAR 適配 Unicode/ANSI 構建、錯誤碼檢查。GUI 程序配合 MessageBox 可快速驗證效果。
- 上一篇文章: LeetCode 147. 對鏈表進行插入排序:四指針原地插入實現
- 下一篇文章: C 語言實現通用棧:動態擴容、類型參數化與完整接口設計
Copyright ©
程式碼之家 All Rights Reserved