局域网中文件夹的共享WindowsNT/2000/XP

局域网中文件夹的共享 Windows NT/2000/XP

数据挖掘工具

在局域网中通过程序实现文件夹的共享,就我知道的应该至少有两种实现方式。一是修改注册表,但是这种方法存在的问题也是很明显的,必须重起机器才能生效。二就是利用 Windows Api函数 NetShareAdd ,通过这个函数我们可以很容易的实现文件夹的共享,而且无需重起计算机。使用这个函数时我们必须注意的是在 Windows NT/2000/XPWindows 95/98/Me 下用法是有很大差别的,这一点我相信大家都有体会,明明在 95 或 98 下实现好好的,可是一到 NT 下就出问题。

数据挖掘论坛

    其实不光是各位仁兄,我早就提出过这个问题,怎奈一直都没有解决掉。现在好了,希望读完后能给大家一点点帮助。 数据挖掘交友

    Windows 95/98/Me 下 NetShareAdd 函数声明在 SVRAPI.DLL 动态连接库中,而在 2000/XP/NT 下声明在 NETAPI32.DLL 动态连接库中。所以我们在不同的操作系统下一定要注意调用不同的 DLL 库。这些函数详细的声明,在新版 MSDN 2002 中有介绍。由于在Delphi中没有声明这些函数和他们的参数所以我们要想实现这个函数还必须自己声明(可能delphi 有声明我不知道在那个单元中)。顺便说一句,我使用的是 delphi5.0 版,可惜他的帮助文件实在是太陈旧了,还是先看看 MSDN 2002 中关于 NetShareAdd 函数的声明巴!

数据挖掘研究院

Windows NT/2000/XP: 数据挖掘交友

NET_API_STATUS NetShareAdd(  

数据挖掘实验室

  LPWSTR servername, //对应 Delphi 中 PWideChar  
  DWORD level,       //对应 DELPHI 中 DWOED  
  LPBYTE buf,        //对应 DELPHI 中 PBYTE 

数据挖掘工具

  LPDWORD parm_err   // 对应 DELPHI 中 PDWORD  

数据挖掘实验室

); 数据挖掘实验室 

Windows 95/98/Me: 下面的对应参数就不用说了吧!可以直接看看DELPHI帮助文件。

extern API_FUNCTION 

数据挖掘交友

 NetShareAdd( 

数据挖掘工具

  const char FAR * pszServer,        数据挖掘研究院 
  short sLevel,                       
  const char FAR * pbBuffer,          
  unsigned short  cbBuffer           数据挖掘交友 
); 数据挖掘交友 

  数据挖掘论坛

特别强调:

数据挖掘研究院

   我们在声明上面的函数时,函数参数一定要写对,也就是一定要正确对应到DELPHI 自己的类型上。不然函数功能无法实现,这一点我已经尝试了。之所以在NT 下实现不了主要还是,参数类型对应的不对。我们还需要声明一个记录类型,在98/95/me nt/2000/xp下声明如下:

数据挖掘论坛

 

 

  数据挖掘交友

 

数据挖掘工具

  Windows NT/2000/XP:  SHARE_INFO_2 SHARE_INFO_502  结构 数据挖掘实验室

  Windows 95/98/Me:  share_info_50 结构

  对以上这个结构的声明更应该注意参数类型的正确对应。原始声明如下: 数据挖掘研究院

 typedef struct _SHARE_INFO_502 { 数据挖掘交友 

  LPWSTR    shi502_netname; // PWideChar;

  DWORD     shi502_type;    // DWORD; 数据挖掘工具

  LPWSTR    shi502_remark;  // PWideChar;

数据挖掘工具

  DWORD     shi502_permissions; // DWORD;

数据挖掘研究院

  DWORD     shi502_max_uses;    // DWORD; 数据挖掘研究院

  DWORD     shi502_current_uses; //DWORD;

  LPWSTR    shi502_path;        //PWideChar;

数据挖掘研究院

  LPWSTR    shi502_passwd;     // PWideChar;

数据挖掘研究院

  DWORD     shi502_reserved;  // DWORD ;

数据挖掘工具

  // PSECURITY_DESCRIPTOR ;一般设为 Nil 数据挖掘研究院

  PSECURITY_DESCRIPTOR  shi502_security_descriptor;

数据挖掘交友

} SHARE_INFO_502, *PSHARE_INFO_502, *LPSHARE_INFO_502; 数据挖掘交友

  数据挖掘实验室

