Русское сообщество AutoIt

  • Май 20, 2012, 11:58:01 *
  • Добро пожаловать, Гость
Пожалуйста, войдите или зарегистрируйтесь.

Войти
Расширенный поиск  

Новости:

Создана конференция в Jabber'е для обсуждения мелких вопросов касающихся AutoIt.

Всем у кого есть джаббер-клиент, могут присоединиться к конференции по адресу xmpp:autoit@conference.jabber.ru

Комната/Конференция/Чат не призвана заменить этот форум, а лишь для ускорения получения ответов на элементарные и короткие вопросы, которые возможно не требуют создания специальной темы на данном форуме. Для всех остальных, сколь-нибудь сложных и комплексных проблем - исключительно на форум. Комната является постоянной, но при заходе у пользователя будет отсутствовать право писать в общий чат.

Тема на форуме.

Реклама

Автор Тема: многократная отправка в буфер обмена названий большого количества файлов  (Прочитано 3668 раз)

0 Пользователей и 1 Гость смотрят эту тему.

Alexey [?]

  • Новичок
  • *
  • Репутация: 0
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 101
  • Версия AutoIt: 3.3.0.0
    • Награды
Версия AutoIt: 3.3.0.0

Описание:
1) в окно программы я перетаскиваю какое-то количество файлов (как правило, это будет 30-60)
2) программа по очереди отсылает в буфер обмена название каждого файла (без расширений и без точки перед расширением), начиная с последнего

Примечания:
это всё пригодится для упрощения добавления заданий в программу u-torrent
скрипт для меня имеет смысл в том числе и потому, что в процесс добавления заданий будет активно вовлечена утилита для работы с буфером обмена CLCL




  Записан

Yashied [?]

  • Глобальный модератор
  • AutoIt MVP
  • *
  • *****
  • Репутация: 1905
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 3967
  • Версия AutoIt: 3+
    • Награды
программа по очереди отсылает в буфер обмена название каждого файла (без расширений и без точки перед расширением), начиная с последнего

Что значит по очереди? С каким-то интервлом или как?




  Записан
Думай, прежде чем говорить.

CreatoR [?]

  • Администратор
  • *
  • *****
  • Репутация: 1399
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 5058
  • Версия AutoIt: 3.2.8.1+
  • AutoIt is simple, subtle, elegant
    • WWW
    • Награды
Примерно так:

Код: AutoIt [Выделить]
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ListViewConstants.au3>
#include <Array.au3>

Global Const $WM_DROPFILES = 0x233

Global $aDroppedFiles[1]
Global $aIncludeFilesMask = StringSplit(".torrent", "|") ;Разрешённые расширения файлов
Global $iShowInvalidExtsMessage = 1 ;Показывать сообщение о неподдерживаемых расширении файлов
Global $iClipPutInterval = 1000 ;Время ожидания (в миллисекундах) между отправкой файла в буфер обмена

$hGUI = GUICreate("Drop Files GUI", 500, 400, -1, -1, -1, BitOR($WS_EX_ACCEPTFILES, $WS_EX_TOPMOST))
GUIRegisterMsg($WM_DROPFILES, "WM_DROPFILES_FUNC")

GUICtrlCreateLabel('', 0, 0, 500, 400)
GUICtrlSetState(-1, $GUI_DROPACCEPTED)

GUISetState()

While 1
    $Msg = GUIGetMsg()
   
    Switch $Msg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $GUI_EVENT_DROPPED
            $sNotValidExtPath = ""
           
            _ArraySort($aDroppedFiles, 1, 1)
           
            For $i = 1 To UBound($aDroppedFiles)-1
                If _DroppedFileIsValidExt($aDroppedFiles[$i]) Then
                    ClipPut(StringRegExpReplace($aDroppedFiles[$i], '^.*\\|\.[^\.]*$', ''))
                   
                    If $iClipPutInterval Then
                        Sleep($iClipPutInterval)
                    EndIf
                Else
                    $sNotValidExtPath &= $aDroppedFiles[$i] & @CRLF
                EndIf
            Next
           
            If $iShowInvalidExtsMessage And $sNotValidExtPath <> "" Then
                MsgBox(262144+48, "Attention!", "You dropped file(s) with non valid extension/attribute:" & @CRLF & @CRLF & $sNotValidExtPath, 0, $hGUI)
            EndIf
    EndSwitch
WEnd

