p>大家在运用Delphi编写网络应用程序时可能会遇到这样一个问题:在一个由Windows NT和Novell Netware组成的网络环境中,应用程序需要使用Novell网上的某些数据,如果每次都手工在Windows资源管理器中映射,断开网络驱动器,不仅繁琐而且显得不够专业。本文将介绍在Delphi中使用Windows32 API函数解决这一问题。

一、 基本原理

在Microsoft Windows环境下,应用程序使用Windows网络函数(WNet)来实现网络功能而不用关心网络的供应商及具体实现。因为WNet函数是独立于网络的。

Wnet函数主要有:WnetAddConnection , WnetAddConnection2 , WnetAddConnection3 , WnetCancelConnection2等。本文主要用WnetAddConnection2,WnetCancelConnection2函数,下面简单介绍一下,关于WNet函数更详细的资料请参考Delphi的连机文档和Microsoft API函数说。

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;

本程序在Delphi3.0,4.0、PWindows95、Novell Netware 3.12下编译运行通过。

例子二,

当前,delphi的应用愈加广泛,而网络又是未来计算机的发展趋势。本文介绍一个在delphi中如何实现网络驱动器映射的小技巧,源程序如下:

map-network-drive.pas

procedure tform1.button1click(sender:tobject);

var

nr:tnetresource;

begin

with nr do

begin

dwtype:=resourcetype__any;

lplocalname:=`x:'; //map to this driver letter

lpremotename:=`//myserver\mydirectory';

//must be filled in.

lpprovider:=";

end;wnetaddconnection2(nr,`mypassword',`myuername',

connect__update__profile);

end;

python 映射网络驱动器_用Delphi实现网络驱动器的映射和断开相关推荐

  1. python openstack vpc互通_深入浅出新一代云网络——VPC中的那些功能与基于OpenStack Neutron的实现(一)-简述与端口转发...

    VPC的概念与基于vxlan的overlay实现很早就有了,标题中的"新"只是一个和传统网络的相对概念.但从前年开始,不同于以往基础网络架构的新一代SDN网络才真正越来越多的走进国 ...

  2. 树莓派有线网络设置_树莓派的基本网络配置

    树莓派(Raspberry Pi)是如图所示的小电路板,别看它只有卡片大小,但它却能够运行Linux系统,树莓派拥有USB接口,可以连接鼠标键盘,还有HDMI口,可以连接显示器,除此之外,树莓派还提供 ...

  3. 怎样查看计算机网,如何查看电脑(本机)无线网络密钥_查看电脑无线网络密钥的步骤...

    当我们在电脑中那幢无线路由器和无线网卡之后,都会设置无线网络密码,防止蹭网的,但是有时候可能自己设置之后忘记密码了,别人来家里要连接wifi的时候也就无法连接了,那么如何查看电脑(本机)无线网络密钥呢 ...

  4. 网络类型_多种类型的网络钓鱼攻击和诈骗

    点击标题下「蓝色微信名」可快速关注 网络钓鱼攻击每年都会对企业造成重大损失和损害 谷歌和Facebook的损失总计超过1亿美元.比利时克里兰银行向网络犯罪分子交付了超过7500万美元.奥地利航空零部件 ...

  5. python实现流媒体传输_基于OpenCV的网络实时视频流传输的实现

    很多小伙伴都不会在家里或者办公室安装网络摄像头或监视摄像头.但是有时,大家又希望能够随时随地观看视频直播. 大多数人会选择使用IP摄像机(Internet协议摄像机)而不是CCTV(闭路电视),因为它 ...

  6. python获取网络信息_利用psutil获取网络信息

    获取网络总的io信息 [root@bogon python_auto]# vim net.py !/usr/bin/env python import psutil net_information = ...

  7. java 网络驱动器_删除多余的网络驱动器

    *1.查询SQL尽量不要使用select ,而是select具体字段. 反例子: select * from employee; 正例子: select id,name from employee; ...

  8. python四边形转矩形_如何用PIL将矩形图像映射成四边形?

    所以我用一个简单的正向映射来解决这个问题,而不是逆映射,这通常更好,但是在我的应用程序中,我只将矩形映射到比矩形小的四边形,因此通常在变换后的图像中没有孔.代码如下:def reverse_quad_ ...

  9. python openstack vpc互通_深入浅出新一代云网络——VPC中的那些功能与基于OpenStack Neutron的实现(二)-带宽控制...

    在VPC功能实现第一篇中,简单介绍了一下VPC网络对租户间隔离能力的提升以及基于路由提供的一系列网络功能.在这一篇中,将继续介绍VPC网络中十分重要的一个内容:网络带宽的控制,共享以及分离. 首先是对 ...

  10. python 爬题库_高校邦《网络数据采集与Python爬虫【带实验】》免费最全题库

    后人将鸡窗代指书房,指的是自己书房的窗户.( ) 道德作为一种特殊的社会意识形态,归根到底是由经济基础决定的. 下列叙述中哪项与哌拉西林不符 男性,29岁,交通事故,头部外伤,当即昏迷送来医院,检查格 ...

最新文章

  1. CFCC百套计划2 CodeChef December Challenge 2017 Chef And Easy Xor Queries
  2. java try catch_异常处理,JAVA中异常处理的介绍
  3. 【小白学PyTorch】扩展之Tensorflow2.0 | 20 TF2的eager模式与求导
  4. 瞧瞧,这样的『函数』才叫 Pythonic
  5. 开关量光端机产品特点及应用范围介绍
  6. 从Java到Go面向对象--继承思想.md
  7. VPC-阿里云专有网络 Virtual Private Cloud
  8. uitextfield 键盘类型_以编程方式更改UITextField键盘类型
  9. Jersey 2.x JDK 上的客户端应用
  10. 【市场人必备】100份500强企业营销传播方案,小白晋升大神。
  11. Atitit 数据结构与常见文件元数据结构 目录 1. 分类 内部数据结构与外部存储数据结构 1 2. 编程语言内部数据结构 (堆栈 树 图等 1 2.1. 数据结构 (集合,列表,tree,map
  12. matlab怎么学机器人算法,机器人学、机器视觉与控制——MATLAB算法基础
  13. 修改element-ui 下拉框样式
  14. 路由navigate
  15. 利用OA系统进行档案管理原来这么简单?
  16. ubuntu18.04 升级内核后,进入系统页面卡在“started gnome display manager“的解决方案
  17. java 倍数_Java硬币翻转倍数递增试算实例
  18. 三款免费杀毒软件+clamAV
  19. iOS开发者账户密码修改流程
  20. 很不错的免费电影网站中国影视库mdbchina.com

热门文章

  1. ASP.NET+AJAX解决网页打开等待问题
  2. Symbols andSymbol Tables
  3. 3.1~4 处理器架构IA32/x86介绍+IA32架构下汇编基本介绍
  4. 进程切换与线程切换的区别
  5. scala下使用akka计算圆周率pi
  6. 基于Flume的美团日志收集系统
  7. 最近面试有感,不要耍小聪明,面试官都是开了上帝视角的
  8. LiveData源码解析
  9. 持续集成(4)工具对比
  10. poj 1141 Brackets Sequence(线性dp)