Frage bezüglich Netzwerksuche
-
So nachdem ihr mir ja gestern erfolgreich geholfen habt die Suche auf die Beine zu stellen..Jetzt muss ich die Suche für Netzwerk umsetzen
void suche(AnsiString pfad, std::ofstream & ofs ) { Form2->Caption=pfad; TSearchRec sr; pfad += "\\"; if (FindFirst(pfad + "*", faAnyFile, sr) == 0) { do { if ((sr.Name != ".")&&(sr.Name != "..")) { if (sr.Attr == faDirectory) { suche(pfad+sr.Name, ofs); } else { ofs << ( pfad + sr.Name ).c_str() << std::endl; } } } while (FindNext(sr) == 0); FindClose(sr); } } void __fastcall TForm2::Button1Click(TObject *Sender) { std::ofstream ofs("lokal.txt"); suche(Edit1->Text, ofs); }meine Suche bis jetzt...
Aber wie bekomme ich es jetzt hin das ganze fürs gesamte Netzwerk umzusetzen..so das nach dem Klick das gesamte Netzwerk durchlaufen wird??
Soll auch ohne Edit Eingabe sein..soll gleich nach dem Start durchlaufen.Und für jeden Rechner eine eigene .txt Datei erstellen die alle daten mit pfad darin speichert..
Ich weiss nich ob ich das jemals hin bekomme...
Ich hoffe ihr könnt mir helfen..
Dankeschön
-
softkuecki schrieb:
Ich weiss nich ob ich das jemals hin bekomme...
Ich denke nicht.
-
danke..
deswegen frag ich ja hier..
hat niemand eine Idee?
-
Hallo softkuecki,
ja es gibt leider Menschen die sich über den Kummer anderer auch noch lustig machen.
So wirklich habe ich auch keinen Plan in der Tasche, aber ich denke wenn man es schaft die Rechnernamen im Netzwerk zu finden und aufzulisten ist man einen Schritt weiter. Lies doch bitte mal in dem nach stehhenden Link ob dir das weiter hilft.
http://www.c-plusplus.net/forum/viewtopic-var-t-is-10352-and-highlight-is-netzwerk+suche.htmlViel Erfolg
evi48
-
Ich fürchte, da mußt Du die WinAPI bemühen. Schau Dir mal GetLogicalDrives / GetLogicalDriveStrings und GetNetworkDrivesList an.
-
Habe noch was in FAQ's gefunden mit Beispiel zum Thema "Netzwerk - Namen aller Rechner im lokalen Netzwerk anzeigen"
http://www.c-plusplus.net/forum/viewtopic.php?t=39179
evi48
-
ich habe es als Pascal:
procedure SucheDomains(ComboBox : TComboBox); type PMyRec = ^MyRec; MyRec = record dwScope : Integer; dwType : Integer; dwDisplayType : Integer; dwUsage : Integer; LocalName : string; RemoteName : string; Comment : string; Provider : string; end; PnetResourceArr = ^TNetResource; var NetResource : TNetResource; TempRec : PMyRec; Buf : Pointer; Count, BufSize, Res : DWORD; lphEnum : THandle; p : PNetResourceArr; i, j : SmallInt; NetworkTypeList : TList; begin ComboBox.Items.BeginUpdate; ComboBox.Clear; NetworkTypeList := TList.Create; GetMem(Buf, 8192); try Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, Nil, lphEnum); If Res <> 0 Then Raise Exception(Res); Count := $FFFFFFFF; BufSize := 8192; Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize); If Res = ERROR_NO_MORE_ITEMS Then Exit; If (Res <> 0) Then Raise Exception(Res); P := PNetResourceArr(Buf); For i := 0 To Count - 1 do begin New(TempRec); TempRec^.dwScope := P^.dwScope; TempRec^.dwType := P^.dwType; TempRec^.dwDisplayType := P^.dwDisplayType; TempRec^.dwUsage := P^.dwUsage; TempRec^.LocalName := StrPas(P^.lpLocalName); TempRec^.RemoteName := StrPas(P^.lpRemoteName); TempRec^.Comment := StrPas(P^.lpComment); TempRec^.Provider := StrPas(P^.lpProvider); NetworkTypeList.Add(TempRec); Inc(P); End; Res := WNetCloseEnum(lphEnum); If Res <> 0 Then Raise Exception(Res); for j := 0 to NetworkTypeList.Count - 1 do begin TempRec := NetworkTypeList.Items[J]; NetResource := TNetResource(TempRec^); Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum); If Res <> 0 Then Raise Exception(Res); While true do begin Count := $FFFFFFFF; BufSize := 8192; Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize); If Res = ERROR_NO_MORE_ITEMS Then Break; If (Res <> 0) Then Raise Exception(Res); P := PNetResourceArr(Buf); For i := 0 To Count - 1 do begin ComboBox.Items.Add(P^.lpRemoteName); Inc(P); End; End; End; Res := WNetCloseEnum(lphEnum); If Res <> 0 Then Raise Exception(Res); finally FreeMem(Buf); NetworkTypeList.Destroy; end; If ComboBox.Items.Count > 0 then ComboBox.ItemIndex := 0; ComboBox.Items.EndUpdate; end; procedure SucheComputer(Domain : string; ListBox : TListBox); type PnetResourceArr = ^TNetResource; Var NetResource : TNetResource; Buf : Pointer; Count,BufSize,Res : DWord; Ind : Integer; lphEnum : THandle; Temp : PNetResourceArr; Begin //ListBox.Items.BeginUpdate; try screen.Cursor := crHourGlass; ListBox.Clear; GetMem(Buf,8192); Try FillChar(NetResource, SizeOf(NetResource), 0); NetResource.lpRemoteName := PChar(Domain); NetResource.dwDisplayType := RESOURCEDISPLAYTYPE_SERVER; NetResource.dwUsage := RESOURCEUSAGE_CONTAINER; NetResource.dwScope := RESOURCETYPE_DISK; Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum); If Res <> 0 Then Exit; While True Do Begin Count := $FFFFFFFF; BufSize := 8192; Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize); If Res = ERROR_NO_MORE_ITEMS Then Exit; If (Res <> 0) then Exit; Temp := PNetResourceArr(Buf); For Ind := 0 to Count - 1 do Begin ListBox.Items.Add(Temp^.lpRemoteName + 2); Inc(Temp); End; End; Res := WNetCloseEnum(lphEnum); If Res <> 0 Then Raise Exception(Res); Finally FreeMem(Buf); End; finally screen.Cursor := crDefault; end; //ListBox.Items.EndUpdate; End; function NetzLaufwerkVerbinden(Laufwerk, Pfad, UserName, Password: string): DWORD; var nRes: TNetResource; errCode: DWORD; dwFlags: DWORD; begin FillChar(NRes, SizeOf(NRes), #0); nRes.dwType := RESOURCETYPE_DISK; nRes.lpLocalName := PChar(Laufwerk); nRes.lpRemoteName := PChar(Pfad); nRes.lpProvider := ''; dwFlags := CONNECT_INTERACTIVE; errCode := WNetAddConnection3(Form1.Handle, nRes, pchar(Password), pchar(Username), dwFlags); {if (errCode <> NO_ERROR) and (_showError) then begin form1.re1.Lines.Add(SysErrorMessage(GetLastError)); end;} Result := errCode; end; procedure NetzLaufwerkTrennen(Laufwerk : string); begin WNetCancelConnection2(pchar(Laufwerk),CONNECT_UPDATE_PROFILE,True); end; procedure SucheFreieLaufwerke(ComboBox : TComboBox); var i, typ : Integer; begin ComboBox.Items.BeginUpdate; ComboBox.Clear; for i := 0 To 25 do begin typ := GetDriveType(PChar(Chr(i + 65) + ':\')); If Typ = 1 Then ComboBox.Items.Add(Chr(i + 65)); end; If ComboBox.Items.Count > 0 then ComboBox.ItemIndex := 0; ComboBox.Items.EndUpdate; end;aber könntet ihr es mir in c++ übersetzen??
Es ist das vollständige Programm wie ich es brauche..
Ich muss zuerst die Domain und dann die Rechner auf den Domains ausfinden..
-
Hallo,
Da gibt es auch noch diese Links.
Laufwerke verbinden
http://www.bytesandmore.de/rad/cpp/snipp/sc08001.php
Laufwerke suchen
http://www.bytesandmore.de/rad/cpp/snipp/sc08020.php
Vielleicht ist das in den vorigen Links schon enthalten, aber ich poste sie trotzdem nochmal. Im zweiten Link ist auch ein Downlaod für den BCB dabei.Ciao