Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
Начиная с Internet Explorer 3, Microsoft поддерживает очень полезные API, Wininet. Эти функции позволяют использовать все возможности IE, такие как настройки прокси, кэширование файлов и т.д.
Ниже приведён пример использования этих функций для скачивания файла с нужного URL. Это может быть любой доступный URL, ftp://, http://, gopher://, и т.д.
Более подробную информацию об этих функция можно посмотреть в MSDN - Win32 Internet API Functions.
function DownloadFile(const Url: string): string; var NetHandle: HINTERNET; UrlHandle: HINTERNET; Buffer: array[0..1024] of char; BytesRead: cardinal; begin Result := ''; NetHandle := InternetOpen('Delphi 5.x', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); if Assigned(NetHandle) then begin UrlHandle := InternetOpenUrl(NetHandle, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0); { UrlHandle правильный? Начинаем загрузку } if Assigned(UrlHandle) then begin FillChar(Buffer, SizeOf(Buffer), 0); repeat Result := Result + Buffer; FillChar(Buffer, SizeOf(Buffer), 0); InternetReadFile(UrlHandle, @Buffer, SizeOf(Buffer), BytesRead); until BytesRead = 0; InternetCloseHandle(UrlHandle); end else begin { UrlHandle неправильный. Генерируем исключительную ситуацию. } raise Exception.CreateFmt('Cannot open URL %s', [Url]); end; InternetCloseHandle(NetHandle); end else { NetHandle недопустимый. Генерируем исключительную ситуацию } raise Exception.Create('Unable to initialize Wininet'); end; //------------------------------------------------- implementation uses SysUtils,Windows,ShlObj; function NetShareAdd(ServerName:PChar; //указатель на имя компьютера, например 'Server'#0, если свой, то можно nil Level:Word; //уровень структуры Share_info, здесь 50 PShareInfo:PChar; //указатель на структуру Share_Info ParmErr:DWord) //указатель на ??? :dword;stdcall;external 'svrapi.dll';//svrapi для Win9X, NetApi32 для NT function NetShareDel(ServerName:PChar; NetName:PChar; Reserved:DWord):dword;stdcall;external 'svrapi.dll'; type _share_info_50 = record //структура Share уровня 50 NetName: array [1..13] of char; //Как будет называться диск в сети SType: byte; //тип =0 (STYPE_DISKTREE) - шарить диски Flags: word; //флаги $0191,$0192,$0193....(доступ из сети) Remark: PChar; //указатель на комментарий, видимый из сети Path: PChar; //указатель на имя ресурса, например 'c:'#0 RW_Password: array [1..9] of char; //пароль для полного доступа, если не нужен =#0 RO_Password: array [1..9] of char; //пароль для доступа на чтение, если не нужен =#0 end; //---------------------------- function SetShareOnDisk(HostName,LocalPath:string; NetName:TNetName;Remark:string; Access:word;RO_Passw,RW_Passw:TPassw):boolean; var ShareInfo:_Share_Info_50; begin Result:=false; StrPCopy(@ShareInfo.NetName,NetName); ShareInfo.SType:=0; ShareInfo.Flags:=Access; ShareInfo.Remark:=PChar(Remark); ShareInfo.Path:=PChar(LocalPath); StrPCopy(@ShareInfo.RO_Password,RO_Passw); StrPCopy(@ShareInfo.RW_Password,RW_Passw); ShareResult:=NetShareAdd(PChar(HostName), 50,@ShareInfo,$0000002a); //вызываем Share if ShareResult <> 0 then //расшарить неудалось Exit; SHChangeNotify(SHCNE_NETSHARE,SHCNF_PATH,PChar(LocalPath),nil); //сказать шеллу об изменениях Result:=true; end; //---------------------------- function RemoveShareFromDisk(HostName, NetName, LocalPath: string): boolean; begin Result:=false; ShareResult:=NetShareDel(PChar(HostName),PChar(NetName),0); //удалить шару if ShareResult <> 0 then Exit; SHChangeNotify(SHCNE_NETUNSHARE, SHCNF_PATH,PChar(LocalPath),nil); //сказать шеллу об изменениях Result:=true; end; end.