function GetUserResource(IpAddr: string; var List: TStringList): Boolean;
type
TNetResourceArray = ^TNetResource;//網路型別的陣列
Var
i: Integer;
Buf: Pointer;
Temp: TNetResourceArray;
lphEnum: THandle;
NetResource: TNetResource;
Count,BufSize,Res: DWord;
Begin
Result := False;
List.Clear;
if copy(Ipaddr,0,2) <> '\\' then
IpAddr := '\\'+IpAddr; //填充Ip地址資訊
FillChar(NetResource, SizeOf(NetResource), 0);//初始化網路層次資訊
NetResource.lpRemoteName := @IpAddr[1];//指定計算機名稱
//獲取指定計算機的網路資源句柄
Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_ANY,
RESOURCEUSAGE_CONNECTABLE, @NetResource,lphEnum);
Buf:=nil;
if Res <> NO_ERROR then exit;//執行失敗
while True do//列舉指定作業組的網路資源
begin
Count := $FFFFFFFF;//不限資源數目
BufSize := 8192;//緩沖區大小設定為8K
GetMem(Buf, BufSize);//申請記憶體,用于獲取作業組資訊
//獲取指定計算機的網路資源名稱
Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
if Res = ERROR_NO_MORE_ITEMS then break;//資源列舉完畢
if (Res <> NO_ERROR) then Exit;//執行失敗
Temp := TNetResourceArray(Buf);
for i := 0 to Count - 1 do
begin
//獲取指定計算機中的共享資源名稱,+2表示洗掉"\\",
//如//192.168.0.1 => 192.168.0.1
List.Add(Temp^.lpRemoteName + 2);
Inc(Temp);
end;
end;
Res := WNetCloseEnum(lphEnum);//關閉一次列舉
if Res <> NO_ERROR then exit;//執行失敗
Result := True;
FreeMem(Buf);
End;
獲取終端用戶共享盤:
IpAddr:='\\tsclient';
Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_ANY,
RESOURCEUSAGE_CONNECTABLE, @NetResource,lphEnum);
在win10(win2016)環境下,Res回傳1707.(1707 0x000006AB 網路地址無效)
但是在win2003和win2008環境下都正常.(Res回傳0)
這個問題如何解決?各位大俠給點建議,謝啦.
uj5u.com熱心網友回復:
1017錯誤是網路地址無效。版本不一樣,結果不一樣了。應該修改代碼的。uj5u.com熱心網友回復:
怎么個改法?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/46092.html
