怎样取得网络中的网络、共享打印机列表!
或者能调《浏览打印机》的对话框出来都可,请帮忙了!

解决方案 »

  1.   

    uses Shellapi, ShlObj;procedure TForm1.Button1Click(Sender: TObject);
    var
      lpItemID : PItemIDList;
      BrowseInfo : TBrowseInfo;
      DisplayName : array[0..MAX_PATH] of char;
      TempPath : array[0..MAX_PATH] of char;
    begin
      FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
      with BrowseInfo do begin
        hwndOwner := Application.Handle;
        pszDisplayName := @DisplayName;
        lpszTitle := PChar('请选择');
        ulFlags := BIF_BROWSEFORPRINTER;
      end;
      lpItemID := SHBrowseForFolder(BrowseInfo);
      if lpItemId <> nil then begin
        SHGetPathFromIDList(lpItemID, TempPath);
        GlobalFreePtr(lpItemID);
        ShowMessage(TempPath);
      end;
    end;
      

  2.   

    我已用其它方法做了一个,不是很理想,因为它如果打印机服务器上没有装驱动程序的话,会要求安装程序。
    if ConnectToPrinterDlg(Form1.WindowHandle,0)<>0 then
    begin
    end;你的那个很好,不过就是pidlRoot没有指定为网络,能不能帮我做一下,谢了!
      

  3.   

    呵呵改了一下:
    uses Shellapi, ShlObj, ActiveX;procedure TForm1.Button1Click(Sender: TObject);
    var
      lpItemID : PItemIDList;
      BrowseInfo : TBrowseInfo;
      DisplayName : array[0..MAX_PATH] of char;
      TempPath : array[0..MAX_PATH] of char;
      pRoot: PItemIDList;
      pMalloc: IMalloc;
    begin
      SHGetMalloc(pMalloc);
      SHGetSpecialFolderLocation(Handle, CSIDL_NETWORK, pRoot);
      FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
      with BrowseInfo do begin
        hwndOwner := Application.Handle;
        pidlRoot := pRoot;
        pszDisplayName := @DisplayName;
        lpszTitle := PChar('请选择');
        ulFlags := BIF_BROWSEFORPRINTER;
      end;
      lpItemID := SHBrowseForFolder(BrowseInfo);
      if lpItemId <> nil then begin
        SHGetPathFromIDList(lpItemID, TempPath);
        GlobalFreePtr(lpItemID);
        ShowMessage(TempPath);
      end;
      if pRoot <> nil then
        pMalloc.Free(pRoot);
    end;