如何模拟输入用户名、密码来访问网络邻居
基本原理
在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;
问题:【求助】局域网中如何通过网络共享实现文件传输? ( 积分:50, 回复:7, 阅读:146 )
分类:数据库-C/S型 ( 版主:qince, luyear )
来自:秋伊水, 时间:2003-4-23 21:34:00, ID:1796728 [显示:小字体 | 大字体]
局域网服务器上面有共享目录share用户aaa可以通过网络共享在share中添加文件,如何
用delphi实现向服务器share目录上传文件!
假定aaa用户的帐户和密码都是aaa
来自:秋伊水, 时间:2003-4-23 22:00:00, ID:1796785
uses shellapi;
copyfile(pchar('newfile.txt'),pchar('//computername/direction/targer.txt'),false);
这个好像可以我刚才试过了!不过如果网络共享要登陆怎么写啊????
来自:stuwei, 时间:2003-4-23 22:03:00, ID:1796790
参考WNetAddConnection函数
来自:秋伊水, 时间:2003-4-23 22:06:00, ID:1796794
能具体举个例子吗?谢谢了!!!
来自:秋伊水, 时间:2003-4-24 10:48:00, ID:1797735
ding
来自:shiningplus, 时间:2003-4-24 12:35:00, ID:1798311
WinExec(
PChar(Format('net use//%s/ipc$ "%s" /user: "%s" ',
[Edtserver.Text,
EdtPassword.Text,
EdtUserName.Text])),
0
);
COPY文件的问题
问题:COPY文件的问题 ( 积分:100, 回复:11, 阅读:229 )
分类:Windows API ( 版主:amo, cAkk )
来自:折翅飞翔, 时间:2003-2-11 12:21:00, ID:1615211 [显示:小字体 | 大字体]
我想用DELPHI做一个COPY文件的程序,程序要求从指定的机器中COPY某几个文件到另一台机器中,程序运行在一台有双网卡的机器上,利用网卡A到A机器COPY文件,再利用本机网卡B,COPY到B机器中,每次间隔由手工制定,程序可以自动计算出每分钟COPY的速度。
>请教的问题:1、怎样实现COPY功能?
> 2、计算每分钟COPY的速度怎样实现?
> 3、如果某个网卡连接的机器出现网络堵塞(1分钟不能COPY成功),能及时报警,请问怎样判断是那块网卡出现的堵塞?
来自:张无忌, 时间:2003-2-11 12:23:00, ID:1615214
1,2很容易用CopyFileEx()
3,就麻烦了,知道哪个网卡出问题太麻烦,如果真要知道,那就自己
用SOCKET写个简单的程序,就可以解决以上3个问题
来自:lcl_003, 时间:2003-2-11 12:27:00, ID:1615220
前几天刚好写了个互相考文件的东西
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:='关闭';
来自:折翅飞翔, 时间:2003-2-11 12:38:00, ID:1615235
请问CopyFileEx()怎样使用呀?怎样COPY,怎样计算COPY速度?
来自:张无忌, 时间:2003-2-11 12:38:00, ID:1615238
你不会看看帮助,DELPHI的WIN32 SDK帮助里就有
来自:唐佐平, 时间:2003-2-11 13:31:00, ID:1615380
关注!
来自:折翅飞翔, 时间:2003-2-12 12:26:00, ID:1617328
我查了一下CopyFileEx()好象都是BCB中使用的没有在DELPHI中使用过呀
来自:copy_paste, 时间:2003-2-12 12:48:00, ID:1617362
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;
来自:春意, 时间:2003-2-12 13:23:00, ID:1617433
s: String;
begin
s := 'c:/ycy.exe';
copyfile(pchar(Application.ExeName),pchar(s),true);
ShowMessage('成功');
end;
来自:折翅飞翔, 时间:2003-2-12 13:31:00, ID:1617456
to :春意
你的这个文件COPY到什么地方去了?
来自:lvxq, 时间:2003-2-13 13:09:00, ID:1619332
利用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 ;
如果文件尺寸大,你就可以发现这个时间差了,当然你可以用更精确的计时
甚至比较到底有没有写成功,。。。。应该能判断你的要求。
来源:oschina
链接:https://my.oschina.net/u/582827/blog/204798