基
本
原
理
---- 在 Windows 环 境 下, 应 用 程 序 使 用 Windows 网 络 函 数( WNet ) 来 实 现 网 络 功 能
而 不 用 关 心 网 络 的 供 应 商 及 具 体 实 现, 因 为 WNet 函 数 是 独 立 于 网 络 的。
----Wnet 函 数 主 要 有: WnetAddConnection , WnetAddConnection2 , WnetAddConnection3 ,
WnetCancelConnection2 等。 本 文 主 要 用 WnetAddConnection2 , WnetCancelConnection2 函 数。
----WNetAddConnection2 在 Windows.pas 中 的 函 数 原 型 如 下:
----function WNetAddConnection2(var lpNetResource: TNetResource;lpPassword, lpUserName:
----PChar; dwFlags: DWORD): DWORD; stdcall;
---- 为 调 用 此 函 数, 必 须 填 写 lpNetResouce 结 构, 此 结 构 的 定 义 为:
typedef struct _NETRESOUCE{
DWORD dwScope;
DWORD dwType;
DWORD dwDisplayType;
DWORD dwUsage;
LPTSTR lpLocalName;
LPTSR lpRemoteName;
LPTSr lpProvider;
} NETRESOURCE;
---- 这 里 使 用 dwType,lpLocalName,lpRemoteName,lpProvider 几 个 参 数。 其 含 义 如 下:
----dwType : 用 于 指 定 网 络 的 资 源 类 型, 有 以 下 RESOURCETYPE_ANY( 任 何 资 源 ),
RESOURCETYPE_DISK( 磁 盘 资 源 ) , RESOURCETYPE_PRINT ( 打 印 机 资 源)。
----lpLocalName : 指 定 本 地 设 备。
----lpRemoteName : 指 定 远 程 网 络 名。
----lpProvider : 指 定 提 供 网 络 资 源 的 供 应 商。 如 为 空, 则 表 示 供 应 商 未 知。
----WNetAddConnection2 函 数 的 lpPassword 为 远 程 资 源 的 口 令。
----lpUserName 为 远 程 资 源 的 用 户 名。 dwFlags 标 志 位 用 于 指 定 登 录 时 是 否
重 新 连 接( 0 时 表 示 不 重 新 连 接, CCONNECT_UPDATE_PROFILE 表 示 登 录 时 重 新 连 接)。
----WnetCancelConnection2 在 Windows .pas 中 的 函 数 原 型 如 下:
----function WNetCancelConnection2(lpName: PChar; dwFlags: DWORD; fForce: BOOL):DWORD; stdcall;
----lpName : 要 断 开 的 远 程 网 络 资 源 或 本 地 重 定 向 驱 动 器。
----dwFlags : 含 义 同 上。
----fForce : True 表 示 不 管 是 否 有 文 件 打 开, 强 制 性 断 开 网 络 驱 动 器;
False 表 示 如 有 文 件 打 开 则 函 数 运 行 失 败。
实 例
---- 在 Delphi 的 File 菜 单 下 选 择 New Application , 在 Form1 上 放 置 一 个 Button ,
在 Button1 的 Click 事 件 中 键 入 如 下 代 码:
procedure TForm1.Button1Click(Sender : TObject);
var
NetSource : TNetResource;
begin
with NetSource do
begin
dwType := RESOURCETYPE_ANY;
lpLocalName := ‘X:';
// 将 远 程 资 源 映 射 到 此 驱 动 器
lpRemoteName := ‘//hqServer/sys';
// 远 程 网 络 资 源
lpProvider := ‘';
// 必 须 赋 值 ,
如 为 空 则 使 用 lpRemoteName 的 值。
end;
WnetAddConnection2(NetSource,‘Password',‘Guest',
// 用 户 名 为 Guest , 口 令 为 Password
CONNECT_UPDATE_PROFILE);
// 下 次 登 录 时 重 新 连 接
// 此 时 在 Windows 资 源 管 理 器 中
可 看 到 网 络 驱 动 器 X :
if MessageDlg(‘Are you sure to disconnect Drive ?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes
then
// 不 管 是 否 有 文 件 打 开,
断 开 网 络 驱 动 器 X :
WNetCancelConnection2( ‘X:', CONNECT_UPDATE_
PROFILE, True);
end;
end;
============================================================================================
---- 在 Windows 环 境 下, 应 用 程 序 使 用 Windows 网 络 函 数( WNet ) 来 实 现 网 络 功 能
而 不 用 关 心 网 络 的 供 应 商 及 具 体 实 现, 因 为 WNet 函 数 是 独 立 于 网 络 的。
----Wnet 函 数 主 要 有: WnetAddConnection , WnetAddConnection2 , WnetAddConnection3 ,
WnetCancelConnection2 等。 本 文 主 要 用 WnetAddConnection2 , WnetCancelConnection2 函 数。
----WNetAddConnection2 在 Windows.pas 中 的 函 数 原 型 如 下:
----function WNetAddConnection2(var lpNetResource: TNetResource;lpPassword, lpUserName:
----PChar; dwFlags: DWORD): DWORD; stdcall;
---- 为 调 用 此 函 数, 必 须 填 写 lpNetResouce 结 构, 此 结 构 的 定 义 为:
typedef struct _NETRESOUCE{
DWORD dwScope;
DWORD dwType;
DWORD dwDisplayType;
DWORD dwUsage;
LPTSTR lpLocalName;
LPTSR lpRemoteName;
LPTSr lpProvider;
} NETRESOURCE;
---- 这 里 使 用 dwType,lpLocalName,lpRemoteName,lpProvider 几 个 参 数。 其 含 义 如 下:
----dwType : 用 于 指 定 网 络 的 资 源 类 型, 有 以 下 RESOURCETYPE_ANY( 任 何 资 源 ),
RESOURCETYPE_DISK( 磁 盘 资 源 ) , RESOURCETYPE_PRINT ( 打 印 机 资 源)。
----lpLocalName : 指 定 本 地 设 备。
----lpRemoteName : 指 定 远 程 网 络 名。
----lpProvider : 指 定 提 供 网 络 资 源 的 供 应 商。 如 为 空, 则 表 示 供 应 商 未 知。
----WNetAddConnection2 函 数 的 lpPassword 为 远 程 资 源 的 口 令。
----lpUserName 为 远 程 资 源 的 用 户 名。 dwFlags 标 志 位 用 于 指 定 登 录 时 是 否
重 新 连 接( 0 时 表 示 不 重 新 连 接, CCONNECT_UPDATE_PROFILE 表 示 登 录 时 重 新 连 接)。
----WnetCancelConnection2 在 Windows .pas 中 的 函 数 原 型 如 下:
----function WNetCancelConnection2(lpName: PChar; dwFlags: DWORD; fForce: BOOL):DWORD; stdcall;
----lpName : 要 断 开 的 远 程 网 络 资 源 或 本 地 重 定 向 驱 动 器。
----dwFlags : 含 义 同 上。
----fForce : True 表 示 不 管 是 否 有 文 件 打 开, 强 制 性 断 开 网 络 驱 动 器;
False 表 示 如 有 文 件 打 开 则 函 数 运 行 失 败。
实 例
---- 在 Delphi 的 File 菜 单 下 选 择 New Application , 在 Form1 上 放 置 一 个 Button ,
在 Button1 的 Click 事 件 中 键 入 如 下 代 码:
procedure TForm1.Button1Click(Sender : TObject);
var
NetSource : TNetResource;
begin
with NetSource do
begin
dwType := RESOURCETYPE_ANY;
lpLocalName := ‘X:';
// 将 远 程 资 源 映 射 到 此 驱 动 器
lpRemoteName := ‘//hqServer/sys';
// 远 程 网 络 资 源
lpProvider := ‘';
// 必 须 赋 值 ,
如 为 空 则 使 用 lpRemoteName 的 值。
end;
WnetAddConnection2(NetSource,‘Password',‘Guest',
// 用 户 名 为 Guest , 口 令 为 Password
CONNECT_UPDATE_PROFILE);
// 下 次 登 录 时 重 新 连 接
// 此 时 在 Windows 资 源 管 理 器 中
可 看 到 网 络 驱 动 器 X :
if MessageDlg(‘Are you sure to disconnect Drive ?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes
then
// 不 管 是 否 有 文 件 打 开,
断 开 网 络 驱 动 器 X :
WNetCancelConnection2( ‘X:', CONNECT_UPDATE_
PROFILE, True);
end;
end;
============================================================================================
localname:本地磁盘号 如:Y: Z:
remotename: 共享路径 如 ://server/share
username : 用户名
password: 密码
function connectserver(localname: string; remotename: string; username: string; password: string): boolean;
var
NetSource: TNetResource; Errinfo: longint;
begin
with NetSource do begin
dwType := RESOURCETYPE_ANY; //RESOURCETYPE_DISK
lpLocalName := pchar(localname);
// 将远程资源映射到此驱动器
lpRemoteName := pchar(remotename);
// 远程网络资 源
lpProvider := '';
// 必须赋值,如为空则使用lpRemoteName 的值。
end;
ErrInfo := WnetAddConnection2(NetSource, pchar(password), pchar(username), 0);
result := (ErrInfo = NO_ERROR);
end;
[
显示:
小字体
|
大字体
]
| |
局域网服务器上面有共享目录
share
用户
aaa
可以通过网络共享在
share
中添加文件
,
如何
用 delphi 实现向服务器 share 目录上传文件 ! 假定 aaa 用户的帐户和密码都是 aaa
uses shellapi;
copyfile(pchar('newfile.txt'),pchar('//computername/direction/targer.txt'),false); 这个好像可以我刚才试过了 ! 不过如果网络共享要登陆怎么写啊 ????
参考
WNetAddConnection
函数
能具体举个例子吗
?
谢谢了
!!!
ding
WinExec(
PChar(Format('net use//%s/ipc$ "%s" /user: "%s" ', [Edtserver.Text, EdtPassword.Text, EdtUserName.Text])), 0 ); |
COPY文件的问题
[
显示:
小字体
|
大字体
]
| |
我想用
DELPHI
做一个
COPY
文件的程序,程序要求从指定的机器中
COPY
某几个文件到另一台机器中,程序运行在一台有双网卡的机器上,利用网卡
A
到
A
机器
COPY
文件,再利用本机网卡
B
,
COPY
到
B
机器中,每次间隔由手工制定,程序可以自动计算出每分钟
COPY
的速度。
> 请教的问题: 1 、怎样实现 COPY 功能? > 2 、计算每分钟 COPY 的速度怎样实现? > 3 、如果某个网卡连接的机器出现网络堵塞( 1 分钟不能 COPY 成功),能及时报警,请问怎样判断是那块网卡出现的堵塞?
1,2
很容易用
CopyFileEx()
3, 就麻烦了,知道哪个网卡出问题太麻烦,如果真要知道,那就自己 用 SOCKET 写个简单的程序,就可以解决以上 3 个问题
前几天刚好写了个互相考文件的东西
WNetAddConnection('//192.168.0.60/chan','','192.168.0.20'); copyfile(PChar(filepath+'chan/'+sendfile),PChar('//192.168.0.60/chan/'+sendfile),false); label1.Caption:=' 与监控端连接成功! '; button1.Caption:=' 关闭 ';
请问
CopyFileEx()
怎样使用呀?怎样
COPY
,怎样计算
COPY
速度?
你不会看看帮助,
DELPHI
的
WIN32 SDK
帮助里就有
关注!
我查了一下
CopyFileEx()
好象都是
BCB
中使用的没有在
DELPHI
中使用过呀
function CopyProgress(FileSize, Transferred: Int64;
StreamSize, StreamTransferred: Int64; StreamNumber, CallbackReason: DWORD; SourceFile, DestFile: THandle; Data: Pointer): DWORD; stdcall; var Form: TForm1; begin Form := Data; Form.ProgressBar1.Max := FileSize; Form.ProgressBar1.Position := Transferred; Result := PROGRESS_CONTINUE; Application.ProcessMessages; end; procedure TForm1.Button1Click(Sender: TObject); begin CopyFileEx('ExistsFile.ext', 'newFile', @CopyProgress, Self, nil, COPY_FILE_FAIL_IF_EXISTS); end;
s: String;
begin s := 'c:/ycy.exe'; copyfile(pchar(Application.ExeName),pchar(s),true); ShowMessage(' 成功 '); end;
to :
春意
你的这个文件 COPY 到什么地方去了?
利用
copyfile
命令我想控制会麻烦一点吧,尤其在时间计算方面。在
许多时候,我觉得用读写文件的方式会比较好 example var buf:array [0..1024*5] of char; // Get 5 K bytes in one time Han1,Han2:Integer; lRead,lRSize,lWrite,lWSize:DWORD; i:Integer; bufSize:DWORD; begin bufSize:=5*1024; Label1.caption:=DateTimeToStr(now); Application.ProcessMessages ; Han1:=FileOpen( 源文件 ,fmOpenRead); if Han1<0 then exit; // 文件打开失败 Han2:=FileCreate( 目标文件 ) ; // 目标文件可以是 //ComputerName/ 共享名 / 路径 / 文件名 if Han2<0 then exit; // 文件创建失败; lRSize:=FileSeek(han1,0,2); // 返回源文件大小 _ 字节数 lWSize:=0; FileSeek(han1,0,0); // 回到文件头,准备读 for i:=1 to (lRsize div bufsize)+1 do begin lRead:=FileRead(han1,buf,bufSize); // 读指定大小的内容 if lRead<1024 then begin lWrite:=FileWrite(Han2,buf,lRead); // 小于指定大小,意味着文件坏,或者到文件尾 lWSize:=lWSize+lRead; // 累计写入的字节数,你可以与源 // 文件大小比较 break; end else begin lWrite:=FileWrite(Han2,buf,bufSize); lWSize:=lWSize+bufSize; end; end; FileClose(Han1); // 关闭源文件 FileClose(Han2); // 关闭目标文件 Label2.caption:=DateTimeToStr(now); Application.ProcessMessages ; 如果文件尺寸大,你就可以发现这个时间差了,当然你可以用更精确的计时 甚至比较到底有没有写成功,。。。。应该能判断你的要求。 上面是一般文件操作方式,怎么样,终生受用吧? 这样的回答,应该满分吧?给 100 ,否则没完 |
如何创建操作系统win2000用户,或者验证用户密码
if WNetAddConnection(pchar('//'+computname),pchar(username),pchar(password))=0 then
showmessage(' 用户名密码正确,连接成功!!! ')
else
showmessage(' 用户名密码不正确,连接失败!!! ')
showmessage(' 用户名密码正确,连接成功!!! ')
else
showmessage(' 用户名密码不正确,连接失败!!! ')
在客户端启动时未登陆2000server域的情况下,如何通过编写delphi程序登陆server访问共享文件夹???
服务器:
2000server
客户端: 98&2000server&2000professionol
在客户端启动时,不登陆 2000server 域,如何在程序启动时进行登陆,使客户端可以访问
server 上的共享目录????
客户端: 98&2000server&2000professionol
在客户端启动时,不登陆 2000server 域,如何在程序启动时进行登陆,使客户端可以访问
server 上的共享目录????
在知道登录用户名与密码情况下
,
若客户端是
win2K
的则好办
,
直接用
winexec
执行
net use //servername " 密码 " :user/" 用户名称 " 应该就可以了 ,
但若是 win9X 系统的 , 则只能用 WNetAddConnection(RemoteName,password,UserName) 的方式
去连接了
net use //servername " 密码 " :user/" 用户名称 " 应该就可以了 ,
但若是 win9X 系统的 , 则只能用 WNetAddConnection(RemoteName,password,UserName) 的方式
去连接了
我也曾有过类似的想法
,
因为经常在关机的时候被提醒
"
有一个用户正在和你连
接 " 到底是哪位君子 , 不得而知 . 所以相做一个监测工具 .
但找遍了 Api 也没找到 .
倒是找到了如何看到自己打开了其它机器的资源 , 并可断开 , 以防别人关机时也被
提示 . 希望有所帮助 ;
顺便说一下 , 实现了通知一下 .
1. 如何看到自己打开了其它机器的资源 :
WNetOpenEnum();
WNetEnumResource();
2. 断开和别人的某个连接 :
WNetCancelConnection();
具体用法看帮助吧 .
接 " 到底是哪位君子 , 不得而知 . 所以相做一个监测工具 .
但找遍了 Api 也没找到 .
倒是找到了如何看到自己打开了其它机器的资源 , 并可断开 , 以防别人关机时也被
提示 . 希望有所帮助 ;
顺便说一下 , 实现了通知一下 .
1. 如何看到自己打开了其它机器的资源 :
WNetOpenEnum();
WNetEnumResource();
2. 断开和别人的某个连接 :
WNetCancelConnection();
具体用法看帮助吧 .
哈
~~
我以前有搞过
,
一个土办法
,
但还挺管用
用批处理让
netstat -n >err 一直工作
在用 Dephi 的定时器,一段时间去处理 Err 文件
有机器连上就有不同的 IP 地址
用批处理让
netstat -n >err 一直工作
在用 Dephi 的定时器,一段时间去处理 Err 文件
有机器连上就有不同的 IP 地址
执行前先映射网络驱动器
wnetaddconnection('//xo1/program file',' 密码 ','H:');
复制文件完毕再断开网络驱动器
wnetcancelconnection('H:',true);
wnetaddconnection('//xo1/program file',' 密码 ','H:');
复制文件完毕再断开网络驱动器
wnetcancelconnection('H:',true);
如何登录网络上计算机
我们可以在
Windows
里用
Net Use //ComputerName
命令后输入密码就可以登录到网络上的计
算机了,请问在程序里怎么实现?谢谢了!
算机了,请问在程序里怎么实现?谢谢了!
WNetAddConnection
WNetAddConnection2
WNetAddConnection3
WNetCancelConnection
WNetCancelConnection2
WNetConnectionDialog
WNetDisconnectDialog
WNetGetConnection
WNetGetUniversalName
WNetAddConnection2
WNetAddConnection3
WNetCancelConnection
WNetCancelConnection2
WNetConnectionDialog
WNetDisconnectDialog
WNetGetConnection
WNetGetUniversalName
怎样实现远程计算机的登录?我不映射他的磁盘。
也就是用
Delphi
建立一个
IPc$
会话。
没搞过
,
一般写这方面的大部分是
C++
的资料
...
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
OpenDialog1: TOpenDialog;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
netresource:Tnetresource;
re:dword;
begin
netresource.dwScope:=RESOURCE_GLOBALNET;
netresource.dwUsage:=RESOURCEUSAGE_CONNECTABLE;
netresource.dwType:=RESOURCETYPE_DISK;
netresource.dwDisplayType:=RESOURCEDISPLAYTYPE_SERVER;
netresource.lpLocalName:='';
netresource.lpRemoteName:='//server_name';
netresource.lpProvider:='';
re:=WNetAddConnection3(
application.Handle,
netresource,
'password',
'username',
CONNECT_UPDATE_PROFILE
);
if re=NO_ERROR then
begin
showmessage('ok');
end
else begin
application.MessageBox(' 无法连接到服务器,请与系统管理员联系 ',' 系统提示 ',mb_ok);
application.Terminate;
end;
end;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
OpenDialog1: TOpenDialog;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
netresource:Tnetresource;
re:dword;
begin
netresource.dwScope:=RESOURCE_GLOBALNET;
netresource.dwUsage:=RESOURCEUSAGE_CONNECTABLE;
netresource.dwType:=RESOURCETYPE_DISK;
netresource.dwDisplayType:=RESOURCEDISPLAYTYPE_SERVER;
netresource.lpLocalName:='';
netresource.lpRemoteName:='//server_name';
netresource.lpProvider:='';
re:=WNetAddConnection3(
application.Handle,
netresource,
'password',
'username',
CONNECT_UPDATE_PROFILE
);
if re=NO_ERROR then
begin
showmessage('ok');
end
else begin
application.MessageBox(' 无法连接到服务器,请与系统管理员联系 ',' 系统提示 ',mb_ok);
application.Terminate;
end;
end;
对不起!我没有测试通过。
我有两个例子,请大家看看:
var
aa:TNetResource;
retval : longint;
begin
aa.dwScope := RESOURCE_CONNECTED;
aa.dwType := RESOURCETYPE_ANY;
aa.lpLocalName := '';
aa.lpRemoteName :=pchar(LabeledEdit1.text);//compname
aa.lpProvider := Nil;
RetVal := WNetAddConnection2(aa,pchar(LabeledEdit3.Text ),pchar(LabeledEdit2.Text ),CONNECT_PROMPT);
// showmessage(inttostr(retval));//LabeledEdit3.Text 为密码, LabeledEdit2.Text 密码
case RetVal of
NO_ERROR:StatusBar1.Panels[0].Text:=' 已连接 ';
ERROR_ACCESS_DENIED : StatusBar1.Panels[0].Text:='ERROR_ACCESS_DENIED';
ERROR_ALREADY_ASSIGNED: StatusBar1.Panels[0].Text:='ERROR_ALREADY_ASSIGNED';
ERROR_BAD_DEV_TYPE: StatusBar1.Panels[0].Text:=' 网络资源类型不匹配 ';
ERROR_BAD_DEVICE: StatusBar1.Panels[0].Text:=' 用户名不正确 ';
ERROR_BAD_NET_NAME:StatusBar1.Panels[0].Text:='ERROR_BAD_NET_NAME';
ERROR_BAD_PROFILE: StatusBar1.Panels[0].Text:='ERROR_BAD_PROFILE';
ERROR_CANNOT_OPEN_PROFILE: StatusBar1.Panels[0].Text:='ERROR_CANNOT_OPEN_PROFILE';
ERROR_DEVICE_ALREADY_REMEMBERED: StatusBar1.Panels[0].Text:='ERROR_DEVICE_ALREADY_REMEMBERED';
ERROR_EXTENDED_ERROR: StatusBar1.Panels[0].Text:='ERROR_EXTENDED_ERROR';
ERROR_INVALID_PASSWORD: StatusBar1.Panels[0].Text:='ERROR_INVALID_PASSWORD';
ERROR_NO_NET_OR_BAD_PATH: StatusBar1.Panels[0].Text:='ERROR_NO_NET_OR_BAD_PATH';
ERROR_NO_NETWORK: StatusBar1.Panels[0].Text:='ERROR_NO_NETWORK';
end;
end;
var ss:integer;
begin
ss:=WNetAddConnection(pchar(LabeledEdit1.Text ),
pchar(LabeledEdit3.Text ),pchar(LabeledEdit2.Text ));// 同上 ,LabeledEdit1.Text 为机器名, LabeledEdit3.Text 为密码, LabeledEdit2.Text 密码
case ss of
NO_ERROR:StatusBar1.Panels[0].Text:=' 已连接 ';
ERROR_ACCESS_DENIED : StatusBar1.Panels[0].Text:='ERROR_ACCESS_DENIED';
ERROR_ALREADY_ASSIGNED: StatusBar1.Panels[0].Text:='ERROR_ALREADY_ASSIGNED';
ERROR_BAD_DEV_TYPE: StatusBar1.Panels[0].Text:=' 网络资源类型不匹配 ';
ERROR_BAD_DEVICE: StatusBar1.Panels[0].Text:=' 用户名不正确 ';
ERROR_BAD_NET_NAME:StatusBar1.Panels[0].Text:='ERROR_BAD_NET_NAME';
ERROR_BAD_PROFILE: StatusBar1.Panels[0].Text:='ERROR_BAD_PROFILE';
ERROR_CANNOT_OPEN_PROFILE: StatusBar1.Panels[0].Text:='ERROR_CANNOT_OPEN_PROFILE';
ERROR_DEVICE_ALREADY_REMEMBERED: StatusBar1.Panels[0].Text:='ERROR_DEVICE_ALREADY_REMEMBERED';
ERROR_EXTENDED_ERROR: StatusBar1.Panels[0].Text:='ERROR_EXTENDED_ERROR';
ERROR_INVALID_PASSWORD: StatusBar1.Panels[0].Text:='ERROR_INVALID_PASSWORD';
ERROR_NO_NET_OR_BAD_PATH: StatusBar1.Panels[0].Text:='ERROR_NO_NET_OR_BAD_PATH';
ERROR_NO_NETWORK: StatusBar1.Panels[0].Text:='ERROR_NO_NETWORK';
end;
end;
我有两个例子,请大家看看:
var
aa:TNetResource;
retval : longint;
begin
aa.dwScope := RESOURCE_CONNECTED;
aa.dwType := RESOURCETYPE_ANY;
aa.lpLocalName := '';
aa.lpRemoteName :=pchar(LabeledEdit1.text);//compname
aa.lpProvider := Nil;
RetVal := WNetAddConnection2(aa,pchar(LabeledEdit3.Text ),pchar(LabeledEdit2.Text ),CONNECT_PROMPT);
// showmessage(inttostr(retval));//LabeledEdit3.Text 为密码, LabeledEdit2.Text 密码
case RetVal of
NO_ERROR:StatusBar1.Panels[0].Text:=' 已连接 ';
ERROR_ACCESS_DENIED : StatusBar1.Panels[0].Text:='ERROR_ACCESS_DENIED';
ERROR_ALREADY_ASSIGNED: StatusBar1.Panels[0].Text:='ERROR_ALREADY_ASSIGNED';
ERROR_BAD_DEV_TYPE: StatusBar1.Panels[0].Text:=' 网络资源类型不匹配 ';
ERROR_BAD_DEVICE: StatusBar1.Panels[0].Text:=' 用户名不正确 ';
ERROR_BAD_NET_NAME:StatusBar1.Panels[0].Text:='ERROR_BAD_NET_NAME';
ERROR_BAD_PROFILE: StatusBar1.Panels[0].Text:='ERROR_BAD_PROFILE';
ERROR_CANNOT_OPEN_PROFILE: StatusBar1.Panels[0].Text:='ERROR_CANNOT_OPEN_PROFILE';
ERROR_DEVICE_ALREADY_REMEMBERED: StatusBar1.Panels[0].Text:='ERROR_DEVICE_ALREADY_REMEMBERED';
ERROR_EXTENDED_ERROR: StatusBar1.Panels[0].Text:='ERROR_EXTENDED_ERROR';
ERROR_INVALID_PASSWORD: StatusBar1.Panels[0].Text:='ERROR_INVALID_PASSWORD';
ERROR_NO_NET_OR_BAD_PATH: StatusBar1.Panels[0].Text:='ERROR_NO_NET_OR_BAD_PATH';
ERROR_NO_NETWORK: StatusBar1.Panels[0].Text:='ERROR_NO_NETWORK';
end;
end;
var ss:integer;
begin
ss:=WNetAddConnection(pchar(LabeledEdit1.Text ),
pchar(LabeledEdit3.Text ),pchar(LabeledEdit2.Text ));// 同上 ,LabeledEdit1.Text 为机器名, LabeledEdit3.Text 为密码, LabeledEdit2.Text 密码
case ss of
NO_ERROR:StatusBar1.Panels[0].Text:=' 已连接 ';
ERROR_ACCESS_DENIED : StatusBar1.Panels[0].Text:='ERROR_ACCESS_DENIED';
ERROR_ALREADY_ASSIGNED: StatusBar1.Panels[0].Text:='ERROR_ALREADY_ASSIGNED';
ERROR_BAD_DEV_TYPE: StatusBar1.Panels[0].Text:=' 网络资源类型不匹配 ';
ERROR_BAD_DEVICE: StatusBar1.Panels[0].Text:=' 用户名不正确 ';
ERROR_BAD_NET_NAME:StatusBar1.Panels[0].Text:='ERROR_BAD_NET_NAME';
ERROR_BAD_PROFILE: StatusBar1.Panels[0].Text:='ERROR_BAD_PROFILE';
ERROR_CANNOT_OPEN_PROFILE: StatusBar1.Panels[0].Text:='ERROR_CANNOT_OPEN_PROFILE';
ERROR_DEVICE_ALREADY_REMEMBERED: StatusBar1.Panels[0].Text:='ERROR_DEVICE_ALREADY_REMEMBERED';
ERROR_EXTENDED_ERROR: StatusBar1.Panels[0].Text:='ERROR_EXTENDED_ERROR';
ERROR_INVALID_PASSWORD: StatusBar1.Panels[0].Text:='ERROR_INVALID_PASSWORD';
ERROR_NO_NET_OR_BAD_PATH: StatusBar1.Panels[0].Text:='ERROR_NO_NET_OR_BAD_PATH';
ERROR_NO_NETWORK: StatusBar1.Panels[0].Text:='ERROR_NO_NETWORK';
end;
end;
我记得
Delphi
自身就带有这方面的例子,
请看一下 Delphi 安装目录下的 Demos 目录。
请看一下 Delphi 安装目录下的 Demos 目录。
var
netresource:Tnetresource;
re:dword;
begin
netresource.dwScope:=RESOURCE_[red]GLOBALNET;[/red]
netresource.dwUsage:=RESOURCEUSAGE_CONNECTABLE;
netresource.dwType:=RESOURCETYPE_[gold]DISK;[/gold]
netresource.dwDisplayType:=RESOURCEDISPLAYTYPE_SERVER;
netresource.lpLocalName:='';
netresource.lpRemoteName:=[blue]'//server_name'[/blue];
netresource.lpProvider:=[purple]''[/purple];
re:=WNetAddConnection3(
application.Handle,
netresource,
[blue]'password'[/blue],
[blue]'username'[/blue],
CONNECT_UPDATE_PROFILE
);
再测试一下吧,我在 WINME 和 2000 下都试过,没有问题!!!!!!!!!!!!
netresource:Tnetresource;
re:dword;
begin
netresource.dwScope:=RESOURCE_[red]GLOBALNET;[/red]
netresource.dwUsage:=RESOURCEUSAGE_CONNECTABLE;
netresource.dwType:=RESOURCETYPE_[gold]DISK;[/gold]
netresource.dwDisplayType:=RESOURCEDISPLAYTYPE_SERVER;
netresource.lpLocalName:='';
netresource.lpRemoteName:=[blue]'//server_name'[/blue];
netresource.lpProvider:=[purple]''[/purple];
re:=WNetAddConnection3(
application.Handle,
netresource,
[blue]'password'[/blue],
[blue]'username'[/blue],
CONNECT_UPDATE_PROFILE
);
再测试一下吧,我在 WINME 和 2000 下都试过,没有问题!!!!!!!!!!!!
局域网上是可以,用猫在
INTERNET
上是不行的,
up
不错
,
我试了一下
,
在
WIN2000
下没有问题
,
其它的我没有试
.
自己解决。
var
aa:TNetResource;
retval : longint;
begin
aa.dwScope := RESOURCE_CONNECTED;
aa.dwType := RESOURCETYPE_ANY;
aa.lpLocalName := '';
aa.lpRemoteName :=pchar('//'+LabeledEdit1.text);//compname
aa.lpProvider := Nil;
RetVal := WNetAddConnection2(aa,pchar(LabeledEdit3.Text ),pchar(LabeledEdit2.Text ),CONNECT_PROMPT);
// showmessage(inttostr(retval));//LabeledEdit3.Text 为密码, LabeledEdit2.Text 密码
case RetVal of
NO_ERROR:StatusBar1.Panels[0].Text:=' 已连接 ';
ERROR_ACCESS_DENIED : StatusBar1.Panels[0].Text:='ERROR_ACCESS_DENIED';
ERROR_ALREADY_ASSIGNED: StatusBar1.Panels[0].Text:='ERROR_ALREADY_ASSIGNED';
ERROR_BAD_DEV_TYPE: StatusBar1.Panels[0].Text:=' 网络资源类型不匹配 ';
ERROR_BAD_DEVICE: StatusBar1.Panels[0].Text:=' 用户名不正确 ';
ERROR_BAD_NET_NAME:StatusBar1.Panels[0].Text:='ERROR_BAD_NET_NAME';
ERROR_BAD_PROFILE: StatusBar1.Panels[0].Text:='ERROR_BAD_PROFILE';
ERROR_CANNOT_OPEN_PROFILE: StatusBar1.Panels[0].Text:='ERROR_CANNOT_OPEN_PROFILE';
ERROR_DEVICE_ALREADY_REMEMBERED: StatusBar1.Panels[0].Text:='ERROR_DEVICE_ALREADY_REMEMBERED';
ERROR_EXTENDED_ERROR: StatusBar1.Panels[0].Text:='ERROR_EXTENDED_ERROR';
ERROR_INVALID_PASSWORD: StatusBar1.Panels[0].Text:='ERROR_INVALID_PASSWORD';
ERROR_NO_NET_OR_BAD_PATH: StatusBar1.Panels[0].Text:='ERROR_NO_NET_OR_BAD_PATH';
ERROR_NO_NETWORK: StatusBar1.Panels[0].Text:='ERROR_NO_NETWORK';
end;
end;
var ss:integer;
begin
ss:=WNetAddConnection('//'+pchar(LabeledEdit1.Text ),
pchar(LabeledEdit3.Text ),pchar(LabeledEdit2.Text ));// 同上 ,LabeledEdit1.Text 为机器名, LabeledEdit3.Text 为密码, LabeledEdit2.Text 密码
case ss of
NO_ERROR:StatusBar1.Panels[0].Text:=' 已连接 ';
ERROR_ACCESS_DENIED : StatusBar1.Panels[0].Text:='ERROR_ACCESS_DENIED';
ERROR_ALREADY_ASSIGNED: StatusBar1.Panels[0].Text:='ERROR_ALREADY_ASSIGNED';
ERROR_BAD_DEV_TYPE: StatusBar1.Panels[0].Text:=' 网络资源类型不匹配 ';
ERROR_BAD_DEVICE: StatusBar1.Panels[0].Text:=' 用户名不正确 ';
ERROR_BAD_NET_NAME:StatusBar1.Panels[0].Text:='ERROR_BAD_NET_NAME';
ERROR_BAD_PROFILE: StatusBar1.Panels[0].Text:='ERROR_BAD_PROFILE';
ERROR_CANNOT_OPEN_PROFILE: StatusBar1.Panels[0].Text:='ERROR_CANNOT_OPEN_PROFILE';
ERROR_DEVICE_ALREADY_REMEMBERED: StatusBar1.Panels[0].Text:='ERROR_DEVICE_ALREADY_REMEMBERED';
ERROR_EXTENDED_ERROR: StatusBar1.Panels[0].Text:='ERROR_EXTENDED_ERROR';
ERROR_INVALID_PASSWORD: StatusBar1.Panels[0].Text:='ERROR_INVALID_PASSWORD';
ERROR_NO_NET_OR_BAD_PATH: StatusBar1.Panels[0].Text:='ERROR_NO_NET_OR_BAD_PATH';
ERROR_NO_NETWORK: StatusBar1.Panels[0].Text:='ERROR_NO_NETWORK';
end;
end;
var
aa:TNetResource;
retval : longint;
begin
aa.dwScope := RESOURCE_CONNECTED;
aa.dwType := RESOURCETYPE_ANY;
aa.lpLocalName := '';
aa.lpRemoteName :=pchar('//'+LabeledEdit1.text);//compname
aa.lpProvider := Nil;
RetVal := WNetAddConnection2(aa,pchar(LabeledEdit3.Text ),pchar(LabeledEdit2.Text ),CONNECT_PROMPT);
// showmessage(inttostr(retval));//LabeledEdit3.Text 为密码, LabeledEdit2.Text 密码
case RetVal of
NO_ERROR:StatusBar1.Panels[0].Text:=' 已连接 ';
ERROR_ACCESS_DENIED : StatusBar1.Panels[0].Text:='ERROR_ACCESS_DENIED';
ERROR_ALREADY_ASSIGNED: StatusBar1.Panels[0].Text:='ERROR_ALREADY_ASSIGNED';
ERROR_BAD_DEV_TYPE: StatusBar1.Panels[0].Text:=' 网络资源类型不匹配 ';
ERROR_BAD_DEVICE: StatusBar1.Panels[0].Text:=' 用户名不正确 ';
ERROR_BAD_NET_NAME:StatusBar1.Panels[0].Text:='ERROR_BAD_NET_NAME';
ERROR_BAD_PROFILE: StatusBar1.Panels[0].Text:='ERROR_BAD_PROFILE';
ERROR_CANNOT_OPEN_PROFILE: StatusBar1.Panels[0].Text:='ERROR_CANNOT_OPEN_PROFILE';
ERROR_DEVICE_ALREADY_REMEMBERED: StatusBar1.Panels[0].Text:='ERROR_DEVICE_ALREADY_REMEMBERED';
ERROR_EXTENDED_ERROR: StatusBar1.Panels[0].Text:='ERROR_EXTENDED_ERROR';
ERROR_INVALID_PASSWORD: StatusBar1.Panels[0].Text:='ERROR_INVALID_PASSWORD';
ERROR_NO_NET_OR_BAD_PATH: StatusBar1.Panels[0].Text:='ERROR_NO_NET_OR_BAD_PATH';
ERROR_NO_NETWORK: StatusBar1.Panels[0].Text:='ERROR_NO_NETWORK';
end;
end;
var ss:integer;
begin
ss:=WNetAddConnection('//'+pchar(LabeledEdit1.Text ),
pchar(LabeledEdit3.Text ),pchar(LabeledEdit2.Text ));// 同上 ,LabeledEdit1.Text 为机器名, LabeledEdit3.Text 为密码, LabeledEdit2.Text 密码
case ss of
NO_ERROR:StatusBar1.Panels[0].Text:=' 已连接 ';
ERROR_ACCESS_DENIED : StatusBar1.Panels[0].Text:='ERROR_ACCESS_DENIED';
ERROR_ALREADY_ASSIGNED: StatusBar1.Panels[0].Text:='ERROR_ALREADY_ASSIGNED';
ERROR_BAD_DEV_TYPE: StatusBar1.Panels[0].Text:=' 网络资源类型不匹配 ';
ERROR_BAD_DEVICE: StatusBar1.Panels[0].Text:=' 用户名不正确 ';
ERROR_BAD_NET_NAME:StatusBar1.Panels[0].Text:='ERROR_BAD_NET_NAME';
ERROR_BAD_PROFILE: StatusBar1.Panels[0].Text:='ERROR_BAD_PROFILE';
ERROR_CANNOT_OPEN_PROFILE: StatusBar1.Panels[0].Text:='ERROR_CANNOT_OPEN_PROFILE';
ERROR_DEVICE_ALREADY_REMEMBERED: StatusBar1.Panels[0].Text:='ERROR_DEVICE_ALREADY_REMEMBERED';
ERROR_EXTENDED_ERROR: StatusBar1.Panels[0].Text:='ERROR_EXTENDED_ERROR';
ERROR_INVALID_PASSWORD: StatusBar1.Panels[0].Text:='ERROR_INVALID_PASSWORD';
ERROR_NO_NET_OR_BAD_PATH: StatusBar1.Panels[0].Text:='ERROR_NO_NET_OR_BAD_PATH';
ERROR_NO_NETWORK: StatusBar1.Panels[0].Text:='ERROR_NO_NETWORK';
end;
end;
用 Delphi 实现网络驱动器的映射和断开