如何取得Windows中的用户数量,只要数量不需要用户名

解决方案 »

  1.   

    确保已经安装了SDK,并在VC工程中Options对话框里正确地设置SDK中include目录及lib目录所在位置,并链接这两个库ADSIid.Lib activeds.lib。加入下面代码即可在Windows NT/2000 实现你要的功能,对于其它操作系统,可以通过安装相应的Active Directory Client Extension辅助完成此功能。注意1、ADS路径应写成"WinNT://你的机器名或者为域名,computer",具体信息参见
        Platform SDK: Directory Services WinNT Binding String
    注意2、示例程序,部分错误处理未加入。#include "Iads.h"
    #include "Adshlp.h"
    #pragma comment(lib, "ADSIid.Lib") 
    #pragma comment(lib, "activeds.lib") void CTestDlg::OnEnumUser() 
    {
    CoInitialize(NULL);
    HRESULT hr = S_OK;
    VARIANT       varUserArray, varUserSingle;
    ULONG         lFetch = 0;

    IEnumVARIANT *pEnum = NULL;
    IADsContainer *pCont = NULL;

    hr=ADsGetObject(
    L"WinNT://YourComputerName,computer",
    IID_IADsContainer, 
    (void**) &pCont);
    if(FAILED(hr))
            return ;

    //Create a string array of class names as search filters.
    LPWSTR pszUser[] = {L"User"};
    VariantInit(&varUserArray);
    hr = ADsBuildVarArrayStr(
    pszUser, 
    sizeof(pszUser)/sizeof(LPWSTR), 
    &varUserArray);
    if(FAILED(hr))
          return ;

    //Apply filters to objects in the container.
    hr = pCont->put_Filter( varUserArray );
    VariantClear(&varUserArray);
    if(FAILED(hr))
    return ;

    hr = ADsBuildEnumerator(pCont,&pEnum);
    if(FAILED(hr))
    return ;
    pCont->Release();

    int nUserNum = 0;
    while (hr == S_OK) 
    {
        hr = ADsEnumerateNext(pEnum,1, &varUserSingle, &lFetch);
        if (lFetch)
        {
    nUserNum++;
        }
    }//end while
    hr = ADsFreeEnumerator(pEnum);

    CString strUserNum;
    strUserNum.Format("User Number:%d",nUserNum);
    AfxMessageBox(strUserNum);
    CoUninitialize();

    }函数工作环境声明如下:
    Windows NT/2000 or later: Requires Windows 2000 or later (or Windows NT 4.0 SP6a or later with Active Directory Client Extension).
      Windows 95/98/Me: Requires Windows 95/98 (with IE 4.01 or later and Active Directory Client Extension). Not supported on Windows Me.
      Header: Declared in Adshlp.h.
      Library: Use ActiveDS.Lib.