Func _DroppedFileIsValidExt($sPath)
    For $i = 1 To $aIncludeFilesMask[0]
        If StringRegExp($sPath, '(?i)\Q' & $aIncludeFilesMask[$i] & '\E$') Or StringInStr(FileGetAttrib($sPath), $aIncludeFilesMask[$i]) Then
            Return True
        EndIf
    Next
   
    Return False
EndFunc

Func WM_DROPFILES_FUNC($hWnd, $msgID, $wParam, $lParam)
    Local $nSize, $pFileName
    Local $nAmt = DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", 0xFFFFFFFF, "ptr", 0, "int", 255)
   
    $aDroppedFiles = 0
    Dim $aDroppedFiles[$nAmt[0]+1]
   
    For $i = 0 To $nAmt[0] - 1
        $nSize = DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", $i, "ptr", 0, "int", 0)
        $nSize = $nSize[0] + 1
        $pFileName = DllStructCreate("char[" & $nSize & "]")
       
        DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", $i, "ptr", DllStructGetPtr($pFileName), "int", $nSize)
       
        $aDroppedFiles[0] += 1
       
        $aDroppedFiles[$aDroppedFiles[0]] = DllStructGetData($pFileName, 1)
        $pFileName = 0
    Next
   
    ReDim $aDroppedFiles[$aDroppedFiles[0]+1]
EndFunc


Добавлено: Июнь 13, 2010, 10:39:42
Alexey  [?]
Цитата
это всё пригодится для упрощения добавления заданий в программу u-torrent
Я уверен что можно найти метод управления этой программой по проще.




  Записан
Правила, Поиск, Супер тема


AutoIt is simple, subtle, elegant.



«Не оказываю техподдержку через ПМ/ICQ, и по электронной почте - для этого есть форум. (C)»
«Законы Мэрфи неоспоримы!»


Мои работы

Kaster [?]

  • Глобальный модератор
  • *
  • *****
  • Репутация: 502
  • Online Online
  • Пол: Мужской
  • Сообщений: 3286
  • Версия AutoIt: 3.3.8.1
  • Мой Аватар, он лучший самый
    • Награды
OffTopicCreatoR  [?]
Цитата
Я уверен что можно найти метод управления этой программой по проще.
к сожалению, utorrent не предоставляет COM-интерфейс для взаимодействия




  Записан
Конференция посвященная AutoIt на jabber.ru - autoit@conference.jabber.ru
Как попасть на конференцию читаем тут
Файлы можете качать сюда - Файловая область
Продолжать дискуссию в теме отмеченной как "Решенная" - моветон.
Банхамером не обладаю, так что расслабьтесь ;)
Банхамером обладаю, так что не расслабляться :Ban:

CreatoR [?]

  • Администратор
  • *
  • *****
  • Репутация: 1399
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 5058
  • Версия AutoIt: 3.2.8.1+
  • AutoIt is simple, subtle, elegant
    • WWW
    • Награды
Kaster  [?]
Цитата
к сожалению, utorrent не предоставляет COM-интерфейс для взаимодействия
Я не говорил про COM.
У uTorrent кроме доступного WebAPI/UI и поддержки командной строки, имеется довольно простой интерфейс, и можно получить доступ почти ко всем его элементам.




  Записан

Alexey [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 0
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 101
  • Версия AutoIt: 3.3.0.0
    • Награды
Примерно так:
странно, но при первой же попытке добавить несколько файлов с расширением .torrent пишет "You dropped file(s) with non valid extension/attribute"

Что значит по очереди? С каким-то интервлом или как?
имеется в виду, что скрипт вместо меня должен пройти все названия и каждое из них одно за другим отправлять в буфер обмена. так же, как если бы это я нажимал на последнем файле F2, затем - CTRL+C, ESC, UP, F2, CTRL+C...
только скорость у скрипта, естественно, должна быть мгновенной

Я уверен что можно найти метод управления этой программой по проще.
из стандартных средств управления незамысловатый u-torrent предоставляет далеко не всё, что требуется для комфортной работы. поэтому приходиться идти на всякие ухищрения, чтобы хоть в каких-то моментах упростить использование u-torrent'а
в частности, при запуске окнá "Добавить Торрэнт" у меня происходит автоматическая вставка содержимого бýфера обмена чётко в нужное поле (задействована баснословно полезная программа Actual-Window-Manager)

У uTorrent ... имеется довольно простой интерфейс, и можно получить доступ почти ко всем его элементам.
раз уж такое дело, спрошу на всякий случай. есть огромная необходимость сделать так, чтобы в окне с содержимым торрэнт-файла перестали отображаться файлы определённых расширений. эту мечту реально осуществить ?
« Последнее редактирование: Июнь 13, 2010, 16:20:11 от Alexey »



  Записан

CreatoR [?]

  • Администратор
  • *
  • *****
  • Репутация: 1399
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 5058
  • Версия AutoIt: 3.2.8.1+
  • AutoIt is simple, subtle, elegant
    • WWW
    • Награды
Alexey  [?]
Цитата
при первой же попытке добавить несколько файлов с расширением .torrent пишет "You dropped file(s) with non valid extension/attribute"
Сорри, поправил.

Цитата
есть огромная необходимость сделать так, чтобы в окне с содержимым торрэнт-файла перестали отображаться файлы определённых расширений
Это свойство (опция) поддерживается самим uTorrent?
Я бы потестил это дело, uTorrent есть, но что мне нужно сделать чтобы воспроизвести подобную ситуацию (для тестирования)?




  Записан

Alexey [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 0
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 101
  • Версия AutoIt: 3.3.0.0
    • Награды
Сорри, поправил.
в буфер теперь добавляется. но в работе скрипта заметил некоторые моменты, которые хотелось бы поменять:

1) вместе с названием копируется и путь каждого файла. но путей быть не должно
2) названия файлов добавляются с первого по последний. должно быть наоборот

