Нет, ну я писал для себя что-то вроде этого. Но в данном случае опять же библиотеки от джедаев. Хоотя вроде где-то был и свой вариант именно для этих целей. Пороюсь. Пока так:
Код:
unit Connect;
interface
uses Windows, SysUtils, jwaWinNetWK, jwaLMUse, jwaLMAPIBuf, jwaLMUseFlg, Classes;
type
TInfo = array[0..0] of _USE_INFO_0;
PInfo = ^TInfo;
TConData = record
RemoteName: string;
LocalName: string;
end;
type
TConnections = class(TObject)
destructor Destroy; override;
private
// FPath: WideString;
FNetRes: NETRESOURCE;
FdwStatus: cardinal;
FMachineName: PWideChar;
FUserName: PWideChar;
FPassword: PWideChar;
FErrorCode: cardinal;
FCount: cardinal;
FErrorString: string;
FConArray: array of TConData;
FForce: boolean;
function GetMachineName: string;
function GetCon(n: integer): TConData;
procedure SetMachineName(aName: string);
public
procedure EnumConnections;
property MachineName: string read GetMachineName write SetMachineName;
property Count: cardinal read FCount;
property ErrorCode: cardinal read FErrorCode;
property ErrorString: string read FErrorString;
property Connections [aIndex: integer]: TConData read GetCon;
property Force: boolean read FForce write FForce;
procedure DeleteConnect(LocalName, RemoteName: WideString);
end;
implementation
{ TConnections }
procedure TConnections.DeleteConnect(LocalName, RemoteName: WideString);
var
Force: DWORD;
Err: DWORD;
begin
FErrorCode := NO_ERROR;
if FForce then Force := USE_LOTS_OF_FORCE
else Force := USE_NOFORCE;
if LocalName = '' then Err := NetUseDel(nil, PWideChar(RemoteName), Force)
else Err := WNetCancelConnection(PWideChar(LocalName), FForce);
if Err <> NO_ERROR then
begin
FErrorCode := Err;
FErrorString := SysErrorMessage(FErrorCode);
end;
end;
destructor TConnections.Destroy;
begin
SetLength(FConArray, 0);
inherited;
end;
procedure TConnections.EnumConnections;
var
Count: cardinal;
TotalCount: cardinal;
Buf: PByte;
i: integer;
begin
FdwStatus := NetUseEnum(nil,
0,
Buf,
255,
@Count,
@TotalCount,
nil);
if Count = 0 then Exit;
SetLength(FConArray, Count);
FCount := Count;
for i := 0 to Count - 1 do
begin
FConArray[i].RemoteName := PInfo(Buf)^[i].ui0_remote;
FConArray[i].LocalName := PInfo(Buf)^[i].ui0_local;
end;
end;
function TConnections.GetCon(n: integer): TConData;
begin
Result := FConArray[n];
end;
function TConnections.GetMachineName: string;
begin
Result := FMachineName;
end;
procedure TConnections.SetMachineName(aName: string);
begin
FMachineName := PWideChar(aName);
end;
end.