Windows API一日一练(72)GetUserName函数


CHAR szUser[80];

DWORD cbUser=80;

getUserName(szUser,&cbUser);

第二个参数cbUser是一个输入输出参数,即它既是输入参数又是输出参数。

首先,它在函数里起的作用是输入参数,作为输入参数,它的作用是告诉函数数组szUser的大小多大,故而cbuser的初始值可以小于80只要不大于数组实际大小即是安全的,虽然大于数组实际大小,函数也不一定使用那么多,所以也不一定出错函数执行时。

最后,它作为一个输出参数时,起的作用是当函数运行好后函数将用户名这个字符串的长度(即szuser实际被使用的大小)保存在参数cbuser中。

=======================================

Windows API一日一练(72)GetUserName函数


随着系统安全性的加强,每个系统里越来越多不同的帐号登录。假如你正在开发一个上网安全软件,让不同的用户有不同的上网权限,这样就需要识别当前的用户是什么帐号登录了,然后再作出权限分配。还有出错时,也需要对当前帐号进行记录下来,因为不同的帐号有不同的权限,有些磁盘是不允许操作的。面对这些需求,就需要使用函数 GetUserName
 
函数 GetUserName 声明如下:
 
WINADVAPI
BOOL
WINAPI
GetUserNameA (
    __out_ecount_part(*pcbBuffer, *pcbBuffer) LPSTR lpBuffer,
    __inout LPDWORD pcbBuffer
    );
WINADVAPI
BOOL
WINAPI
GetUserNameW (
    __out_ecount_part(*pcbBuffer, *pcbBuffer) LPWSTR lpBuffer,
    __inout LPDWORD pcbBuffer
    );
#ifdef UNICODE
#define GetUserName GetUserNameW
#else
#define GetUserName GetUserNameA
#endif // !UNICODE
 
lpBuffer 是获取名称缓冲区。
pcbBuffer 是缓冲区的大小和返回帐号的大小。
 
调用函数的例子如下:
#001 //
#002  // 获取当前登录用户的名称。
#003  // 蔡军生  2007/11/13 QQ:9073204 深圳
#004  void GetUserName(void)
#005  {
#006         //
#007         const int nBufSize = UNLEN + 1;
#008         TCHAR chBuf[nBufSize];
#009         ZeroMemory(chBuf,nBufSize);
#010 
#011         // 获取当前登录用户的名称
#012         DWORD dwRet = nBufSize;
#013        if (::GetUserName(chBuf,&dwRet))
#014         {
#015               //
#016               OutputDebugString(chBuf);                
#017         }
#018         else
#019         {
#020               OutputDebugString(_T(" 获取登录用户名称出错 !"));              
#021         }
#022 
#023         OutputDebugString(_T("/r/n"));
#024 
#025  }
========================

API函数详解:GetUserName函数

Windows API函数 Visual Basic 语法格式声明
Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Windows API函数功能说明
取得当前用户的名字
Windows API函数出口返回值
Long,TRUE(非零)表示成功,否则返回零。会设置GetLastError
Windows API函数入口参数表
Windows API函数入口参数 类型及说明
lpBuffer 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

上页:API函数详解:XFORM函数 下页:API函数详解:AbortPath函数

 

你可能感兴趣的:(Windows API一日一练(72)GetUserName函数)