請問各位先進,如何在Delphi中List出localhost下有哪些Share Folder |
尚未結案
|
geliswu
一般會員 發表:28 回覆:15 積分:13 註冊:2004-10-06 發送簡訊給我 |
各位先進您好
由於網站上之前所討問過的問題在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 發送簡訊給我 |
|
geliswu
一般會員 發表:28 回覆:15 積分:13 註冊:2004-10-06 發送簡訊給我 |
謝謝各位先進,我找到方法啦~~
昨天就一直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;
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |