獲取windows當前登入的使用者名稱

2021-08-17 01:17:26 字數 3385 閱讀 2700

1.系統使用者名稱的簡單說明

系統的使用者名稱包括自身的使用者名稱和使用者名稱的全名,常見幾種可以檢視具體資訊的方法如下:

(1)從控制面板訪問:

(2)右鍵計算機的「管理」處訪問

(3)從開始選單訪問

(4)從任務管理器檢視explorer的程序訪問

說明:1)開始選單及桌面上的使用者的資料夾圖示所顯示的名字遵循這樣的原則:

當使用者名稱的全名為空時,顯示的是使用者名稱,但是當使用者名稱的全名不為空時,則顯示使用者名稱的全名(通過修改全名即可驗證),而且有的電腦表面上修改了使用者名稱,

實際上修改的只是全名,這一點可以通過管理的地方進入檢視,或者登出重新登入後,檢視程序的使用者名稱

2)修改使用者名稱和全名後,必須重新登出系統,開始選單上的名字才會生效

2.如何準確的獲取系統登入的使用者名稱

從理論上講獲取系統的使用者名稱即可,但是實際上對於有的電腦,從控制面板更改的使用者名稱,其實並不是使用者名稱,而是全名,這樣更改後,給人感覺使用者名稱已經改了,而且登出後重新登入開始選單上顯示的也是改之後的名字,從而造成誤解,所以,程式中需要根據全名來決定具體顯示什麼名字,即:當使用者名稱的全名為空時,顯示的是使用者名稱,但是當使用者名稱的全名不為空時,則顯示使用者名稱的全名

法1:利用getusername獲取使用者名稱,利用netusergetinfo獲取全名

#include "lm.h"

#pragma comment(lib,"netapi32.lib")

void get_loguser(cstring &strname)

; dword dwsize=max_path;

::getusername(abyusername, &dwsize);

lpuser_info_3 bufptr=null;

net_api_status t3;

t3=netusergetinfo(0,abyusername,3,(lpbyte*)&bufptr);

if ( t3 != nerr_success )

//全名不為空,就使用使用者名稱的全名,為空就使用使用者名稱

cstring strfullname = bufptr->usri3_full_name;

if (strfullname.isempty())

else

netapibufferfree(bufptr);

bufptr = null;

}

法2:獲取explorer.exe的使用者名稱,利用netusergetinfo獲取全名

#include "tlhelp32.h"

#include "lm.h"

#pragma comment(lib,"netapi32.lib")

bool findprocesspid(cstring processname, dword& dwpid)

pe32.dwsize = sizeof(processentry32);

if (!process32first(hprocesssnap, &pe32))

bool bret = false;

do } while (process32next(hprocesssnap, &pe32));

closehandle(hprocesssnap);

return bret;

}

void get_loguser(cstring &strname)

bool fresult = false;

handle hproc = null;

handle htoken = null;

token_user *ptokenuser = null;

// open the process with process_query_information access

hproc = openprocess(process_query_information, false, dwprocessid);

if (hproc == null)

fresult = openprocesstoken(hproc, token_query, &htoken);

if(!fresult)

dword dwneedlen = 0;

fresult = gettokeninformation(htoken,tokenuser, null, 0, &dwneedlen);

if (dwneedlen > 0) }

else

sid_name_use sn;

tchar szdomainname[max_path];

dword dwdmlen = max_path;

wchar wstrname[max_path] = {};

dword nnamelen = max_path;

fresult = lookupaccountsid(null, ptokenuser->user.sid, wstrname, &nnamelen,

szdomainname, &dwdmlen, &sn);

if (hproc)

::closehandle(hproc);

if (htoken)

::closehandle(htoken);

if (ptokenuser)

delete (char*)ptokenuser;

lpuser_info_3 bufptr=null;

net_api_status t3;

t3=netusergetinfo(0,wstrname,3,(lpbyte*)&bufptr);

if ( t3 != nerr_success )

//全名不為空,就使用使用者名稱的全名,為空就使用使用者名稱

cstring strfullname = bufptr->usri3_full_name;

if (strfullname.isempty())

else

netapibufferfree(bufptr);

bufptr = null;

}

服務如何獲取當前登入的windows使用者名稱

如何獲取當前登入的windows使用者名稱?在win7裡,可以有多個explorer同時執行,那通過explorer來獲取當前正在使用的使用者名稱就不準確了,getusername 也不行,應為我這個是服務,wtsquerysessioninformation同時也不適用,許多的系統都不支援,各位還...

用C 獲取當前的路徑

獲取新的 process 元件並將其與當前活動的程序關聯的主模組的完整路徑,包含檔名 程序名 string str system.diagnostics.process.getcurrentprocess mainmodule.filename result x exe exe檔案所在的目錄 exe...

用java 獲取當前系統資訊的

public static void main string args throws exception 1.os.name 作業系統的名稱 2.os.arch 作業系統的架構 3.os.version 作業系統的版本 4.file.separator 檔案分隔符 在 unix 系統中是 5.pat...