全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1141
推到 Plurk!
推到 Facebook!

請問各位先進,如何在Delphi中List出localhost下有哪些Share Folder

尚未結案
geliswu
一般會員


發表:28
回覆:15
積分:13
註冊:2004-10-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-06 13:26:49 IP:211.72.xxx.xxx 未訂閱
各位先進您好 由於網站上之前所討問過的問題在NetApi32.dll有提供NetShareAdd()的API 我自己找到的Win32API也沒發現有類似可以列出Local下所有Share出去的Folders的API。 因為我現在急需一個需求,就是在IntraWeb上以Web的方式來管理這台Server尚有哪些資夾是Share出來的,以及share folder底下有哪些檔案可用,都已Web的方式來新增與移除Share Folders,當然新增沒問題用NetShareAdd() API來完成,但是Listing呢,不會要一個目錄一個目錄來Check有沒有Share出來吧??? 不知道有沒有人遇過這個問題 感謝~大家花時間看到這~~ Gelis 酷小毅
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-06 15:08:51 IP:61.222.xxx.xxx 未訂閱
請用 NetShareEnum
geliswu
一般會員


發表:28
回覆:15
積分:13
註冊:2004-10-06

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-08 12:02:05 IP:211.72.xxx.xxx 未訂閱
謝謝各位先進,我找到方法啦~~ 昨天就一直TRY NetShareEnum這個API,不過老實說Win32程式設計玩這麼久了這個API我還真的沒用過(API太多了) 他所需要的Bufptr: Pointer;會塞回一個pointer的Array 需告如下 TShareInfo50 = packed record shi50_netname: array[0..12] of Char; shi50_type: Byte; shi50_flags: Word; shi50_remark: PChar; shi50_path: PChar; shi50_rw_password: array[0..8] of Char; shi50_ro_password: array[0..8] of Char; end; TShareInfo2 = packed record shi2_netname: PWChar; shi2_type: DWORD; shi2_remark: PWChar; shi2_permissions: DWORD; shi2_max_uses: DWORD; shi2_current_uses: DWORD; shi2_path: PWChar; shi2_passwd: PWChar; end; PShareInfo2 = ^TShareInfo2; TShareInfo2Array = array[0..512] of TShareInfo2; PShareInfo2Array = ^TShareInfo2Array; var Form1: TForm1; NetShareEnum: function(pszServer: PChar; sLevel: Cardinal; pbBuffer: PChar; cbBuffer: Cardinal; pcEntriesRead, pcTotalAvail: Pointer): DWORD; stdcall; NetShareEnumNT: function(ServerName: PWChar; Level: DWORD; Bufptr: Pointer; Prefmaxlen: DWORD; EntriesRead, TotalEntries, resume_handle: LPDWORD): DWORD; stdcall; //..略 procedure TForm1.btnGetSharesClick(Sender: TObject); var i: Integer; FLibHandle: THandle; ShareNT: PShareInfo2Array; entriesread, totalentries: DWORD; //<= Windows NT Share: array[0..512] of TShareInfo50; pcEntriesRead, pcTotalAvail: Word; //<= Might OS is Windows 9x-Me OS: Boolean; begin lbxShares.Items.Clear; if not IsNT(OS) then exit; //如果不是NT就結束函式 if OS then begin //OS is NT FLibHandle := LoadLibrary('NETAPI32.DLL'); if FLibHandle = 0 then Exit; // @NetShareEnumNT := GetProcAddress(FLibHandle, 'NetShareEnum'); if not Assigned(NetShareEnumNT) then begin FreeLibrary(FLibHandle); Exit; end; ShareNT := nil; if NetShareEnumNT(nil, 2, @ShareNT, DWORD(-1), @entriesread, @totalentries, nil) <> 0 then begin FreeLibrary(FLibHandle); Exit; end; if entriesread > 0 then //如果數量大於0 begin for i := 0 to entriesread - 1 do lbxShares.Items.Add(string(ShareNT^[i].shi2_netname)); end; end else begin FLibHandle := LoadLibrary('SVRAPI.DLL'); if FLibHandle = 0 then Exit; // @NetShareEnum := GetProcAddress(FLibHandle, 'NetShareEnum'); if not Assigned(NetShareEnum) then begin FreeLibrary(FLibHandle); Exit; end; if NetShareEnum(nil, 50, @Share, SizeOf(Share), @pcEntriesRead, @pcTotalAvail) <> 0 then begin FreeLibrary(FLibHandle); Exit; end; if pcEntriesRead > 0 then for i := 0 to pcEntriesRead - 1 do lbxShares.Items.Add(string(Share[i].shi50_netname)); end; FreeLibrary(FLibHandle); end;
系統時間:2024-06-26 22:06:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!