005
19.12.2002, 11:25 Uhr
Uli
|
Hallo zusammen,
bin in meinem Problem etwas weiter. Ich habe ein Funktion die mir meine Benachbarten Computer zurück gibt geschrieben. Leider begrenzt diese sich noch auf 17 stück von über 200 aber daran arbeite ich noch. Ich schreibe hier mal den Code falls jemand eine Idee hat.
C++: |
BOOL CComputerDlg::OnInitDialog() { CDialog::OnInitDialog(); Ini.ListeEinlesenProdukteIni(); m_Liste.InsertColumn(0,"Computer Name",LVCFMT_LEFT,150); m_Liste.InsertColumn(1,"Status",LVCFMT_LEFT,100); m_Liste.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_INFOTIP | LVS_EX_GRIDLINES );
CString strTemp; struct hostent *host;
struct in_addr *ptr;
DWORD dwScope = RESOURCE_CONTEXT; NETRESOURCE *NetResource = NULL; HANDLE hEnum; WNetOpenEnum( dwScope,NULL,NULL,NULL,&hEnum); WSADATA wsaData; WSAStartup(MAKEWORD(1,1),&wsaData);
if(hEnum) { DWORD Count = 0xFFFFFFFF; DWORD BufferSize = 2048; LPVOID Buffer = new char[2048]; WNetEnumResource( hEnum, &Count,Buffer, & BufferSize); NetResource= (NETRESOURCE*)Buffer;
char szHostName[200]; unsigned int i,j; j=BufferSize/sizeof(NETRESOURCE); CString Print; Print.Format("%d",j); // MessageBox(Print); for (i=0;i<j;i++,NetResource++) { if( NetResource->dwUsage == RESOURCEUSAGE_CONTAINER && NetResource->dwType == RESOURCETYPE_ANY) { if( NetResource->lpRemoteName ) { CString strFullName = NetResource->lpRemoteName; if( 0==strFullName.Left(2).Compare("\\\\") ) strFullName = strFullName.Right(strFullName.GetLength()-2); gethostname(szHostName, strlen( szHostName)); host= gethostbyname(strFullName);
if( host == NULL) continue; ptr = (struct in_addr *) host->h_addr_list[0]; int a = ptr->S_un.S_un_b.s_b1; int b = ptr->S_un.S_un_b.s_b2; int c = ptr->S_un.S_un_b.s_b3; int d = ptr->S_un.S_un_b.s_b4; strTemp.Format("%s --> %d.%d.%d.%d",strFullName,a,b,c,d); if( Ini.FindInSection("Computer",strFullName) == TRUE) m_listeComputer.AddTail(strFullName); } } } delete Buffer; WNetCloseEnum( hEnum ); } WSACleanup();
NewString=Ini.GetInhaltSection("Computer",""); do { if( NewString==Inf.GetNameOfComputer()) { // NewString ist der eigene Computername } else { if( m_listeComputer.Find(NewString,NULL)!=NULL ) { int i=m_Liste.InsertItem(0,NewString,NULL); m_Liste.SetItemText(i,1,"Aktiv"); } else { int i=m_Liste.InsertItem(0,NewString,NULL); m_Liste.SetItemText(i,1,"Inaktiv"); } } NewString=Ini.GetInhaltSection("Computer",NewString); }while(NewString!=""); return TRUE; }
|
Ich habe zu den Rechner auch die IP-Addr. Auf den Rechnern habe ich auch auf den freigegebenen Festplatte schreibrechte. Jetzt ist nur noch das Kopieren der Dateien unklar.
Habt ihr eine Idee??
Bye Uli |