对应 Delphi 纪录声明如下:一定要注意参数类型的正确对应,如果你把PWideChar 声明为 pchar 函数将无法实现此功能,我已经尝试了,你可以再试试,至于原因是什么,我也不太清楚。 数据挖掘实验室

type 数据挖掘交友

  TSHARE_INFO_502 = record

数据挖掘实验室

    shi502_netname: PWideChar; 数据挖掘交友

    shi502_type: DWORD;

    shi502_remark: PWideChar; 数据挖掘工具

    shi502_permissions: DWORD;

数据挖掘论坛

    shi502_max_uses: DWORD;

    shi502_current_uses: DWORD;

数据挖掘论坛

    shi502_path: PWideChar;

数据挖掘工具

    shi502_passwd: PWideChar; 数据挖掘实验室

    shi502_reserved: DWORD;

    shi502_security_descriptor: PSECURITY_DESCRIPTOR;

  end;

 

下面是完成的程序代码,其中有两部分,主程序和单元文件。运行环境 windows 2000 Ads 开发工具 Delphi5.0 。运行通过。

 

数据挖掘论坛

 

数据挖掘交友

 

 

  数据挖掘交友

 

数据挖掘实验室

 

数据挖掘研究院

 

数据挖掘研究院

unit Share; 数据挖掘工具

  数据挖掘交友

interface

  数据挖掘论坛

uses 数据挖掘实验室

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 数据挖掘工具

  StdCtrls,FileCtrl,My_Share; 数据挖掘研究院

  数据挖掘研究院

type

  TFormShare = class(TForm)

    Label1: TLabel;

数据挖掘研究院

    Label2: TLabel; 数据挖掘论坛

    Label3: TLabel;

    BtSelect: TButton; 数据挖掘论坛

    EditDir: TEdit;//文件共享目录

    EditSharename: TEdit; //共享名称 数据挖掘工具

    EditInfo: TEdit;//备注

数据挖掘研究院

    Button1: TButton;

    Button2: TButton; 数据挖掘交友

    procedure BtSelectClick(Sender: TObject); 数据挖掘工具

    procedure Button1Click(Sender: TObject); 数据挖掘交友

  private

    { Private declarations }

数据挖掘研究院

  public

数据挖掘交友

    { Public declarations }

  end; 数据挖掘交友

 

数据挖掘论坛

var 数据挖掘交友

  FormShare: TFormShare;

  数据挖掘论坛

implementation

数据挖掘论坛

 

{$R *.DFM}

数据挖掘论坛

  数据挖掘工具

procedure TFormShare.BtSelectClick(Sender: TObject);

数据挖掘论坛

var 数据挖掘研究院

  directory: string;

数据挖掘实验室