3) названия файлов отправляются в буфер жутко медленно, где-то по 2 штуки за секунду. пережить можно, но ощутимо огорчает. это исправимо ?
4) можно ли изменить окно скрипта так, чтобы в нём не было ничего вообще ? - ни надписи "Drag to the ListView some file(s)", ни области со столбцами Сol1, Сol2, Сol3, ни самогó списка названий

Это свойство (опция) поддерживается самим uTorrent?
в том-то и дело, что не поддерживается никак. необходимо самомý каждый раз смотреть на список с файлами и вручную десятки/сотни галочек ставить/убирать
данная деятельность не представляет никакой трудности для тех, кто делает это пару раз за пару дней, но для меня давно назрела острейшая необходимость автоматизировать этот процесс
есть целый ряд форматов, которые я при закачке всегда, при любых обстоятельствах игнорирую, поэтому и хочется их даже не видеть нигде, а просто знать, что они, вероятно, есть, но галочки с них автоматически ужé были сняты

Я бы потестил это дело, uTorrent есть, но что мне нужно сделать чтобы воспроизвести подобную ситуацию (для тестирования)?
честно, не знаю. u-torrent ничего такого не предлагает. единственное, с чем слегка похожим сталкивался - в подобной проге "vuze" есть в настройках пункт, предлагающий перечислить список форматов, которые будут исключены из создаваемого торрэнта. как-то так - я не особо в ней разбирался, поскольку искал в её опциях пункт, предлагающий перечислить список форматов, которые не будут отбражаться в окне содержимого торрэнт-файла. но именно такого там тоже не было




  Записан

CreatoR [?]

  • Администратор
  • *
  • *****
  • Репутация: 1399
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 5058
  • Версия AutoIt: 3.2.8.1+
  • AutoIt is simple, subtle, elegant
    • WWW
    • Награды
Alexey  [?]
Цитата
вместе с названием копируется и путь каждого файла. но путей быть не должно
Ок, поправил.

Цитата
названия файлов добавляются с первого по последний. должно быть наоборот
Странно, цикл же с конца перебирает файлы...

Цитата
названия файлов отправляются в буфер жутко медленно, где-то по 2 штуки за секунду
Ну так там специально добавлена пауза, она устанавливается в переменной $iClipPutInterval - можно выставить на 0 чтобы паузы небыло вовсе.

Цитата
можно ли изменить окно скрипта так, чтобы в нём не было ничего вообще ? - ни надписи "Drag to the ListView some file(s)", ни области со столбцами Сol1, Сol2, Сol3, ни самогó списка названий
Ок.

Цитата
в том-то и дело, что не поддерживается никак. необходимо самомý каждый раз смотреть на список с файлами и вручную десятки/сотни галочек ставить/убирать
Ну значит поддерживается, значит можно автомтизировать эти галочки. Вы видимо меня не понимаете.

Цитата
честно, не знаю. u-torrent ничего такого не предлагает
Я к тому что мне нужно воспроизвести то что видите вы, чтобы я знал что конкретно требуется. Т.е как мне отобразить диалог где нужно что то делать?




  Записан

