Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Autorun
Goto page Previous  1, 2, 3 ... , 194, 195, 196  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
yahuu



Joined: 22 Jun 2023
Posts: 34

Post (Separately) Posted: Tue Jul 29, 2025 11:59    Post subject: Reply with quote

Orion9 wrote:

Да, в AHK есть примеры, как сделать обработку двойного или даже тройного нажатия клавиш, но и в Autorun можно сделать что-то похожее. Самый простой пример:
Code:
SetHotkeyAction /H:F12 F12DoublePress

Func F12DoublePress()
    Static t1 = 0
    If (GetUptime() - t1) < 300 Then
       ShowHint("F12 double pressed")
    EndIf
    t1 = GetUptime()
EndFunc

В примере не учитывается обработка одиночного нажатия, но если она нужна, то её можно добавить.


Спасибо, что предложили временное решение проблемы.
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 406

Post (Separately) Posted: Mon Aug 04, 2025 19:28    Post subject: Reply with quote

Оба варианта не работают:
Code:
FileCopy("c:\PortablePrograms\FileManagers\TotalCommanderPortable\Plugins\wlx\TC1by1\rus\1by1.exe", "c:\PortablePrograms\FileManagers\TotalCommanderPortable\Plugins\wlx\TC1by1\1by1", 1)
FileCopy(COMMANDER_PATH & "\Plugins\wlx\TC1by1\eng", COMMANDER_PATH & "\Plugins\wlx\TC1by1\1by1", 1)

Что я опять не так делаю?
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1579

Post (Separately) Posted: Tue Aug 05, 2025 11:33    Post subject: Reply with quote

AkulaBig
В первом случае непонятно, 1by1 на конце целевого пути - это существующий каталог или имя файла? Если имя файла, то у меня работает, а если имя каталога - то действительно, что-то не копируется. Что очень странно, такой сценарий точно тестировался.

Во втором - eng и 1by1 это же скорее всего каталоги? Тогда надо использовать DirCopy.
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 406

Post (Separately) Posted: Tue Aug 05, 2025 14:43    Post subject: Reply with quote

Loopback wrote:
Если имя файла, то у меня работает, а если имя каталога - то действительно, что-то не копируется

Имя каталога. Ибо:
Code:
dest Полный путь к целевому файлу или каталогу.

То-есть в справке написано, что можно использовать целевой каталог. Вроде команда copy винды так и работает. По крайней мере через COMSPEC все работает. Не думал, что надо имя файла указывать.
Loopback wrote:
Во втором - eng и 1by1 это же скорее всего каталоги? Тогда надо использовать DirCopy.

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

Интересно. Что тогда в целевом каталоге надо прописывать, если в нем необходимо прописывать имена файлов?
Я конечно вас понял. Новые команды, синтаксис пока не обкатан. Не знаю, ошибка это или нет. Вы меня знаете, мне и так сойдет. Лишь-бы работало. Думаю вы сами примете решение, ошибка это или нет. Я думаю, как минимум, если синтаксис отличается от стандартного, примеры привести-бы. А то там пример не дает представление, какой синтаксис правильный.

Добавлено спустя 2 часа 32 минуты:

Вот сейчас переделал копирование через DirCopy. Все отлично работает и понятно. Может тогда убрать не совсем понятные опции FileCopy и оставить возможность только одиночного копирования файла? Единственное, чтобы целевой каталог можно было-бы задавать без имени файла.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1579

Post (Separately) Posted: Tue Aug 05, 2025 20:54    Post subject: Reply with quote

AkulaBig wrote:
То-есть в справке написано, что можно использовать целевой каталог.

Можно, конечно, иначе бы смысла не было. Но как раз с этим сценарием и была проблема, странно, как она просочилась в релиз. Исправил.

AkulaBig wrote:
Ну я опять-же прочитал:

Это мой косяк, забываю уже. Разумеется, просто каталог передавать тоже можно. Не работало по той же причине.

AkulaBig wrote:
Новые команды, синтаксис пока не обкатан. Не знаю, ошибка это или нет.

Именно так, получается, это первые тесты "со стороны", больше никто проблему не репортил. Это ошибка, конечно.

AkulaBig wrote:
Может тогда убрать не совсем понятные опции FileCopy и оставить возможность только одиночного копирования файла?

Думаю не стоит. DirCopy копирует рекурсивно с подкаталогами, это не всегда требуется. А FileCopy по такому же принципу работает в Autoit/AHK, я ориентировался на них. Хотя примеры разных сценариев нужны, тут спорить не о чем.

В общем, исправил, попробуйте эту версию.

Версия 05.08.2025

Code:

- исправлено копирование файлов в существующий каталог с FileCopy
- исправлена установка размера буфера в параметрах DllCall (регресс с версии 2.2.17)
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 406

Post (Separately) Posted: Tue Aug 05, 2025 21:31    Post subject: Reply with quote

