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

Windows API 學習:GetUserName 獲取當前用戶名

     編輯:關於C語言

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 擴展

總結

GetUserName 是 Windows 獲取當前登錄用戶名的最簡單 API。注意緩衝區大小傳遞方式(輸入輸出參數)、TCHAR 適配 Unicode/ANSI 構建、錯誤碼檢查。GUI 程序配合 MessageBox 可快速驗證效果。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
API功能
GetUserNameEx獲取更多格式名(DNS、UPN、SamCompatible 等)
GetComputerName獲取計算機名
GetEnvironmentVariable獲取環境變數(如 USERNAME、USERDOMAIN)
NetUserGetInfo獲取用戶詳細信息(需管理員權限、Netapi32.lib)