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