Loopback
Потестю. А сейчас новый вопрос. Что-то поиском не нашел TextFile.
Code:
      Local txt_SumatraPDF = COMMANDER_PATH & "\Plugins\wlx\TCSumatraPDF\SumatraPDF\SumatraPDF-settings.txt"
      Local LangSumatraPDF = TextFile(txt_SumatraPDF, rw)
      Local UiLang
      LangSumatraPDF.Begin()
      While Not LangSumatraPDF.AtEOF
         UiLang = obj.ReadLine()
         OutputDebugString(UiLang)
      Wend

Почему вот это не работает?
Loopback wrote:
DirCopy копирует рекурсивно с подкаталогами, это не всегда требуется.

С этим полностью согласен.

Добавлено спустя 9 минут:

Протестировал FileCopy. Все отлично работает.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1579

Post (Separately) Posted: Tue Aug 05, 2025 21:45    Post subject: Reply with quote

AkulaBig wrote:
Почему вот это не работает?

Если исправить две очевидные ошибки - rw должно быть в кавычках и obj.ReadLine() -> LangSumatraPDF.ReadLine(), то всё читается.

Видимо, вы пользуетесь версией x64, где проблему с автозакрытием окна ошибки полностью так и не удалось решить. Поскольку на этих ошибках вываливается сообщение, чётко указывающее причину.
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 406

Post (Separately) Posted: Tue Aug 05, 2025 22:13    Post subject: Reply with quote

Loopback wrote:
obj.ReadLine() -> LangSumatraPDF.ReadLine()

Блин, какой глупый косяк. Все заработало. Но окна ошибки нет ни в 32, ни в 64 ТС. Очень странно. Я-бы тогда и не спрашивал.
А с окном ошибки я вопрос легко решаю. Но решение не для этого форума. Приходится в загашнике держать нужный файлик.

Добавлено спустя 42 минуты:

Я специально легкий вопрос про ошибку задал. Чтобы немножечко размять ваши мозги Razz
А теперь серьезный вопрос. Ну вот такой код работает. Но конечно-же записывает значение в конец файла. А мне надо заменить существующее значение. Можно-ли это сделать в рамках объекта TextFile? У метода WriteLine нет свойства - номер строки.
Code:

      Local LangSumatraPDF = TextFile(txt_SumatraPDF, "rw")
      Local UiLang
      LangSumatraPDF.Begin()
      While Not LangSumatraPDF.AtEOF
         UiLang = LangSumatraPDF.ReadLine()
         If StrPos(UiLang, "UiLanguage") > 0 Then
            LangSumatraPDF.WriteLine("UiLanguage = en")
         Endif
      Wend
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1579

Post (Separately) Posted: Wed Aug 06, 2025 00:06    Post subject: Reply with quote

AkulaBig wrote:
Очень странно.

Более чем, у меня обе ошибки выдавало.

AkulaBig wrote:
Можно-ли это сделать в рамках объекта TextFile?

Тут не совсем правильно то, что добавляется в конец файла, должно записаться сразу за строкой, где найдено UiLanguage. Впрочем есть догадка почему, потом посмотрю.

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

В любом случае использовать объект для файлика в пару килобайт - это как из пушки по воробьям. Целесообразнее прочитать его целиком и работать в памяти. Конкретно для этой задачи проще всего будет использовать List:

Code:

Local txt_SumatraPDF = COMMANDER_PATH & "\Plugins\wlx\TCSumatraPDF\SumatraPDF\SumatraPDF-settings.txt"
Local lst = List()
lst.LoadFromFile(txt_SumatraPDF)
For i = 0 to lst.Count-1
    If StrPos(lst[i], "UiLanguage") > 0 Then
        lst[i] = "UiLanguage = en"
        Break
    Endif
Next
lst.SaveToFile(txt_SumatraPDF)
Free(lst)
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 406

Post (Separately) Posted: Wed Aug 06, 2025 05:33    Post subject: Reply with quote

Loopback wrote:
Более чем, у меня обе ошибки выдавало.

Очень интересно. Пришлось поковыряться, но проблему все-же нашел. Оказывается, начиная с какой-то строки кода перестает выводиться нормальное сообщение об ошибке. То-есть написал я строке 111. Появилось сообщение об ошибке. Написал 111 на 15-20 строк ниже. Окно сообщения об ошибке стало появляться в верхнем левом углу экрана, причем за пределами экрана:

Так как я работаю с распахнутым окном ТС, я это сообщение не заметил сразу. Причем в ТС32 даже этого огрызка не видно. Похоже сообщение полностью уходит за границы экрана.
Loopback wrote:
Конкретно для этой задачи проще всего будет использовать List

Спасибо, я так и подумал. Некоторый опыт работы с текстовым файлом через List и через Dll у меня есть. С вашим кодом разберусь. Просто хотелось попробовать новый функционал.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1579

Post (Separately) Posted: Wed Aug 06, 2025 12:54    Post subject: Reply with quote

