1 (изменено: Clannad5, 2020-03-07 08:03:33)

Тема: AHK: передача файлов через проводник Windows по FTP серверу

Здравствуйте!
Недавно узнал, что у проводника Windows есть возможность заходить на FTP сервер, введя допустим в CMD, через AHK:


Run explorer.exe ftp://UserName:Password@ServerName,, Hide

откроется папка(ftp сервер) в скрытом режиме и теперь вопрос..
какой командой скопировать уже в это окно файл?


Почему я не использую FTP.exe - потому что большинство антивирусов жалуется на этот способ передачи данных и блокирует любое соединение с интернетом.
Windows проводник - как правило родное и не думаю что этот способ будет блокироваться Антивирусами.

Открывается что-то типа такого.
https://i.imgur.com/DJwsuZQ.png


Приведите, пожалуйста, пример как можно скопировать через проводник на FTP сервер, который тоже открыт в проводнике.
В ручную копировать вставить - работает
Можно ли как-то программно это сделать?

2 (изменено: teadrinker, 2020-03-07 18:11:14)

Re: AHK: передача файлов через проводник Windows по FTP серверу

Если вручную можно скопировать-вставить, тогда проще всего так:

DropFiles(fileList, windowTitle) {
   tempClipboard := ClipboardAll
   Sleep, 50
   ClipboardSetFiles(fileList)
   WinActivate, % windowTitle
   Send ^v
   Sleep, 100
   Clipboard := tempClipboard
}

ClipboardSetFiles(FilesToSet, DropEffect := "Copy") {
   Static SizeT := A_IsUnicode ? 2 : 1 ; size of a TCHAR
   Static PreferredDropEffect := DllCall("RegisterClipboardFormat", "Str", "Preferred DropEffect")
   Static DropEffects := {1: 1, 2: 2, Copy: 1, Move: 2}
   ; -------------------------------------------------------------------------------------------------------------------
   ; Count files and total string length
   TotalLength := 0
   FileArray := []
   Loop, Parse, FilesToSet, `n, `r
   {
      If (Length := StrLen(A_LoopField))
         FileArray.Push({Path: A_LoopField, Len: Length + 1})
      TotalLength += Length
   }
   FileCount := FileArray.Length()
   If !(FileCount && TotalLength)
      Return
   ; -------------------------------------------------------------------------------------------------------------------
   ; Add files to the clipboard
   If DllCall("OpenClipboard", "Ptr", A_ScriptHwnd) && DllCall("EmptyClipboard") {
      ; hMem format ---------------------------------------------------------------------------------------------------
      ; 0x42 = GMEM_MOVEABLE (0x02) | GMEM_ZEROINIT (0x40)
      hMem := DllCall("GlobalAlloc", "UInt", 0x42, "UInt", 20 + (TotalLength + FileCount + 1) * SizeT, "UPtr")
      pMem := DllCall("GlobalLock", "Ptr", hMem)
      Offset := 20
      NumPut(Offset, pMem + 0, "UInt")         ; DROPFILES.pFiles = offset of file list
      NumPut(!!A_IsUnicode, pMem + 16, "UInt") ; DROPFILES.fWide = 0 --> ANSI, fWide = 1 --> Unicode
      For Each, File In FileArray
         Offset += StrPut(File.Path, pMem + Offset, File.Len) * SizeT
      DllCall("GlobalUnlock", "Ptr", hMem)
      DllCall("SetClipboardData", "UInt", 0x0F, "UPtr", hMem) ; 0x0F = CF_HDROP
      ; Preferred DropEffect format ------------------------------------------------------------------------------------
      If (DropEffect := DropEffects[DropEffect]) {
         hMem := DllCall("GlobalAlloc", "UInt", 0x42, "UInt", 4, "UPtr")
         pMem := DllCall("GlobalLock", "Ptr", hMem)
         NumPut(DropEffect, pMem + 0, "UChar")
         DllCall("GlobalUnlock", "Ptr", hMem)
         DllCall("SetClipboardData", "UInt", PreferredDropEffect, "Ptr", hMem)
      }
      DllCall("CloseClipboard")
   }
   Return
}

Но со скрытым окном вряд ли сработает.
Я бы использовал какую-нибудь AHK-библиотеку для работы с FTP.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

3

Re: AHK: передача файлов через проводник Windows по FTP серверу

teadrinker

Когда я использовал библиотеку FtpV2
https://github.com/rshipp/ahk-libs/blob … /FTPv2.ahk

То у меня, при запуске скрипта, все равно вылезало менюшка:
https://i.imgur.com/a5IpqY8.png

Почему я хочу избавиться от этого:
1. Не у всех это оповещение появляется, по причине другой системы защиты и передача по FTP просто блокируется
2. Это раздражает
3. Могут тыкнуть не туда и потом говорят: У меня не работает.
4. У некоторых попросту не работает передача, опять же видимо из-за блокировки интернет соединения защитой.
К примеру на FTP сервере папка создаётся, имя файла создаётся, но содержимое отсутствует.

P.S чтобы сразу там отстранить людей, которые думают что это вирус и т.д, расскажу принцип и смысл скрипта:

Принцип простой.. скрипт копирует ключ продукта Windows и передаёт по FTP серверу код продукта Windwos
Для чего он? - Я свои скрипты сделал приватными. Скачивается документ из FTP сервера, в нём содержутся все ключи продукта Windows каждого пользователя, котороый туда был добавлен, если ключ Windows совпадает - ему разрешается доступ к моему скрипту. Всё это компилируется через AHK Protector

Я не знаю как можно передать серверу ключ, чтобы система Windows не ругалась. На ум приходит только Проводник Windows, но лишнее открытие перед пользователем - не очень эстетично.

4 (изменено: wisgest, 2020-03-08 17:29:25)

Re: AHK: передача файлов через проводник Windows по FTP серверу

Не у всех это оповещение появляется, по причине другой системы защиты и передача по FTP просто блокируется.

При ошибке подключения надо выдавать сообщение с указанием возможной причины. На всех всё-равно не угодишь, у меня как раз ESET будет требовать разрешения для Проводника.

Run explorer.exe ftp://UserName:Password@ServerName,, Hide

Для работы с Проводником лучше использовать COM-автоматизацию (пример: http://forum.script-coding.com/viewtopi … 655#p94655 до слов в коде «Подстройка вида поиска» и после «Обрабатываем результаты поиска»).
Вместо самого Проводника, мне кажется, во многих случаях лучше использовать использующий ту же технологию оболочки Windows COM-объект Shell.Application. Вот пример на VBScript копирования c FTP: http://forum.script-coding.com/viewtopic.php?pid=53#p53. Можно сделать и в обратном направлении.

лишнее открытие перед пользователем - не очень эстетично.

Ну так при работе через оболочку Windows (в том числе через Проводник) очень даже может появиться окошко «Выполняется копирование» (или как там оно называется), так что надо следить за его появлением и сразу же делать невидимым.

+ открыть спойлер

P.S чтобы сразу там отстранить людей, которые думают что это вирус

«Оправдываются виновные.»

Я свои скрипты сделал приватными. Скачивается документ из FTP сервера, в нём содержутся все ключи продукта Windows каждого пользователя, котороый туда был добавлен

Фуууу. Лучше бы не оправдывался…

5

Re: AHK: передача файлов через проводник Windows по FTP серверу

Так вот кто ключами торгует.

6

Re: AHK: передача файлов через проводник Windows по FTP серверу

ypppu
Понимаю что это рофл, но будь я торговцем ключей, я бы тут не сидел xd