<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=212178&amp;view=findpost&amp;p=1779426</guid>
        <pubDate>Mon, 26 Nov 2007 15:34:19 +0000</pubDate>
        <title>FTP-клиент, библиотека (WinInet)</title>
        <link>https://forum.sources.ru/index.php?showtopic=212178&amp;view=findpost&amp;p=1779426</link>
        <description><![CDATA[Катька: <span class='tag-size' data-value='14' style='font-size:14pt;'><span class="tag-color tag-color-named" data-value="blue" style="color: blue"><div class='tag-align-center'><br>
FTP–клиент с помощью библиотеки Wininet</div></span></span><br>
Для использования ftp протокола в качестве посредника для общения <br>
с ftp сервером, в данной статье я буду использовать функции библиотеки WinInet :)<br>
<br>
Исходник, предназначен, для соединения с ftp сервером, отображения папок и файлов, перемещения по текущим директориям и<br>
скачивания и заливки файлов. <br>
<br>
Основные функции библиотеки WinInet для общения с ftp сервером, я не буду описывать, а прокомментирую в ниже приведённом коде.<br>
Только упомяну, что вместо функций <strong class='tag-b'>FtpPutFile</strong> и <strong class='tag-b'>FtpGetFile</strong>, я использовала <strong class='tag-b'>InternetWriteFile </strong>и <strong class='tag-b'>InternetReadFile </strong>– соответственно, для подсчёта и отображения, залитых и скачанных байт. <br>
<br>
Итак, <strong class='tag-b'>FtpClient</strong>:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;.386</div><div class="code_line">.model flat,stdcall</div><div class="code_line">option casemap:none</div><div class="code_line">&nbsp;</div><div class="code_line">include \masm32\include\windows.inc</div><div class="code_line">&nbsp;</div><div class="code_line">include \masm32\include\user32.inc</div><div class="code_line">include \masm32\include\kernel32.inc</div><div class="code_line">include \masm32\include\wininet.inc</div><div class="code_line">&nbsp;</div><div class="code_line">includelib \masm32\lib\user32.lib</div><div class="code_line">includelib \masm32\lib\kernel32.lib</div><div class="code_line">includelib \masm32\lib\wininet.lib</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;&nbsp;_T macro p1, p2 ;макрос обработки строк</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;local l</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ifb &#60;p2&#62;; Строка без имени</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.data</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;l &nbsp; db p1, 0</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.code</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;exitm &nbsp; &#60;addr l&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;else &nbsp; &nbsp;; Строка с именем</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.data</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;p1 &nbsp;db p2, 0</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.code</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;exitm &nbsp; &#60;addr p1&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;endif</div><div class="code_line">&nbsp;&nbsp; &nbsp;endm</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;IDC_Glav &nbsp; &nbsp; &nbsp; &nbsp;equ 1000 ;окно данных</div><div class="code_line">&nbsp;&nbsp; &nbsp;IDC_GETHOST &nbsp; &nbsp; equ 1001 ;host </div><div class="code_line">&nbsp;&nbsp; &nbsp;IDC_Dir &nbsp; &nbsp; &nbsp; &nbsp; equ 1002 ;dir</div><div class="code_line">&nbsp;&nbsp; &nbsp;IDC_User &nbsp; &nbsp; &nbsp; &nbsp;equ 1003 ;user</div><div class="code_line">&nbsp;&nbsp; &nbsp;IDC_Pass &nbsp; &nbsp; &nbsp; &nbsp;equ 1004 ;pass </div><div class="code_line">&nbsp;&nbsp; &nbsp;IDC_Connect &nbsp; &nbsp; equ 1005 ;connect</div><div class="code_line">&nbsp;&nbsp; &nbsp;IDC_Setdir &nbsp; &nbsp; &nbsp;equ 1006 ;setdir </div><div class="code_line">&nbsp;&nbsp; &nbsp;IDC_Disconnect &nbsp;equ 1007 ;disconnect </div><div class="code_line">&nbsp;&nbsp; &nbsp;IDC_EXIT &nbsp; &nbsp; &nbsp; &nbsp;equ 1008 ;exit </div><div class="code_line">&nbsp;&nbsp; &nbsp;IDC_PutFileName &nbsp; &nbsp; &nbsp; &nbsp;equ 1009 ;putfile</div><div class="code_line">&nbsp;&nbsp; &nbsp;IDC_GetFilename &nbsp; &nbsp; &nbsp; &nbsp;equ 1010 ;nameputfile</div><div class="code_line">&nbsp;&nbsp; &nbsp;SizeGetPutFile &nbsp; &nbsp; &nbsp; &nbsp; equ 1011 ;statictext для отображени процесса Write/Read - byte</div><div class="code_line">&nbsp;&nbsp; &nbsp;ObshiySize &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; equ 1012 ;размер файлов</div><div class="code_line">&nbsp;</div><div class="code_line">;-------------------------------------------------------------------------</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;treadftpfind PROTO ;поток для поиска файлов</div><div class="code_line">&nbsp;&nbsp; &nbsp;threadprocdownloadfile PROTO ;поток для скачивания файла</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; threadprocputfile PROTO ;поток для заливки файла</div><div class="code_line">&nbsp;&nbsp; &nbsp;;оконная процедура</div><div class="code_line">&nbsp;&nbsp; &nbsp;WndProc &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;PROTO &nbsp;:DWORD, :DWORD, : DWORD,:DWORD</div><div class="code_line">&nbsp;&nbsp; &nbsp;;процедура поиска директорий и файлов</div><div class="code_line">&nbsp;&nbsp; &nbsp;FindFTPFiles &nbsp; &nbsp; &nbsp; PROTO &nbsp;:DWORD, :DWORD </div><div class="code_line">&nbsp;&nbsp; &nbsp;;сообщение в лист бокс</div><div class="code_line">&nbsp;&nbsp; &nbsp;MESSG &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;PROTO &nbsp;:HWND, &nbsp;:DWORD</div><div class="code_line">&nbsp;&nbsp; &nbsp;;обработка клика по строчке в листбоксе</div><div class="code_line">&nbsp;&nbsp; &nbsp;ListBoxProc &nbsp; &nbsp; &nbsp; &nbsp;PROTO &nbsp;:HWND, &nbsp;:UINT, &nbsp;:WPARAM, :LPARAM</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; .data</div><div class="code_line">&nbsp;</div><div class="code_line">;-------------------------------------------------------------------------</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;pdwNumberOfBytesWritten dd &nbsp;0 &nbsp;;для записи файла</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; ObshiyBuffer &nbsp; &nbsp;dd &nbsp;0 &nbsp;;подсчёта байт при скачивании </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ObshiyBufferPut &nbsp; &nbsp;dd &nbsp;0 &nbsp;;и залвики </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;wNumberOfBytesToRead dd 0;сколько считали байт</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ReadByteFilePut dd 0</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;CountBytesWrite dd 0;сколько записали байт</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AgetUser db &#39;FtpClient&#39;,0;название клиент-программы</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;hInstance dd 0</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;;декрипторы соединений</div><div class="code_line">&nbsp;&nbsp;hInternet dd 0</div><div class="code_line">&nbsp;&nbsp;hConnect &nbsp;dd 0</div><div class="code_line">&nbsp;;декрипторы файлов </div><div class="code_line">&nbsp;FileOpenchtobPut dd 0;хандл файла для чтения и размера с диска</div><div class="code_line">&nbsp;&nbsp;hInetFileHandle dd 0;хандл файла для скачивания и размера</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;FileOpenPut dd 0;созданный файл на сервере для заливки </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;hFile dd 0;для записи на диск &nbsp;</div><div class="code_line">&nbsp;&nbsp;hFileConnection dd 0;файл для поиска </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;FIND_DATA WIN32_FIND_DATA &#60;?&#62;;структура файла</div><div class="code_line">&nbsp;;для потоков </div><div class="code_line">&nbsp;jdownftp &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dd 0</div><div class="code_line">&nbsp;jputfile &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dd 0</div><div class="code_line">&nbsp;jfindftp &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dd 0</div><div class="code_line">&nbsp;;размеры файлов</div><div class="code_line">&nbsp;lpdwFileSizeHigh dd 0 </div><div class="code_line">&nbsp;lpFileSizeHigh &nbsp; dd 0</div><div class="code_line">&nbsp;;----------------------------------------------------------------------------------</div><div class="code_line">.data?</div><div class="code_line">&nbsp;;----------------------------------------------------------------------------------</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; User db 1024 dup (?);Логин</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Pass db 1024 dup (?);Пароль</div><div class="code_line">&nbsp;&nbsp; &nbsp; StrokaIz db 1024 dup (?);Хост</div><div class="code_line">&nbsp;</div><div class="code_line">BufferReadPut db 1024 dup (?)</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; BufferFile &nbsp;db 1024 dup (?) </div><div class="code_line">&nbsp;&nbsp; &nbsp; NameFilePut db 1024 dup (?)</div><div class="code_line">&nbsp;&nbsp;BufferDir &nbsp; &nbsp; &nbsp;db 1024 dup (?) &nbsp;</div><div class="code_line">&nbsp;&nbsp;lpfnEditProc &nbsp; &nbsp;HWND ? &nbsp;</div><div class="code_line">&nbsp;&nbsp;hDlg HWND ?</div><div class="code_line">&nbsp;</div><div class="code_line">.code</div><div class="code_line">&nbsp;&nbsp; &nbsp;start:</div><div class="code_line">&nbsp;</div><div class="code_line">;--------------------------------------------------------------------------------</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp;GetModuleHandle, NULL</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mov &nbsp; &nbsp; hInstance, eax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp;DialogBoxParam, hInstance, _T(&quot;MAINDIALOG&quot;), 0, addr WndProc, 0</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp;ExitProcess, eax</div><div class="code_line">&nbsp;</div><div class="code_line">;--------------------------------------------------------------------------------</div><div class="code_line">&nbsp;</div><div class="code_line">WndProc proc hWnd &nbsp; :DWORD,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;uMsg &nbsp; :DWORD,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;wParam :DWORD,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;lParam :DWORD</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">.if uMsg == WM_INITDIALOG</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;invoke &nbsp;SendMessage, hWnd, WM_SETTEXT, NULL, _T(&quot;FTP клиент&quot;)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mov &nbsp; &nbsp; eax, hWnd</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mov &nbsp; &nbsp; hDlg, eax &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ; хэндл окна нам еще понадобится :)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; ; сабклассируем контрол EDIT</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp;GetDlgItem, eax, IDC_Glav</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; ; для кликанья в лист боксе ;)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp;SetWindowLong,eax, GWL_WNDPROC, addr ListBoxProc</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mov &nbsp; &nbsp; &nbsp;lpfnEditProc, eax &nbsp; ; сохраняем адрес предыдущей функции</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;.elseif uMsg==WM_COMMAND</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; eax, wParam</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; edx, eax;нажатие кнопок</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;shr &nbsp; &nbsp; edx, 16</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;.if edx == BN_CLICKED</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;;--------------------------------------------------------------------------------------- &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;.if ax == IDC_Connect;подключаемся к серверу и выводи все папки и файлы</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp; InternetOpen,addr AgetUser,INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mov hInternet, eax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;берём ip, login, pass &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp; GetDlgItemText, [hWnd], IDC_User, &nbsp; addr User,-1</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp; GetDlgItemText, [hWnd], IDC_Pass, &nbsp; addr Pass,-1 &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp; GetDlgItemText, [hWnd], IDC_GETHOST,addr StrokaIz,-1 </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;заполняем данными для подключенияи вперёд ;)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp; InternetConnect, [hInternet],\;Дескриптор, полученный вызовом предыдущей функции. </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;addr StrokaIz,\;хост</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;INTERNET_DEFAULT_FTP_PORT,\; 21</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;addr User,addr Pass,\;логин , пароль</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;INTERNET_SERVICE_FTP,\;Тип сервиса </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0,\</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mov hConnect, eax;сохраняем дескриптор</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;берём директорию из контрола &quot;/&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; invoke &nbsp;GetDlgItemText, [hWnd],IDC_Dir,addr &nbsp;BufferDir,-1 &nbsp; &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; invoke &nbsp;FindFTPFiles,[hConnect] ,addr &nbsp;BufferDir ;ищем все файлы и папки &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; .endif</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;;-----------------------------------------------------------------------------------------</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;смена директории </div><div class="code_line">&nbsp;.if ax == &nbsp;IDC_Setdir;берём название директориииз контрола</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;invoke &nbsp;GetDlgItemText, hWnd,IDC_Dir, addr &nbsp;BufferDir,-1 </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;invoke &nbsp;FindFTPFiles, &nbsp; [hConnect] , &nbsp;addr &nbsp;BufferDir ;ищем все файлы и папки</div><div class="code_line">&nbsp;&nbsp; &nbsp; .endif</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">;----------------------------------------------------------------------------------------------- &nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;.if ax == IDC_Disconnect</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;invoke InternetCloseHandle, hConnect</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp;.endif</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;;-------------------------------------------------------------------------------------------</div><div class="code_line">&nbsp;</div><div class="code_line">;закачиваем файл на сервер &nbsp; </div><div class="code_line">&nbsp;&nbsp; .if ax == IDC_PutFileName</div><div class="code_line">&nbsp;&nbsp; ;берём название файла</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; invoke &nbsp;GetDlgItemText, hWnd,IDC_GetFilename,addr NameFilePut,-1</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; ;спрашиваем этот файл залить, малоли вдруг ошиблись ;)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; invoke MessageBox,[hWnd],offset NameFilePut,_T(&#39;Залить файл?&#39;), MB_OKCANCEL</div><div class="code_line">&nbsp;&nbsp; .if ax == TRUE;если пользователь действительно хочет скачать выбранный файл</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; invoke CreateFile,ADDR NameFilePut,\;открываем файл для чтения</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;GENERIC_READ,\</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;FILE_SHARE_READ,\</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NULL,\</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;OPEN_ALWAYS,\</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0,\</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NULL; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mov FileOpenchtobPut, eax;сохраняем хэндл</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;узнаём размер файла</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; invoke GetFileSize,[FileOpenchtobPut],addr lpFileSizeHigh </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mov lpFileSizeHigh, eax ;корректный размер</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; invoke SetDlgItemInt,[hDlg],ObshiySize,lpFileSizeHigh &nbsp;,1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;создаём файл на сервере с соответствующим названием, для записи &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; invoke FtpOpenFile,[hConnect],offset NameFilePut,GENERIC_WRITE ,\ </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;FTP_TRANSFER_TYPE_UNKNOWN,\;выбран как бинарь ;) </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;INTERNET_FLAG_NEED_FILE </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mov &nbsp;FileOpenPut , eax;сохраняем дескриптор для заливки файла</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;открываем поток для заливки файла, отображения залитых байт и чтобы не тормозило ;)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; invoke CreateThread,0,0, offset threadprocputfile,0,0,offset jputfile</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;.else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;.endif &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; .endif</div><div class="code_line">&nbsp;</div><div class="code_line">;-------------------------------------------------------------------------</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp;.if ax == IDC_EXIT;выход</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;invoke InternetCloseHandle,hConnect</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp;SendMessage, hWnd, WM_CLOSE, 0, 0</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; .endif &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; .endif &nbsp;</div><div class="code_line">&nbsp;.elseif uMsg == WM_CLOSE</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;invoke InternetCloseHandle,hConnect</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp;EndDialog,hWnd,0</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;.else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; eax, FALSE</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ret</div><div class="code_line">&nbsp;&nbsp; &nbsp;.endif</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; eax, TRUE</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ret</div><div class="code_line">&nbsp;</div><div class="code_line">WndProc endp</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;;------------------------------------------------------------------------------------------------</div><div class="code_line">&nbsp;</div><div class="code_line">;процедура поиска файлов и папок</div><div class="code_line">FindFTPFiles proc FConnect:DWORD, Dir:DWORD ;хэндл и выбранная директория</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; invoke &nbsp;GetDlgItem, hDlg, IDC_Glav</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; ;отчищаем листбокс</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; invoke &nbsp;SendMessage, eax, LB_RESETCONTENT, 0, 0</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; ;смена директории</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; invoke &nbsp;FtpSetCurrentDirectory, [FConnect], &nbsp; Dir</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; ;поиск всего ;)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; invoke &nbsp;FtpFindFirstFile, [FConnect],_T(&#39;*.*&#39;),addr FIND_DATA,INTERNET_FLAG_NEED_FILE , 0</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp;hFileConnection ,eax </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; ;обнуляем структуру </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; invoke &nbsp;RtlZeroMemory, addr FIND_DATA, SizeOf(WIN32_FIND_DATA) </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;.repeat </div><div class="code_line">&nbsp;&nbsp; ;функции поиска и заполнения данными структуры ВИНДАТ и добавления в листбокс</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; invoke &nbsp;MESSG , [hDlg], &nbsp;addr &nbsp;(FIND_DATA.cFileName) &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; invoke &nbsp;InternetFindNextFile,[hFileConnection],offset FIND_DATA &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp;.until eax==FALSE &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; invoke InternetCloseHandle,hFileConnection;закрываем поюзанный хэндл :)</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">&nbsp;ret</div><div class="code_line">&nbsp;</div><div class="code_line">FindFTPFiles endp</div><div class="code_line">&nbsp;</div><div class="code_line">;--------------------------------------------------------------------------------------------</div><div class="code_line">&nbsp;</div><div class="code_line">;обработка двойного нажатия клика мыши на строчку в листбоксе</div><div class="code_line">ListBoxProc &nbsp;proc &nbsp; hCtl: HWND, uMsg: UINT, wParam: WPARAM, lParam: LPARAM</div><div class="code_line">&nbsp;&nbsp; &nbsp;LOCAL IndexItem &nbsp;:DWORD;номер строки</div><div class="code_line">&nbsp;&nbsp; &nbsp;mov &nbsp; &nbsp; eax, wParam</div><div class="code_line">&nbsp;&nbsp; &nbsp;;двойной клик по строчке в листбоксе</div><div class="code_line">&nbsp;.if ( uMsg == WM_LBUTTONDBLCLK ) </div><div class="code_line">&nbsp;&nbsp;;номер строчки </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; invoke &nbsp;SendMessage,hCtl,LB_GETCURSEL,0,0</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mov IndexItem, eax</div><div class="code_line">&nbsp;&nbsp; ;извлекаем текст из кликнутой строчке :)) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; invoke &nbsp;SendMessage,hCtl,LB_GETTEXT,IndexItem,ADDR BufferDir</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; ;обнуляем структуру </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; invoke &nbsp;RtlZeroMemory, addr FIND_DATA, SizeOf(WIN32_FIND_DATA) </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; invoke &nbsp;FtpFindFirstFile, [hConnect],ADDR BufferDir, offset FIND_DATA,INTERNET_FLAG_RESYNCHRONIZE , 0</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp;hFileConnection ,eax </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;.if FIND_DATA.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp;InternetCloseHandle,hFileConnection </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;поток поиска файлов в директории </div><div class="code_line">&nbsp;&nbsp; &nbsp;invoke &nbsp;CreateThread,0,0, offset treadftpfind ,0,0,offset jfindftp</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; jmp EXITPROC</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;.else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;.endif</div><div class="code_line">&nbsp;;спрашиваем действительно ли пользователь хочет скачать файл</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; invoke MessageBox,[hCtl], ADDR BufferDir,_T(&#39;Скачать файл?&#39;), MB_OKCANCEL</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;.if ax == TRUE</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; ;открываем файл на сервере для чтения</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;invoke FtpOpenFile,[hConnect],ADDR BufferDir,GENERIC_READ ,\ </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;FTP_TRANSFER_TYPE_UNKNOWN,\ </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mov [hInetFileHandle], eax </div><div class="code_line">&nbsp;&nbsp; &nbsp; ;запрашиваем размер файла с сервера &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;invoke FtpGetFileSize,[hInetFileHandle] &nbsp;,\</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;offset lpdwFileSizeHigh</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mov lpdwFileSizeHigh,eax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;invoke SetDlgItemInt,[hDlg],ObshiySize, &nbsp;lpdwFileSizeHigh ,1 &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; ;создаём файл для записи закачанных байт &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;invoke CreateFile,ADDR BufferDir,\</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;GENERIC_WRITE,\</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;FILE_SHARE_WRITE,\</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NULL,\</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;OPEN_ALWAYS,\</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0,\</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NULL </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mov hFile , eax &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;;поток скачивания</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp;CreateThread,0,0, offset threadprocdownloadfile ,0,0,offset jdownftp</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; .else</div><div class="code_line">&nbsp;&nbsp;EXITPROC: &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; .endif &nbsp; &nbsp; </div><div class="code_line">&nbsp;.endif</div><div class="code_line">&nbsp;&nbsp; &nbsp;; нажата любая другая клавиша, вызываем старую функцию контрола</div><div class="code_line">&nbsp;&nbsp; &nbsp;invoke &nbsp;CallWindowProc, lpfnEditProc, hCtl, uMsg, wParam, lParam</div><div class="code_line">&nbsp;&nbsp; &nbsp;ret</div><div class="code_line">&nbsp;</div><div class="code_line">ListBoxProc endp </div><div class="code_line">&nbsp;</div><div class="code_line">;--------------------------------------------------------------------------------------------</div><div class="code_line">&nbsp;</div><div class="code_line">;посылка сообщения в лист бокс</div><div class="code_line">&nbsp;MESSG proc hWnd: HWND, message: DWORD</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp;GetDlgItem, hDlg, IDC_Glav</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;eax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp;SendMessage, eax, LB_ADDSTRING, 0, message</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; ecx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;invoke &nbsp;SendMessage, ecx, LB_SETTOPINDEX, eax, 0</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ret</div><div class="code_line">&nbsp;MESSG endp</div><div class="code_line">&nbsp;</div><div class="code_line">;----------------------------------------------------------------------------------------------</div><div class="code_line">&nbsp;</div><div class="code_line">;поток входа в папку на ftp и поиска всех файлов и папок в текущей директории</div><div class="code_line">treadftpfind proc</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; invoke &nbsp;SetDlgItemText, [hDlg] &nbsp;,IDC_Dir, addr BufferDir;смена названия директории в Edit</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; invoke &nbsp;FindFTPFiles, &nbsp; [hConnect] , addr &nbsp;BufferDir &nbsp;;ищем все файлы и папки</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp; ret &nbsp; </div><div class="code_line">&nbsp;</div><div class="code_line">treadftpfind endp</div><div class="code_line">&nbsp;</div><div class="code_line">;----------------------------------------------------------------------------------------------</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;;поток скачивания файла с ftp - сервера</div><div class="code_line">threadprocdownloadfile proc</div><div class="code_line">&nbsp;</div><div class="code_line">;обнуляем общий буфер, который играет немаловажную роль для подсчёта скачанных байт :)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mov ObshiyBuffer, 0h</div><div class="code_line">.repeat;цикл закачки с постусловием</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;invoke InternetReadFile,[hInetFileHandle],\;функция считывает в буфер байтики</div><div class="code_line">&nbsp;&nbsp; addr BufferFile,\;буфер для чтения</div><div class="code_line">&nbsp;&nbsp; sizeof BufferFile ,\;размер буфера</div><div class="code_line">&nbsp;&nbsp; addr wNumberOfBytesToRead;считаных байт </div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;&nbsp; ;считаем сколько всего закачалось из файла в каждый момент времени 1024 буф.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; mov eax, &nbsp; ObshiyBuffer;общий буфер в регистр для сложения</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; add eax, CountBytesWrite </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; mov &nbsp; ObshiyBuffer , eax ;результат в общий буфер</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; ;выводим в контрол сколько же мы уже скачали</div><div class="code_line">&nbsp;&nbsp;invoke SetDlgItemInt,[hDlg],SizeGetPutFile, &nbsp;ObshiyBuffer , 1</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; ;запись файла на диск; дескриптор созданного файла, буфер, размер буфера, записанных байт</div><div class="code_line">&nbsp;&nbsp;invoke WriteFile, [hFile],addr BufferFile ,wNumberOfBytesToRead, addr CountBytesWrite , NULL </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;.until &nbsp;wNumberOfBytesToRead == 0 ;качаем файл пока не закончится ^ всё равно запишется ноль ;)</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;;закрываем дескриптор скачиваемого и сзданного файла </div><div class="code_line">&nbsp;&nbsp; &nbsp; invoke CloseHandle, hFile</div><div class="code_line">&nbsp;&nbsp; &nbsp; invoke InternetCloseHandle, hInetFileHandle</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ret &nbsp; </div><div class="code_line">&nbsp;</div><div class="code_line">threadprocdownloadfile endp</div><div class="code_line">&nbsp;</div><div class="code_line">;---------------------------------------------------------------------------------------------</div><div class="code_line">&nbsp;</div><div class="code_line">;поток, чтобы положить файл на сервант ;)</div><div class="code_line">threadprocputfile proc</div><div class="code_line">&nbsp;mov ObshiyBufferPut, 0h;обнуляем </div><div class="code_line">;читаем файл пока не закончится</div><div class="code_line">.repeat &nbsp; </div><div class="code_line">&nbsp;;функция чтения файла с диска</div><div class="code_line">&nbsp;&nbsp;invoke ReadFile,[FileOpenchtobPut],\ </div><div class="code_line">&nbsp;&nbsp; &nbsp;addr BufferReadPut,\ ;буфер для данных</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sizeof &nbsp;BufferReadPut,\ ;его размер</div><div class="code_line">&nbsp;&nbsp; &nbsp;addr ReadByteFilePut,\ ;сколько считали </div><div class="code_line">&nbsp;&nbsp; &nbsp;NULL </div><div class="code_line">&nbsp;&nbsp;;считаем сколько считали и поидеи должны отправить ;) </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mov eax, &nbsp; ObshiyBufferPut </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;add eax, &nbsp; ReadByteFilePut </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mov ObshiyBufferPut , eax </div><div class="code_line">&nbsp;&nbsp;;заливаем &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp;invoke InternetWriteFile,[FileOpenPut],\;хэндл вернувшийся после гуляния с фун-ей FtpOpenFile</div><div class="code_line">&nbsp;&nbsp; &nbsp; addr BufferReadPut,\;буфер записывания :)</div><div class="code_line">&nbsp;&nbsp; &nbsp; ReadByteFilePut,\;размер</div><div class="code_line">&nbsp;&nbsp; &nbsp; addr pdwNumberOfBytesWritten;сколько положили</div><div class="code_line">&nbsp;;выводим так как очень интересно :)</div><div class="code_line">&nbsp;&nbsp;invoke SetDlgItemInt,[hDlg],SizeGetPutFile, &nbsp;ObshiyBufferPut &nbsp;, 1</div><div class="code_line">;когда-нибудь да он закончится</div><div class="code_line">&nbsp;.until ReadByteFilePut==0 </div><div class="code_line">&nbsp;&nbsp;;закрываем теперь уже не нужные дескрипторы </div><div class="code_line">&nbsp;&nbsp; &nbsp; invoke &nbsp;CloseHandle, FileOpenchtobPut</div><div class="code_line">&nbsp;&nbsp; &nbsp; invoke &nbsp;InternetCloseHandle, FileOpenPut</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">ret </div><div class="code_line">&nbsp;</div><div class="code_line">threadprocputfile endp</div><div class="code_line">&nbsp;</div><div class="code_line">end start</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>Диалог:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#define IDD_DLG1 MAINDIALOG</div><div class="code_line">#define IDC_EDT1 1001</div><div class="code_line">#define IDC_LST1 1000</div><div class="code_line">#define IDC_STC1 10003</div><div class="code_line">#define IDC_EDT2 1003</div><div class="code_line">#define IDC_EDT3 1004</div><div class="code_line">#define IDC_EDT4 1002</div><div class="code_line">#define IDC_BTN1 1009</div><div class="code_line">#define IDC_BTN2 1005</div><div class="code_line">#define IDC_BTN3 1006</div><div class="code_line">#define IDC_STC2 10010</div><div class="code_line">#define IDC_STC3 10011</div><div class="code_line">#define IDC_STC4 10012</div><div class="code_line">#define IDC_STC5 10013</div><div class="code_line">#define IDC_EDT5 1010</div><div class="code_line">#define IDC_STC6 10014</div><div class="code_line">#define IDC_STC7 1011</div><div class="code_line">#define IDC_BTN4 1007</div><div class="code_line">#define IDC_BTN5 1008</div><div class="code_line">#define IDC_STC8 1013</div><div class="code_line">#define IDC_STC9 1012</div><div class="code_line">IDD_DLG1 DIALOGEX 6,5,397,240</div><div class="code_line">CAPTION &quot;IDD_DLG&quot;</div><div class="code_line">FONT 8,&quot;MS Sans Serif&quot;,0,0</div><div class="code_line">STYLE 0x10CF0000</div><div class="code_line">BEGIN</div><div class="code_line">&nbsp;&nbsp;CONTROL &quot;127.0.0.1&quot;,IDC_EDT1,&quot;Edit&quot;,0x50010000,298,12,54,13,0x00000200</div><div class="code_line">&nbsp;&nbsp;CONTROL &quot;&quot;,IDC_LST1,&quot;ListBox&quot;,0x50010141,2,1,256,235,0x00000200</div><div class="code_line">&nbsp;&nbsp;CONTROL &quot;NamePutFile&quot;,IDC_STC1,&quot;Static&quot;,0x50000000,300,84,54,9</div><div class="code_line">&nbsp;&nbsp;CONTROL &quot;&quot;,IDC_EDT2,&quot;Edit&quot;,0x50010000,264,40,54,13,0x00000200</div><div class="code_line">&nbsp;&nbsp;CONTROL &quot;&quot;,IDC_EDT3,&quot;Edit&quot;,0x50010000,334,40,54,13,0x00000200</div><div class="code_line">&nbsp;&nbsp;CONTROL &quot;/&quot;,IDC_EDT4,&quot;Edit&quot;,0x50010000,300,68,56,13,0x00000200</div><div class="code_line">&nbsp;&nbsp;CONTROL &quot;PutFile&quot;,IDC_BTN1,&quot;Button&quot;,0x50010000,300,116,54,13</div><div class="code_line">&nbsp;&nbsp;CONTROL &quot;Connect&quot;,IDC_BTN2,&quot;Button&quot;,0x50010000,270,204,54,13</div><div class="code_line">&nbsp;&nbsp;CONTROL &quot;SetDir&quot;,IDC_BTN3,&quot;Button&quot;,0x50010000,270,221,54,13</div><div class="code_line">&nbsp;&nbsp;CONTROL &quot;Host&quot;,IDC_STC2,&quot;Static&quot;,0x50000000,298,0,54,9</div><div class="code_line">&nbsp;&nbsp;CONTROL &quot;Login&quot;,IDC_STC3,&quot;Static&quot;,0x50000000,266,27,54,9</div><div class="code_line">&nbsp;&nbsp;CONTROL &quot;Pass&quot;,IDC_STC4,&quot;Static&quot;,0x50000000,336,27,54,9</div><div class="code_line">&nbsp;&nbsp;CONTROL &quot;Dir&quot;,IDC_STC5,&quot;Static&quot;,0x50000000,302,55,54,9</div><div class="code_line">&nbsp;&nbsp;CONTROL &quot;LINK.EXE&quot;,IDC_EDT5,&quot;Edit&quot;,0x50010000,300,99,54,13,0x00000200</div><div class="code_line">&nbsp;&nbsp;CONTROL &quot;SizeProc&quot;,IDC_STC6,&quot;Static&quot;,0x50000000,300,169,54,9</div><div class="code_line">&nbsp;&nbsp;CONTROL &quot;0&quot;,IDC_STC7,&quot;Static&quot;,0x50000000,300,182,54,9</div><div class="code_line">&nbsp;&nbsp;CONTROL &quot;Disconnect&quot;,IDC_BTN4,&quot;Button&quot;,0x50010000,328,204,54,13</div><div class="code_line">&nbsp;&nbsp;CONTROL &quot;Exit&quot;,IDC_BTN5,&quot;Button&quot;,0x50010000,328,221,54,13</div><div class="code_line">&nbsp;&nbsp;CONTROL &quot;Размер&quot;,IDC_STC8,&quot;Static&quot;,0x50000000,300,142,54,11</div><div class="code_line">&nbsp;&nbsp;CONTROL &quot;0&quot;,IDC_STC9,&quot;Static&quot;,0x50000000,300,156,54,9</div><div class="code_line">END</div></ol></div></div></div></div>Компилируем:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">rc.exe Dlg.rc</div><div class="code_line">E:\masm32\BIN\FTPConnect\ml /c /coff FtpC.asm</div><div class="code_line">E:\masm32\BIN\FTPConnect\Link /SUBSYSTEM:WINDOWS FtpC.obj Dlg.RES</div><div class="code_line">pause</div></ol></div></div></div></div><br>
<br>
Если вы пожертвуете в фонд проекта возможно я добавлю докачку и скачивание папок. ( шучу  ;)  )]]></description>
        <author>Катька</author>
        <category>Assembler FAQ</category>
      </item>
	
      </channel>
      </rss>
	