如何获取网络邻居中的机器名?

解决方案 »

  1.   

    WINSHELLAPI HRESULT WINAPI SHGetSpecialFolderLocation(
        HWND hwndOwner,
        int nFolder,
        LPITEMIDLIST *ppidl
    );
    nFolder := CSIDL_NETWORK
    用这个可以得到一个对话框
      

  2.   

    uses ShlObj;function  TfrmWizard.BrowseForComputer(const winhandle : THANDLE; const title : string) : string;
    var
      BrowseInfo  :  TBrowseInfo;
      IDRoot      :  PItemIDList;
      Path        :  array[0..MAX_PATH]  of  Char;
    begin
         SHGetSpecialFolderLocation(winHandle,  CSIDL_NETWORK,  IDRoot);
         ZeroMemory(@BrowseInfo,  SizeOf(TBrowseInfo));
         ZeroMemory(@path,  MAX_PATH);
         BrowseInfo.hwndOwner  :=  winhandle;
         BrowseInfo.pidlRoot  :=  IDRoot;
         BrowseInfo.lpszTitle  :=  PChar(title);
         BrowseInfo.pszDisplayName  :=  @path;
         BrowseInfo.ulFlags  :=  BIF_BROWSEFORCOMPUTER;
         SHBrowseForFolder(BrowseInfo);
         result := strpas(path);
    end;
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      command:string ;
      comline: pchar ;
    begin
      command:='COMMAND.COM /C net view>c: ~~.txt';
      comline:=pchar(command);
      WinExec(comline, sw_hide);
      timer1.Enabled:=true;
    end;
    //每秒试一次
    procedure TForm1.Timer1Timer(Sender: TObject);
    var
      f:tstringlist;
      ll,ii:integer;
      s1,s:string;
      b:bool;
    begin
      f:=tstringlist.Create;
      try
      f.LoadFromFile('c: ~~.txt');
      except
      end;
      if f.Count>10 then
      begin
        memo1.Clear;
        memo1.lines.add(f.text);
        timer1.Enabled:=false;
        f.Free;
        //去掉多余的行和'\'
        for ll:=memo1.lines.count-1 downto 0 do
        begin
          if strpos(pchar(memo1.lines.strings[ll]),'\')=nil then
            memo1.lines.delete(ll)
          else
            memo1.lines.Strings[ll]:=delspace(memo1.lines.Strings[ll]);
        end;
      timer1.enabled:=False;
    end;