关于net use * /d这个命令(200分)

  • 主题发起人 主题发起人 shlgz
  • 开始时间 开始时间
S

shlgz

Unregistered / Unconfirmed
GUEST, unregistred user!
请问各位高手,如何用delphi写一个程序相当于net use * /d这个命令?请各位多多帮手
 
看WNet开头的函数,先列举,然后用WNetCancelConnection2断开连接
 
用WinExec不行吗?
 
用如下, 可斷開指定的
//不管是否有文件打开,断开网络驱动器X:
WNetCancelConnection2
( X:, CONNECT_UPDATE_PROFILE, True);

你再編個小函數, 檢查對應的有几個是映射網絡的就可!!
 
先列举出你要断开的驱动器号,然后用wnetcancelconnection2函数可以断开指定的网络驱动器。
 
AvailableDrives :dword;

AvailableDrives := GetLogicalDrives;

for i:= 0 to 25 do

if GetBit(AvailableDrives,i+1)=1 then//如果驱动器存在

begin

DrivePath:=Char(Ord('A')+i)+':;

case GetDriveType(pchar(DrivePath)) of

DRIVE_FIXED :....//如果是硬盘

DRIVE_DRIVE_REMOTE: ...//映射網絡驅動盤!!.

end;

這個找到 映射網絡驅動盤 再用上面的 斷開聯接
 
var
NetSource : TNetResource;
begin
with NetSource do
begin
dwType := RESOURCETYPE_DISK;
lpLocalName :='z:/';
lpRemoteName :='//win2000/share';
lpProvider := '';
end;
if WnetAddConnection2(NetSource,'abcd', 'abcd', 0)=NO_ERROR
then
showmessage('映射成功!');
else
showmessage('映射失败!');
end;
 
应该是列举连接而不是列举驱动器!
 
net use * /d 的功能是將取消所有 映射到本地的驅動器啊!
 
2 Aiirii,
net use * /d 是断开所有连接的共享资源,包括映射到本地的驱动器的,也包括没有映射的.
所以这里要用WNet中的列举函数列出已经连接的共享资源
 
对不起,让大家误解了,我是用WnetAddConnection2增加网络盘(F:),但是我想不重新启动系统,用另外一个用户登录,当然网络盘(F:)的东西也跟着改变,就好象novell client一样,
 
原来根本就不需要列举啊
不过我很奇怪你知道WnetAddConnection2却不知道WNetCancelConnection2[:)][:D][8D]
 
to weiwei81123
我是用WNetCancelConnection2断开网络盘(F:),但如果用户user1进入后运行了他在F:的盘文件,user2在进入网络时则产生故障,即不能WnetAddConnection2再次生成User2的F:
 
我试了没问题
是不是你没有强制断开?
 
完整的网络资源枚举函数:
可以根据需要选择资源类型,稍加改动即可生成网络资源树。
function EnumerateNetRes(ParentRes: PNetResource; NetResList: TStrings):boolean;
type
PNetResourceArray = ^TNetResourceArray;
TNetResourceArray = array[0..MaxInt div SizeOf(TNetResource) - 1] of TNetResource;
var
NetResources: PNetResourceArray;
NetResource: TNetResource;
NetHandle: THandle;
Count, BufSize, NetResult, Size, i: DWORD;
NeedEnum: boolean;
tName: string;
begin
Result := false;

NetResult := WNetOpenEnum( RESOURCE_GLOBALNET, // all network resource
RESOURCETYPE_ANY, // all resource
0, // enumerate all resource
ParentRes, //
NetHandle); // handle to the resource
if NetResult <> NO_ERROR then
exit;

try
BufSize := 50 * SizeOf(TNetResource);
GetMem(NetResources, BufSize);
try
repeat
Count := $FFFFFFFF;
Size := BufSize;
// 取网络资源
NetResult := WNetEnumResource(NetHandle,
Count, // define locally
NetResources, //
Size); //获取网络类型信息
if NetResult = ERROR_MORE_DATA then
begin
BufSize := Size;
ReallocMem(NetResources, BufSize);
Continue;
end;

if NetResult <> NO_ERROR then Exit;

NeedEnum := true;
for I := 0 to Count - 1 do
begin
with NetResources do
begin
case dwDisplayType of
1: tName := '工作组';
2: tName := '计算机';
3: if dwType = 2 then
tName := '打印机'
else
tName := '文件夹';
6: tName := '全局';
else
tName := '未知资源';
end;

NetResList.Add( tName + ':' + lpRemoteName);
end;

application.ProcessMessages;

if NeedEnum and ((NetResources.dwUsage and RESOURCEUSAGE_CONTAINER) = RESOURCEUSAGE_CONTAINER) then
begin
NetResource := NetResources;
// 搜索下一级资源
EnumerateNetRes( PNetResource(@NetResource), NetResList );
end;
end;
until NetResult <> ERROR_NO_MORE_ITEMS;
finally
FreeMem(NetResources, BufSize);
end;
finally
WNetCloseEnum(NetHandle);
end;

Result := true;
end;

向ListBox添加网络资源的例子。
procedure TForm1.Button2Click(Sender: TObject);
begin
ListBox1.Items.Clear;
EnumerateNetRes( nil, ListBox1.Items );
ListBox1.Items.Add('--End of net browsing--');
end;
 
对不起最近比较忙,谢谢各位!
 
后退
顶部