Alexey [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 0
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 101
  • Версия AutoIt: 3.3.0.0
    • Награды
Цитата
Странно, цикл же с конца перебирает файлы...
может, попробовать поставить наоборот, с начáла? вдруг получится. на данный момент:
1. если группу файлов перетаскавать в окно скрипта, удерживая мышкой первый файл, то названия добавляются строго в обратном от нужного порядке
2. если перетаскавать, удерживая любой, кроме первого, то никакого порядка вообще нет - ни нужного, ни обратного (в буфер обмена всё добавляется вперемешку)

в идеале желательно, чтобы вне зависимости от того, за какóй из выделенных файлов я хватаюсь курсором и перетаскиваю группу файлов, всегда названия добавлялись от последнего по первое
если это не решаемо, то хоть первый пункт хотелось бы исправить

Цитата
Ну так там специально добавлена пауза, она устанавливается в переменной $iClipPutInterval - можно выставить на 0 чтобы паузы небыло вовсе
вместо 1000 попробовал 100 - работает всё ещё надёжно, но не так быстро, как хотелось бы; при значении 10 - очень быстро (именно как надо), но результат не приемлемый (значительный процент названий не добавился вообще); при 0 - по сути, не работает никак (добавляется только одно название, какое бы количество я не выбирал); в итоге вернулся на 100

Цитата
Ну значит поддерживается, значит можно автомтизировать эти галочки. Вы видимо меня не понимаете.
автоматизировать их хоть как-то (макрос нажатия клавиш) я и сам смог давно - при открытии окнá "с галочками" помимо автоматической вставки из буфера у меня сделано так, что все галочки сами снимаются со всех строк
нужно же убрать с пóля зрения сами стрóки, в которых есть нежелательные для меня расширения (к примеру, .log, .jpg, .m3u...)

Цитата
Я к тому что мне нужно воспроизвести то что видите вы, чтобы я знал что конкретно требуется. Т.е как мне отобразить диалог где нужно что то делать?
скачать какой-нибудь torrent-файл; открыть u-torrent (у меня версия 1.61); нажать "открыть torrent" (ctrl+O); появится окно "Добавить торрент" с содержимым torrent-файла




  Записан

CreatoR [?]

  • Администратор
  • *
  • *****
  • Репутация: 1399
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 5058
  • Версия AutoIt: 3.2.8.1+
  • AutoIt is simple, subtle, elegant
    • WWW
    • Награды
Alexey  [?]
Цитата
может, попробовать поставить наоборот, с начáла?
А может для начала стоило паопробовать мой обновлённый скрипт? я там так и сделал ;)


Цитата
в идеале желательно, чтобы вне зависимости от того, за какóй из выделенных файлов я хватаюсь курсором и перетаскиваю группу файлов, всегда названия добавлялись от последнего по первое
А как определить какой файл должен быть первым? по каким критериям сортировать список файлов?

Цитата
10 - очень быстро (именно как надо), но результат не приемлемый (значительный процент названий не добавился вообще)
Потому что буфер обмена (а точнее программа которая с ним работает) не обрабатывает информацию так быстро.

Цитата
качать какой-нибудь torrent-файл; открыть u-torrent (у меня версия 1.61); нажать "открыть torrent" (ctrl+O); появится окно "Добавить торрент" с содержимым torrent-файла
Попробую.




  Записан

Alexey [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 0
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 101
  • Версия AutoIt: 3.3.0.0
    • Награды
Цитата
А может для начала стоило паопробовать мой обновлённый скрипт? я там так и сделал ;)
ты всерьёз полагаешь, что я сначала отвечаю, а только потóм пробую обновлённый скрипт? ;)

Цитата
А как определить какой файл должен быть первым? по каким критериям сортировать список файлов?
по алфавиту, начиная с последнего




  Записан

CreatoR [?]

  • Администратор
  • *
  • *****
  • Репутация: 1399
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 5058
  • Версия AutoIt: 3.2.8.1+
  • AutoIt is simple, subtle, elegant
    • WWW
    • Награды
Alexey  [?]
Цитата
ты всерьёз полагаешь, что я сначала отвечаю, а только потóм пробую обновлённый скрипт?
В этом случае да, и ничего удивительного тут нет, был на то повод:
[?]
Цитата
может, попробовать поставить наоборот, с начáла?
это было написано после того как я изменил порядок цикла в скрипте.

[?]
Цитата
по алфавиту, начиная с последнего
Можно добавить _ArraySort перед циклом.

По поводу проблемы добавления имён при небольшой паузе - а что если их добавлять не по одному, а все сразу, одним заходом?




  Записан