begin 数据挖掘交友

  if SelectDirectory("选择一个目录",", directory) then

    EditDir.Text := directory;

数据挖掘研究院

end; 数据挖掘工具

  数据挖掘实验室

procedure TFormShare.Button1Click(Sender: TObject); 数据挖掘交友

begin

数据挖掘研究院

  if EditDir.Text = " then

数据挖掘实验室

    begin 数据挖掘论坛

      Application.MessageBox("请先选择一个目录!", "共享", MB_ICONINFORMATION + MB_OK);

数据挖掘研究院

      BtSelect.Click; 数据挖掘实验室

      Exit;

    end; 数据挖掘实验室

  if EditSharename.Text = " then

    begin

数据挖掘论坛

      Application.MessageBox("请先输入共享名称!", "共享", MB_ICONINFORMATION + MB_OK);

      EditSharename.SetFocus; 数据挖掘实验室

      Exit; 数据挖掘交友

    end;

数据挖掘交友

  ShareResource("eengi",EditDir.Text,EditSharename.Text,EditInfo.Text); 数据挖掘实验室

  {注意:如果在共享目录名称后面添加 $ 符号,共享后在网络邻居里看不到此文件夹 数据挖掘论坛

   但实际上已经共享了,你可以在本地看到} 数据挖掘论坛

end;

数据挖掘交友

  数据挖掘实验室

end. 数据挖掘研究院

 

数据挖掘论坛

以下是单元文件:

数据挖掘论坛

 

unit My_Share;

 

数据挖掘实验室

interface 数据挖掘论坛

uses 数据挖掘交友

   Windows,Sysutils ; 数据挖掘实验室

type 数据挖掘实验室

  //纪录类型声明,注意参数类型的正确对应,最好别看 delphi 的帮助,引起误导

  TSHARE_INFO_502 = record 数据挖掘实验室

    shi502_netname: PWideChar; 数据挖掘论坛

    shi502_type: DWORD; 数据挖掘工具

    shi502_remark: PWideChar;

    shi502_permissions: DWORD; 数据挖掘实验室

    shi502_max_uses: DWORD; 数据挖掘工具

    shi502_current_uses: DWORD;

    shi502_path: PWideChar; 数据挖掘研究院

    shi502_passwd: PWideChar; 数据挖掘论坛

    shi502_reserved: DWORD;

    shi502_security_descriptor: PSECURITY_DESCRIPTOR; 数据挖掘研究院

  end;

数据挖掘工具

//添加共享

function NetShareAdd(servername:Widestring; level: DWORD; Buf: PBYTE;

         var parm_err: PDWORD ): DWORD; stdcall;

//删除共享 数据挖掘论坛

function NetShareDel(ServerName:Widestring; NetName: Widestring; 数据挖掘工具

         Reserved: DWord): Integer; StdCall;

数据挖掘交友

const 数据挖掘实验室

  {共享类型} 数据挖掘论坛

  STYPE_DISKTREE = 0 ;

  STYPE_PRINTQ   = 1 ; 数据挖掘实验室

  STYPE_DEVICE   = 2 ;

数据挖掘工具

  STYPE_IPC      = 3 ; 数据挖掘交友

  {访问权限}

数据挖掘论坛

  ACCESS_READ    = 0 ; 数据挖掘交友

  ACCESS_WRITE   = 1 ; 数据挖掘实验室

  ACCESS_CREATE  = 2 ;

  ACCESS_EXEC    = 3 ;

  ACCESS_DELETE  = 4 ;

数据挖掘研究院

  ACCESS_ALL     = 7 ; 数据挖掘研究院

数据挖掘研究院

数据挖掘工具

//自己声明的函数,为了调用方便,参数就不用说明了吧!

数据挖掘论坛

function ShareResource(ServerName,FilePath,NetName, Remark : string): Integer; 数据挖掘论坛

//function DeleteShare(ServerName: string; NetName: string): Integer; 数据挖掘实验室

数据挖掘交友

implementation

数据挖掘工具

//注意在 windows95/98/me 下面 dll 库是 SVRAPI.DLL ,而且参数类型也要随之改变的吆!

function NetShareAdd; external "netapi32.DLL" name "NetShareAdd"; 数据挖掘论坛

function NetShareDel; external "netapi32.DLL" name "NetShareDel"; 数据挖掘研究院

 

数据挖掘研究院

function ShareResource(ServerName,FilePath,NetName, Remark : string): Integer; 数据挖掘实验室

var

  ShInfo: TSHARE_INFO_502; 数据挖掘研究院

  parm_err:PDWORD; 数据挖掘交友

  _FilePath,_NetName, _Remark : PWideChar ; 数据挖掘工具

  _ServerName : Pchar ; 数据挖掘交友

begin 数据挖掘交友

  GetMem(_ServerName,255) ; //分配内存

数据挖掘工具

  GetMem(_FilePath,255); 数据挖掘论坛

  GetMem(_NetName,255);

  GetMem(_Remark,255);

数据挖掘研究院

  StringToWideChar(FilePath,_FilePath,255); //字符串转换,一定要转换正确

  StringToWideChar(NetName,_NetName,255); 数据挖掘研究院

  StringToWideChar(Remark,_Remark,255); 数据挖掘交友

  strpcopy(_ServerName,ServerName);

  //开始创建结构 数据挖掘工具

  with ShInfo do 数据挖掘论坛

  begin

    shi502_netname := _NetName; 数据挖掘交友

    shi502_type := STYPE_DISKTREE ;

数据挖掘研究院

    shi502_remark := _Remark ;

数据挖掘工具

    shi502_max_uses := $FFFFFFFF; 数据挖掘实验室

    shi502_current_uses := 10;

    shi502_path := _FilePath; 数据挖掘交友

    shi502_passwd := nil;

    shi502_reserved := 0; 数据挖掘论坛

    shi502_security_descriptor := nil;

    shi502_permissions := ACCESS_ALL;

  end; 数据挖掘工具

  try 数据挖掘研究院

    Result := NetShareAdd(_ServerName, 502, @ShInfo, parm_err);

数据挖掘论坛

  Finally // 别忘了释放内存 数据挖掘研究院

    FreeMem(_ServerName,255); 数据挖掘论坛

    FreeMem(_FilePath,255); 数据挖掘实验室

    FreeMem(_NetName,255);

数据挖掘论坛

    FreeMem(_Remark,255);

  end; 数据挖掘实验室

end;

数据挖掘交友

 

数据挖掘研究院

end.

数据挖掘研究院

  数据挖掘研究院

总结:

       运行完程序后,相信大家和我有同样的感觉,其实成功就在眼前,就差一点,可是就这一点也很难跨越。程序之所以一直实现不了,恐怕我们都没有考虑参数类型声明是否正确。不过我应该非常感谢csdn 上“绝对菜鸟”的回复。要不是他的程序,恐怕我还在等待中探索。 数据挖掘工具

[数据挖掘专家] [数据挖掘研究院] [数据挖掘论坛] [数据挖掘实验室]
上一篇:WinAPI编程关闭QQ登录窗体
下一篇:Win32调试API学习心得(一)
最新评论共有 0 位网友发表了评论 , 查看所有评论
发表评论( 不能超过250字,需审核,请自觉遵守互联网相关政策法规。 )
匿名?
数据挖掘网站导航 数据挖掘论坛导航
  • 数据挖掘工具
  • 数据挖掘论坛
  • DataCruncher - Cognos
  • MineSet - MathSoft
  • Intelligent Miner - GainSmarts
  • Sqlserver - SAS - Clementine
  • CART - Weka - WizSoft
  • NeuroShell - ModelQuest
  • data mining tools - Darwin
  • 数据挖掘交友
  • 数据挖掘博客
  • 数据挖掘工具
  • 数据挖掘资源
  • 数据挖掘技术算法
  • 数据挖掘相关期刊、会议
  • 研究院联盟合作专区
  • 数据挖掘基础与相关技术
  • 数据挖掘厂商与就业
  • 数据挖掘研究者乐园
  • 知名厂商数据挖掘工具资料
  • 国内数据挖掘实验室
  • Foreign Data Mining Lab
  • 热点关注
  • GDI+简介
  • COM与DCOM的区别与联系
  • 使用Delphi解析XML 文档
  • 如何设置delphi/cbuilder/BDE/MSSQL
  • BORLAND在“迫害”程序员?
  • 将image的图片保存为JPG格式图片方法
  • InstallShieldExpressfordelphi制作安装程
  • Real Programmers Use Pascal
  • 关于在COM中使用可选参数的研究
  • TStrings的AddObject方法应用
  • 论坛最新话题
  • Foundations of Statistical Natural Langu
  • Game Theory meet Data Mining: A Recent P
  • System Building: How does it help or hin
  • 数据挖掘与Clementine培训
  • 新手报到
  • 求 SASEM 客户流失预测分析
  • 数据挖掘工程师/搜索研究院—北京——无线
  • 数据挖掘入门介绍(如何着手数据挖掘)
  • Information Overload Survey Results
  • The INEX 2005 Workshop on Element Retrie
  • 相关资讯
  • BORLAND在“迫害”程序员?
  • 李维:我的回忆和一些有趣的事(精彩绝伦)
  • 李维看.net和DELPHI6(含李维照片)
  • 《代码大全》电子版1.01发布了
  • Real Programmers Use Pascal
  • Kylix安装手记
  • Borland与Microsoft关于Delphi的对话
  • InstallShieldExpressfordelphi制作安装程
  • 关于在COM中使用可选参数的研究
  • msagent经典用法
  • 数据挖掘实验室资料
  • 数据挖掘博客地址
  • 数据挖掘实验室网站地址
  • Prepare for Medicare audits by using dat
  • 注册成为SAS用户与爱好者俱乐部会员
  • 水南梅
  • 明日烟
  • 新人报道
  • 下载
  • 厦门服务器托管,450元/月—0592-5177319 高
  • 买空间送域名--0592-5177319 高静