◆◆◆100分求:如何编程实现将某个硬盘分区设置为共享???

onlydelphiandi 2003-08-22 03:57:52
要实现的功能:
1、可以将某个硬盘分区设置为共享。
2、可以随其他指定的程序一起运行(既其它程序启动时它也跟着启动)。

我想写这个程序的原因是,我在网吧上网,有时下载了一些东西,可是下次上网时机器却被别人占了。很烦。

请给出原代码,我很急!!

另外,有没有可以在局域网中直接访问其他电脑中未被设置共享的分区的软件?
...全文
74 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
XXSingle 2003-08-29
  • 打赏
  • 举报
回复
虽然我只懂注册表的方法,还是帮你顶一顶............
lw549 2003-08-27
  • 打赏
  • 举报
回复
补充,我的方法在98下不能使用。是net命令的问题。
lw549 2003-08-27
  • 打赏
  • 举报
回复
net use ...
at ...
net share ...
以上命令做个批处理就可以。
///////////////////////////////////
net use 对方ip 用户名 密码
at 对方ip 时间 执行的批处理

批处理就下面这个
net share hello=c:\

这样就增加了一个叫hello的共享,打开后是c:\
hch_45 2003-08-26
  • 打赏
  • 举报
回复
nit 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.
onlydelphiandi 2003-08-26
  • 打赏
  • 举报
回复
jiu ming!
onlydelphiandi 2003-08-24
  • 打赏
  • 举报
回复
◆◆◆我是楼主◆◆◆
这个程序要在网吧中运行,网吧中的任何机器默认是没有设置任何共享的。硬盘分为C D E三个分区,而且安装了还原精灵(只还原C分区),游戏安装在E盘。还安装有万象网管软件(但是允许下载、安装软件什么的)、诺顿杀毒软件等等。
我希望的效果是,当起动某些游戏时,这个程序跟着启动并悄悄的将C,D盘设置为完全共享。以方便我使用其他机器来访问这台机器。

to: lw549(★回帖,接分,学习★)
老兄,你能不能写全啊!
to: geyobing(银翼天使)
你的方法在winxp下好使,但在Win98下根本没有net.exe文件啊。
to:ZyxIp(绝望中...)
修改注册表的方法我试验了,遗憾的是,只有在重启或注销后共享才生效,但是这样会使人起疑。见下面:
to:DWGZ()
NetShareAdd这个函数我使用了,可是没有成功,不知道错在哪?见下面:
-------------------------------------------------------------------
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Registry;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const NETNAME_LEN = 13; PASSWORD_LEN = 9; SHI50F_RDONLY = $0001;
var
Form1: TForm1;
function NetShareAdd(servername: PChar; level: SmallInt; buf: Pointer;
buf_len: SmallInt): SmallInt; far; stdcall; external 'svrapi.dll';

implementation

{$R *.dfm}
type
SHARE_INFO_50 = record
netname: array[0..NETNAME_LEN - 1] of Char;
sharetype: ShortInt;
flags: SmallInt;
remark: PChar;
path: PChar;
rw_password: array[0..PASSWORD_LEN - 1] of Char;
ro_password: array[0..PASSWORD_LEN - 1] of Char;
end;

procedure TForm1.Button1Click(Sender: TObject); //在nt内核下才好使,我要的是在win98下的方法。
begin
WinExec('net.exe share MyShare=c:', SW_HIDE)
end;

procedure TForm1.Button2Click(Sender: TObject); //采用NetShareAdd函数来启用共享,没有成功,错在哪呢?请解决!
var buf: pointer;
k: ^SHARE_INFO_50;
begin
new(k);
k^.netname := 'C:';
k^.path := 'C:';
k^.flags := 258;
k^.remark := '';
buf := k;
NetShareAdd('', 50, buf, 0);
end;

procedure TForm1.Button3Click(Sender: TObject); //采用修改注册表的方法来启用共享,但是只有重启或注销后共享才生效,这不是我想要的。为什么在属性中修改共享属性后会立刻生效呢?妈的?晕!
var
MyReg: TRegistry;
j: pointer;
//以下为注册表修改
begin
j := nil;
MyReg := TRegistry.Create;
MyReg.RootKey := HKEY_LOCAL_MACHINE;
MyReg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Network\LanMan\C', True);
MyReg.WriteInteger('Flags', 258); //完全共享
myreg.WriteBinaryData('Parm1enc', j, 0);
myreg.WriteBinaryData('Parm2enc', j, 0);
MyReg.WriteInteger('Type', 0);
MyReg.WriteString('Path', 'C\:'); //共享
MyReg.WriteString('Remark', '');
MyReg.CloseKey;
end;

end.
-------------------------------------------------------------------
在使用NetShareAdd函数的时候感觉很困扰:函数TMD要先声明,要改为Delphi格式,SHARE_INFO_50结构体类型要按照C++描述的改为Delphi格式的再声明一次,妈的,怎么这么麻烦呢!要是没有超级猛料我还真不知道怎么个改法,比如说那些常量,我他妈的上哪查去啊!

大地精灵 2003-08-22
  • 打赏
  • 举报
回复
WinExec('net.exe share MyShare=c:', SW_HIDE)
WinExec('net.exe share MyShare/delete', SW_HIDE)
ZyxIp 2003-08-22
  • 打赏
  • 举报
回复
硬盘分区共享 其实是就是在注册表中一个键下添加了要共享的盘符。

添加到哪呢忘记了。

不过你可以先建一个文件夹,起个怪怪的名字,设成共享,然后在注册表中查找这个文件夹。

找到了吗???

就是它!!!!!!
DWGZ 2003-08-22
  • 打赏
  • 举报
回复
用NetShareAdd
function NetShareAdd(AServername:Widestring; ALevel: DWORD; ABuf: PBYTE;
var AParm_err: LPDWORD ): DWORD; stdcall;


lw549 2003-08-22
  • 打赏
  • 举报
回复
net use ...
at ...
net share ...
以上命令做个批处理就可以。

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