AkulaBig wrote:
Окно сообщения об ошибке стало появляться в верхнем левом углу экрана, причем за пределами экрана:

А вот это уже интересно. Похоже баг именно нового окна ошибки. Вероятно, связано с кодом позиционирования, который пытается расположить окно по центру окна TC. Но возможно, в момент его выполнения окно TC находится не в той позиции, где нужно. И остается непонятна зависимость от строчки кода, тут скорее все же какие-то другие факторы.

В любом случае у себя так и не смог повторить. Сделал отладочную версию, c выводом в DebugView, можете глянуть у себя, какие получаются координаты окон в момент возникновения проблемы?

AkulaBig wrote:
Просто хотелось попробовать новый функционал.

Понятно, но для всего свои инструменты. Для этой задачи объект не подходит.
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 406

Post (Separately) Posted: Wed Aug 06, 2025 17:21    Post subject: Reply with quote

Loopback wrote:
какие получаются координаты окон в момент возникновения проблемы?

Ну точно. Координаты минусовые:

А вот когда окно ошибки видно:

Вот сама ошибка:

Странная проблема. Раньше при правильном расположении окно было видно пока не нажмешь кнопку. Я имею ввиду если не появляется наг-скрин. А сейчас я его только гифкой поймал. Оно показывается и быстро исчезает. Это не с тестовой версией плагина, а уже до этого. Сейчас проверю на оф версии.
Loopback wrote:
Понятно, но для всего свои инструменты. Для этой задачи объект не подходит.

Буду знать.

Добавлено спустя 10 минут:

Блин. 2.2.1 у меня уже не работает. А 2.2.1.19.1 также работает. Не могу проверить. Именно это окно исчезает или на всех ошибках. Все забываю написать. ТС и 32 и 64.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1579

Post (Separately) Posted: Wed Aug 06, 2025 20:42    Post subject: Reply with quote

AkulaBig wrote:
Ну точно. Координаты минусовые

Очень интересные координаты у окна тотала. Ничего удивительного, что диалог появляется где-то за экраном. В общем ясно, что центрировать относительно окна тотала можно не всегда, в таких вот пограничных состояниях надо выравнивать по центру экрана. Осталось только понять, как такое состояние достоверно отличить от нормального. Не уверен, что прямоугольник всегда будет 1 0 1 0.

Вот что еще подумал, я не проверяю результат GetWindowRect, надо бы убедиться, что функция выполняется без ошибки, ну мало ли, иначе, полагаю, прямоугольник может содержать что-нибудь случайное. Заодно еще пару параметров проверим. Выложил по той же ссылке, проверьте, пожалуйста, еще раз. Достаточно будет только проблемного варианта.

AkulaBig wrote:
Оно показывается и быстро исчезает

Я не очень понял, что где проявляется, но вроде как проблемы автозакрытия окна никогда на 32-битном тотале не было.

Ох уж эти ковровые блокировки, картинки только через впн удалось увидеть...
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 406

Post (Separately) Posted: Wed Aug 06, 2025 20:58    Post subject: Reply with quote

Loopback wrote:
Очень интересные координаты у окна тотала.

Дак это координаты окна ТС? Странно. Я думал координаты сообщения. Что верно по факту. Окно ТС находится на экране.
Loopback wrote:
проверьте, пожалуйста,

Сейчас.

Добавлено спустя 16 минут:

Loopback

Я понял про координаты ТС и окна ошибки. Просто до этого не разбирался с результатом. Конечно окно ТС показывает неадекватный результат. Из-за этого ваше окно и уходит за пределы экрана. Сегодня общался с Гислером. Он назвал мой файл странным:

Вот я ввел новый атрибут файла Laughing
Координаты тоже СТРАННЫЕ Laughing
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1579

Post (Separately) Posted: Wed Aug 06, 2025 23:09    Post subject: Reply with quote

AkulaBig
Ого. Всё даже ещё интереснее. GetWindowRect выполняется с ошибкой (соответственно, координаты неверны), GetLastError даёт ошибку "неверный дескриптор окна". Т.е. как будто полученный ранее хэндл окна тотала - неверный. По строке TCWindow ... Handle видно, что он не нулевой, а значит был чуть ранее успешно получен поиском TTOTAL_CMD. Однако именно в этом месте по этому хэндлу не удается ничего получить - ни координаты, ни класс окна...

Честно говоря, пока не знаю что думать. Конечно, исправить именно эту проблему с диалогом можно, но смущает этот "неверный дескриптор окна", учитывая что это значение используется в огромном количестве мест (в т.ч. переменная AUTORUN_TCHANDLE). Хотя до сих пор никто не жаловался, что её значение невалидное, да и много чего не работало бы.

Кстати, я так понимаю, это такое на обеих разрядностях? И, в случае нормального выполнения, в строке Class: показывается "TTOTAL_CMD"?

Плохо, что у меня не повторяется, даже проверил на виртуалке с Win11, но увы.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3 ... , 194, 195, 196  Next
Page 195 of 196

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group