如何获取其他域中用户名字。通过编程实现。急急!!!

解决方案 »

  1.   

    你说的应该是工作名吧.
    你用下面的GetGroup()能获得局域网中的工作组名,不知是不是你要的域名.OnSelchangedTreeNetcomputer(..)是一个树控件的SELCHANGE事件,
    你参考
    and 
    GetStartComputer(..);
    //------------------------Get all group
    void CInternet::GetGroup()
    {
    HANDLE hEnum;
    DWORD dwResult,dwResultEnum;
    DWORD cbBuffer=16384;
    DWORD cEntries=-1; LPNETRESOURCE  lpnrLocal;
    DWORD i=0;
    CString str; try
    {
    //------------------------------------------First
    dwResult=WNetOpenEnum(RESOURCE_GLOBALNET,
    RESOURCETYPE_ANY,
    0,
    0,
    &hEnum
    ); if(dwResult != NO_ERROR)
    throw; lpnrLocal=(LPNETRESOURCE)GlobalAlloc(GPTR,cbBuffer);
    ZeroMemory(lpnrLocal,cbBuffer);

    dwResultEnum=WNetEnumResource(hEnum,
    &cEntries,
    lpnrLocal,
    &cbBuffer
    );
    if(dwResultEnum != NO_ERROR)
    throw; WNetCloseEnum(hEnum);
    //------------------------------------------
    //------------------------------------------Second 
    dwResult=WNetOpenEnum(RESOURCE_GLOBALNET,
    RESOURCETYPE_ANY,
    0,
    lpnrLocal,
    &hEnum
    ); if(dwResult != NO_ERROR)
    throw; ZeroMemory(lpnrLocal,cbBuffer);
    cEntries=-1; dwResultEnum=WNetEnumResource(hEnum,
    &cEntries,
    lpnrLocal,
    &cbBuffer
    );
    if(dwResultEnum != NO_ERROR)
    throw; if(m_treeNetComputer.GetCount()>0)
    m_treeNetComputer.DeleteAllItems(); HTREEITEM hParent=TVI_ROOT; for(i=0;i<cEntries;i++)
    {
    m_treeNetComputer.InsertItem(lpnrLocal[i].lpRemoteName,
    0,
    0,
    hParent
    );
    } //------------------------------------------
    GlobalFree((HGLOBAL)lpnrLocal); dwResult=WNetCloseEnum(hEnum);
    if(dwResult != NO_ERROR)
    throw;
    }//try
    catch(...)
    {
    MessageBox("ERROR");
    return;
    }}
    //------------------------//----------------------------------Add 2003-08-17
    void CInternet::GetStartComputer(HTREEITEM itemGroup)
    {
    HANDLE hEnum;
    DWORD dwResult,dwResultEnum;
    DWORD cbBuffer=16384;
    DWORD cEntries=-1; LPNETRESOURCE  lpnrLocal;
    DWORD i=0; //InsertItem tree.
    CString str;
    char buf[MAX_PATH]; NETRESOURCE ns;
    ns.dwScope=RESOURCE_GLOBALNET;
    ns.dwType=RESOURCETYPE_ANY;
    ns.dwDisplayType=RESOURCEDISPLAYTYPE_DOMAIN;
    ns.dwUsage=RESOURCEUSAGE_CONTAINER;
    ns.lpLocalName=NULL;
    //ns.lpRemoteName=buf;
    ns.lpProvider=NULL;
    ns.lpComment=NULL; HTREEITEM nAppend=itemGroup; CString itemText; //tree
    CString comName; //Computer name; if (m_treeNetComputer)
    {
    try
    {
    //-----------------------------------LOOP 
    itemText=m_treeNetComputer.GetItemText(itemGroup);
    sprintf(buf,"%s",itemText); ns.lpRemoteName=buf; dwResult=WNetOpenEnum(RESOURCE_GLOBALNET,
    RESOURCETYPE_ANY,
    0,
    &ns,
    &hEnum
    ); if(dwResult != NO_ERROR)
    throw; lpnrLocal=(LPNETRESOURCE)GlobalAlloc(GPTR,cbBuffer);
    ZeroMemory(lpnrLocal,cbBuffer); dwResultEnum=WNetEnumResource(hEnum,
    &cEntries,
    lpnrLocal,
    &cbBuffer
    );

    if(dwResultEnum != NO_ERROR)
    throw;

    //-----------------------------------InsertItem tree
    for(i=0;i< cEntries;i++)
    {
    comName=lpnrLocal[i].lpRemoteName;
    m_treeNetComputer.InsertItem(LPCTSTR(comName),1,1,nAppend); }//for i
    //-----------------------------------
    GlobalFree((HGLOBAL)lpnrLocal); dwResult=WNetCloseEnum(hEnum);
    if(dwResult != NO_ERROR)
    throw; }//try catch(...)
    {
    MessageBox("ERROR");
    return;
    }//catch }//if m_treeNetComputer.GetCount>0}
    //-----------------------------------//------------------------------------------------------Add 2003-08-17
    BOOL CInternet::GetPCNameByIP(CString strIP, CString& strPCName)
    {
    HOSTENT *pHe;
    unsigned long addr;
    WORD wVersionRequested; WSADATA wsaData;
    int err;
     
    wVersionRequested = MAKEWORD( 2, 2 );
     
    err = WSAStartup( wVersionRequested, &wsaData );
    if ( err != NO_ERROR ) 
    return FALSE; addr=inet_addr(strIP);
    if (pHe=gethostbyaddr((char*)&addr,4,AF_INET))
    {
    strPCName.Format("%s",pHe->h_name);
    return TRUE;
    }
    else
    return FALSE;
    }BOOL CInternet::GetIPByPCName(CString strPCName, CString &strIP)
    {
    HOSTENT *pHe;
    struct in_addr in;
    WORD wVersionRequested; WSADATA wsaData;
    int err;
     
    wVersionRequested = MAKEWORD( 2, 2 );
     
    err = WSAStartup( wVersionRequested, &wsaData );
    if ( err != NO_ERROR ) 
    return FALSE; if (pHe=gethostbyname(strPCName))
    {
    in.S_un.S_addr=*((unsigned long*)pHe->h_addr_list[0]); char* buf=inet_ntoa(in);
    strIP.Format("%s",buf);
    return TRUE;
    }
    else
    return FALSE;
    }
    //-----------------------------------------------------------------void CInternet::OnSelchangedTreeNetcomputer(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
    // TODO: Add your control notification handler code here HTREEITEM selItem;
    HTREEITEM nParent;
    CString selItemText; selItem=m_treeNetComputer.GetSelectedItem(); if (selItem)
    {
    nParent=m_treeNetComputer.GetParentItem(selItem);
    //-------------------------------------------//Group
    if(!nParent)
    {
    BOOL bHaveChild=m_treeNetComputer.ItemHasChildren(selItem);
    if (!bHaveChild)
    GetStartComputer(selItem);

    m_treeNetComputer.Expand(selItem,TVE_EXPAND); //Add 2003-08-17 return;
    }
    //-------------------------------------------//Computer
    nParent=m_treeNetComputer.GetParentItem(nParent);
    if (!nParent)
    {
    selItemText=m_treeNetComputer.GetItemText(selItem);
    int hFind;
    hFind=selItemText.Find("\\",0);
    while(hFind>=0)
    {
    selItemText=selItemText.Mid(hFind+1);
    hFind=selItemText.Find("\\",0);
    }
    //-------------------------Get IP Address by PCName
    CString strPCName=selItemText;
    CString strIP;
    BOOL bResult=GetIPByPCName(strPCName,(CString&)strIP); if(bResult)
    {
    m_host_pcName=strPCName;
    //m_host_ip=strIP;
    m_ctrlIP.SetWindowText(strIP);
    UpdateData(FALSE);
    }
    //-------------------------------------------------

    }//if selItem
    }//if *pResult = 0;
    }
      

  2.   


    我说的是这样的:      假如我在域A中,在网络中有一个不B域, 并且A,B同属一个forest域, 现在我想得到B域中的所以用户名,以及Group。     应该怎样办?怎样用程序实现?A,B域是 信任域 和 非信任域两种情况时 ,处理的情况一样吗?
    谢谢!!
    急恢复!!!