Alexey [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 0
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 101
  • Версия AutoIt: 3.3.0.0
    • Награды
Цитата
Можно добавить _ArraySort перед циклом
давай попробуем, всё равно ведь пока что при любом варианте названия добавлялись с первого по последнее
Цитата
По поводу проблемы добавления имён при небольшой паузе - а что если их добавлять не по одному, а все сразу, одним заходом?
при этом в буфер они как будут помещаться ? если списком, то это совсем не то




  Записан

Yashied [?]

  • Глобальный модератор
  • AutoIt MVP
  • *
  • *****
  • Репутация: 1905
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 3967
  • Версия AutoIt: 3+
    • Награды
Может я чего-то пропустил, но как вообще будет осуществляться синхронизация добавления-чтения информации из буфера обмена? Полагаться на некий интервал (задержку), это крайне неправильный подход.

...программа по очереди отсылает в буфер обмена название каждого файла...

А что дальше будет происходить? Каким образом (какая программа) будет брать эту информацию из буфера обмена? Как мы можем написать код для заполнения буфера обмена, не зная принципа работы программы приемника.


Добавлено: Июнь 16, 2010, 12:10:10
Все, что здесь насоветано, это топтание на месте. Alexey, опиши пожалуйста весь процесс (от и до) добавления файлов в uTorrent.




  Записан
 


Похожие темы
Тема Автор Ответов Просмотров Последний ответ
Скопировать выделенный текст в буфер обмена (без CTRL-C)
Стол заказов
magic 9 3991 Последний ответ Июль 25, 2010, 14:14:43
от DOZOMIGAMIUS
Редактирование буфер обмена
AutoIt для новичков
Scarabay 7 1542 Последний ответ Апрель 18, 2010, 07:51:59
от snoitaleR
Потоковое копирование через буфер обмена
Стол заказов
krapo 4 1539 Последний ответ Сентябрь 14, 2010, 17:56:32
от krapo
Как узнать, что в копирование в буфер обмена завершено?
AutoIt для новичков
Suppir 18 1442 Последний ответ Февраль 19, 2011, 12:44:53
от Suppir
Корректная передача русского текста через буфер обмена
Стол заказов
Suppir 0 945 Последний ответ Февраль 21, 2011, 18:25:36
от Suppir
копирование в буфер обмена адреса картинки
AutoIt для новичков
Mederes 3 875 Последний ответ Апрель 18, 2011, 15:53:02
от madmasles
Как скопированный в буфер обмена текст построчно в ListView загрузить
Стол заказов
StarEdik 5 639 Последний ответ Октябрь 21, 2011, 16:20:03
от StarEdik
Копирование содержимого тега code в буфер обмена
О проекте и форуме
CreatoR 2 513 Последний ответ Январь 29, 2012, 00:21:48
от CreatoR
Как получить из IE данные в буфер обмена?
AutoIt для новичков
ViktorSPB 8 397 Последний ответ Март 06, 2012, 12:26:49
от ViktorSPB
Скопировать скриншот в буфер обмена
AutoIt для новичков
z1352 6 263 Последний ответ Март 05, 2012, 14:55:53
от z1352


Реклама

* Последние сообщения на форуме
post Проблема с циклами While
[AutoIt для новичков] Andeangl Сегодня в 11:03:15
post Уроки программирования и автоматизации посредством AutoIt для чайников
[AutoIt для новичков] aak Сегодня в 09:41:45
post Re: Как спарсить ссылку внутри тега "td" определенного класса
[Регулярные выражения и прочее] eropov Сегодня в 05:27:00
post Re: Ограничение доступа(блокировка) к компьютеру если не вставлен носитель с ключом
[AutoIt для новичков] Pat4005 Сегодня в 01:02:55
post Re: Развитие русской справки
[Инструменты и помощь по AutoIt] CreatoR Сегодня в 00:02:03
post Re: Развитие русской справки
[Инструменты и помощь по AutoIt] CreatoR Май 19, 2012, 23:55:37
post Узнать значение возвращаемое функцией javascript
[Автоматизация IE и Web-интерфейса] Viktor1703 Май 19, 2012, 23:25:05
post Re: Проверка запущенного процесса на удаленной машине
[AutoIt для новичков] sngr Май 19, 2012, 23:06:52
post Re: Проверка запущенного процесса на удаленной машине
[AutoIt для новичков] Dm666 Май 19, 2012, 22:38:13
post Re: Иконка AutoIt3 для разных Dock-ов
[Графика и творчество в рамках AutoIt] Ganibal95 Май 19, 2012, 22:21:35

* Пользователи онлайн
  • Dot Гостей: 83
  • Dot Скрыт: 1
  • Dot Пользователей: 21
  • Dot Пользователи Online: