.data
file db "\\Second\My2 (D)\Folder\2.txt",0h
..........
invoke CreateFile,offset file,GENERIC_WRITE,0h,0h,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0h
mov ebx,eax
mov edi,offset length
mov eax,[edi]
invoke WriteFile,ebx,offset buffer,eax,offset length2,0h
invoke CloseHandle,ebx
Перебросить файл на Net Shared Resource...
Код:
Требуется перекинуть файл в папку, открытую на общий доступ, причём точно не извесно имя компа, зато извесно название папки куда надо кинуть - Folder...
Second - это имя компа.
My2 (D) - это папка, открытая на общий доступ.
В таком виде всё работает, но надо автоматизировать...
Я правильно копаю???
WNetEnumResource
WNetOpenEnum
WNetCloseEnum
Или есть какие-то другие более нормальные способы???
Код:
.data
net_buffer_size dd 400h
.data?
net_buffer NETRESOURCE <?,?,?,?,?,?,?,?>
...........
invoke WNetOpenEnum,RESOURCE_CONNECTED,RESOURCETYPE_DISK,0h,0h,offset net_handle
.if eax == NO_ERROR
mov esi,offset net_handle
mov ebx,[esi]
invoke WNetEnumResource,ebx,0FFFFFFFFh,offset net_buffer,offset net_buffer_size
.if eax == NO_ERROR
invoke Beep,100h,400h
.endif
invoke MessageBox,0h,offset net_buffer.lpRemoteName,offset net_buffer.lpLocalName,MB_OK
;invoke MessageBox,0h,offset file,offset file,MB_OK
invoke WNetCloseEnum,ebx
.if eax == NO_ERROR
invoke Beep,100h,100h
.endif
.endif
invoke ExitProcess,0h
net_buffer_size dd 400h
.data?
net_buffer NETRESOURCE <?,?,?,?,?,?,?,?>
...........
invoke WNetOpenEnum,RESOURCE_CONNECTED,RESOURCETYPE_DISK,0h,0h,offset net_handle
.if eax == NO_ERROR
mov esi,offset net_handle
mov ebx,[esi]
invoke WNetEnumResource,ebx,0FFFFFFFFh,offset net_buffer,offset net_buffer_size
.if eax == NO_ERROR
invoke Beep,100h,400h
.endif
invoke MessageBox,0h,offset net_buffer.lpRemoteName,offset net_buffer.lpLocalName,MB_OK
;invoke MessageBox,0h,offset file,offset file,MB_OK
invoke WNetCloseEnum,ebx
.if eax == NO_ERROR
invoke Beep,100h,100h
.endif
.endif
invoke ExitProcess,0h
Функция WNetEnumResource не работает!!! Почему?
Нашёл в Internet'е:
Код:
unit NetShare;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
TreeView1: TTreeView;
procedure FormCreate(Sender: TObject);
procedure FindNet(root: ttreenode; res: PNetResource);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FindNet(root: ttreenode; res: PNetResource);
var
enum: cardinal;
data: array[0..99] of TNetResource;
cnt:cardinal;
size: cardinal;
i:integer;
begin
i:=WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, res, enum);
if i<>0 then exit;
cnt:=$ffffffff;
size:=sizeof(data);
WNetEnumResource(enum, cnt, @data[0], size);
for i:=0 to cnt-1 do begin
FindNet(TreeView1.Items.AddChild(root, data.lpRemoteName), @data);
end;
WNetCloseEnum(enum);
TreeView1.FullExpand;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FindNet(nil, nil);
end;
end.
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
TreeView1: TTreeView;
procedure FormCreate(Sender: TObject);
procedure FindNet(root: ttreenode; res: PNetResource);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FindNet(root: ttreenode; res: PNetResource);
var
enum: cardinal;
data: array[0..99] of TNetResource;
cnt:cardinal;
size: cardinal;
i:integer;
begin
i:=WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, res, enum);
if i<>0 then exit;
cnt:=$ffffffff;
size:=sizeof(data);
WNetEnumResource(enum, cnt, @data[0], size);
for i:=0 to cnt-1 do begin
FindNet(TreeView1.Items.AddChild(root, data.lpRemoteName), @data);
end;
WNetCloseEnum(enum);
TreeView1.FullExpand;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FindNet(nil, nil);
end;
end.
Если кому понадобится, то вот как оно делается! А дальше анализируем имена - короче работа со строчками... Вобщем находим тот комп и ту паку которая нам нужна, а дальше:
Код:
.data
file db "\\Second\My2 (D)\Folder\2.txt",0h ;Пример...
..........
invoke CreateFile,offset file,GENERIC_WRITE,0h,0h,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0h
mov ebx,eax
mov edi,offset length
mov eax,[edi]
invoke WriteFile,ebx,offset buffer,eax,offset length2,0h
invoke CloseHandle,ebx
file db "\\Second\My2 (D)\Folder\2.txt",0h ;Пример...
..........
invoke CreateFile,offset file,GENERIC_WRITE,0h,0h,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0h
mov ebx,eax
mov edi,offset length
mov eax,[edi]
invoke WriteFile,ebx,offset buffer,eax,offset length2,0h
invoke CloseHandle,ebx
Вот и всё!
Только на форме надо нарисовать ещё TreeView! И всё будет работать!