Страница 122 из 243
Добавлено: Чт окт 13, 2022 06:26
Monarch-LFV
sa, imig73
Спасибо! [/offtop]
Добавлено: Вт окт 18, 2022 18:37
Loopback
Версия 2.2.9 beta
- потенциальная проблема в Set при использовании в нескольких потоках
* изменена работа Sleep на малых задержках
- исправлено падение при использовании функций ТК в отдельных процессах
* дополнены и документированы неявные преобразования типов в условиях при операциях
* дополнительная оптимизация сообщений об ошибках для встроенных команд
* отдельное сообщение об ошибке для имени переменной окружения
* отдельное сообщение об ошибке при неправильном имени переменной для результата в командной записи
- Tweaks: исправлено спонтанное несрабатывание SetHotkeyAction
+ добавлены математические функции
+ Tweaks: более удобное задание флагов центрирования для ShowPopupMenu
+ Tweaks: дополнительные опции выравнивания меню для ShowPopupMenu
* Tweaks: по умолчанию блокируется повтор при нажатии клавиш в SetHotkeyAction
Добавлено: Чт окт 20, 2022 15:11
yozhik
Loopback
Спасибо большое, SetMessageAction теперь заработала как часики. С её помощью я наладил запуск ShowPopupMenu по кнопке на тулбаре, и убрал в архив изрядно послужившую TCMenuPopup.exe. Связка ShowPopupMenu+ShowPopupMenu конечно лучше работает в сравнении с TCMenuPopup.exe: и настроек больше, и фокус не перехватывает.
Попутно возник маленький вопрос. Прочитав о «ненадёжности» привязки msg к фиксированному номеру, я подумал, что затруднение решается использованием длинного номера, ведь чем больше цифр, тем меньше вероятность совпадений. Но после тестов выяснилось, что с номерами выше 5-значных связка просто не работает. Чем это объясняется?
Добавлено: Чт окт 20, 2022 15:57
Loopback
yozhik писал(а): Но после тестов выяснилось, что с номерами выше 5-значных связка просто не работает. Чем это объясняется?
Сообщения с номерами выше 65535 считаются зарезервированными системой. Опытным путем выяснил, что максимальное значение при котором отправка работает - 65536*2-1 = 131071. Похоже, это уже системное ограничение.
На самом деле, думаю, вероятность совпадения очень невелика. Знать бы еще точно, как система использует зарезервированный диапазон. Во всяком случае TCFS2Tools использует сообщения в этом диапазоне, и вроде за много лет проблем с этим не было.
Добавлено: Пт окт 21, 2022 22:15
MVV
Вообще, есть определенные диапазоны сообщений, и лучше придерживаться их. Указаны, например,
тут.
Коды 0x0000 .. 0x03FF - для системных сообщений, сюда лучше не лезть.
Сообщения в диапазонах 0x0400 (= WM_USER) .. 0x7FFF и 0x8000 (= WM_APP) .. 0xBFFF - для идентификаторов элементов и пользовательских классов окон (т.е. классов окон тотала). В этом диапазоне лежат тоталовские WM_USER+50 и WM_USER+51, но могут быть и другие коды, используемые элементами в Delphi/Lazarus. По идее, в этом диапазоне должно быть довольно безопасно использовать старшие номера, т.к. шанс, что элементы тотала начнут их использовать, мал, а кроме них эти номера никто не должен использовать.
Диапазон 0xC000 .. 0xFFFF - для уникальных идентификаторов, регистрируемых вызовом функции
RegisterWindowMessage. Эта функция предназначена для регистрации кодов, уникальных для всех окон системы, каждый её вызов для одной и той же строки возвращает тот же код, и вызовы для разных строк возвращают разные коды (думаю, если коды закончатся, функция начнёт возвращать ошибку). По идее, эти диапазоны нужны для резидентных утилит, взаимодействующих с окнами (или может быть для того, чтобы некоторая утилита могла принимать команды от других процессов без фиксации числовых кодов), и с командами самого тотала они пересекаться не будут (в пределах одного процесса удобнее фиксировать номера). В TCFS2 есть возможность отправки сообщений с такими кодами через функцию
regmsg.
Насколько я понимаю, коды выше 0xFFFF официально не поддерживаются, т.к. изначально параметр кода сообщения был 16-битным, поэтому там никто ничего не гарантирует.
Добавлено: Сб окт 22, 2022 00:29
Loopback
MVV
Да, думаю, что все-таки наиболее безопасный способ с регистрируемыми сообщениями.
MVV писал(а):В TCFS2 есть возможность отправки сообщений с такими кодами через функцию regmsg.
Хотел было спросить, почему у меня эта функция не работала, но пока готовил пример, обнаружил, что всё работает, если параметр указать без каких-либо кавычек (хотя вроде это строка).
MVV писал(а):Насколько я понимаю, коды выше 0xFFFF официально не поддерживаются, т.к. изначально параметр кода сообщения был 16-битным, поэтому там никто ничего не гарантирует.
Да, но с другой стороны раз работает, для личных целей можно использовать.
Добавлено: Сб окт 22, 2022 12:19
yozhik
Loopback писал(а):наиболее безопасный способ с регистрируемыми сообщениями
Я, например, выбрал способ с номерами только из-за его относительной краткости, т.к. в другом способе для регистрации сообщения предлагался дополнительный скрипт. Причём, интересно, ведь доп. скрипт — невелика сложность, но тут видимо первая подсознательная реакция — чем меньше шагов, тем путь предпочтительней. Теперь же, с regmsg, этой разницы между способами нет, значит с лёгким сердцем выбираем сообщения. Я уже так и сделал со всеми своими менюшками — всё чётко работает.
Добавлено: Вт ноя 01, 2022 20:12
Loopback
Версия 2.2.10 beta
* Tweaks: попытка исключить отображение меню Пуск в некоторых комбинациях с клавишей Win
* Tweaks: оптимизировано потребление памяти
+ сообщение о превышении лимита регистрируемых событий
+ Tweaks: увеличен до 128 лимит регистрируемых событий ControlSetMouseAction, SetHotkeyAction, SetMessageAction
+ сообщение в случае слишком большого числа актуальных параметров в вызове пользовательской функции
- исправлено падение после сообщения о фатальной ошибке синтаксиса
+ Tweaks: ControlSetMouseAction теперь срабатывает на панелях при активном тултипе старого типа (не Win32)
* внутренняя унификация и оптимизация строчных функций
+ добавлена функция Hex
- исправлена потенциальная проблема при одновременной работе пользовательских функций в разных потоках
- исправлена утечка памяти при работе пользовательских функций в разных потоках
- в вызовах ControlSetMouseAction, SetHotkeyAction и т.д. не работали команды, возвращающие значения
+ для SendCommand, возможность задания именем отсутствующих в totalcmd.inc команд
Добавлено: Пн мар 20, 2023 15:00
Monarch-LFV
Loopback
Обнаружилась ошибка в бета версиях, подробнее в
этой ветке форума.
Добавлено: Вт мар 21, 2023 17:54
Loopback
Monarch-LFV
Весьма интересно. У меня эта проблема тоже иногда проявляется, но очень редко, какой-то системы уловить не получается. Я вообще думал, что это какой-то косяк в моей конфигурации, там очень много всякого тестового. Но раз такое и на пустой конфигурации, даже не представляю, с чем это может быть связано. Почему-то кажется, что появилось это относительно недавно, может полгода назад, так что возможно это не бета как таковая, а одна из последних версий.
Добавлено: Вт мар 21, 2023 18:13
sa
Loopback писал(а):на пустой конфигурации
А точно на
пустой воспроизводится?
Monarch-LFV говорил про
одинаковую конфигурацию на разных версиях.
У меня TC тоже стоит в автозагрузке системы, сбрасывания меню не замечал.
Добавлено: Вт мар 21, 2023 18:36
Loopback
sa
Почему же, он писал:
...причем с любым конфигурационным файлом: хоть переименованный example идущий в составе плагина, хоть полностью пустой файл Autorun.cfg (0 байт).
Добавлено: Вт мар 21, 2023 18:45
sa
Loopback
Monarch-LFV
Прошу прощения, упустил... Значит, у меня удачная конфигурация!
Добавлено: Пт май 19, 2023 18:00
LonerD
В команде ControlSetMouseAction в справке описаны варианты отправки SendCommand.
А можно ли послать несколько команд?
Или для этого нужно делать вспомогательную em_-команду, и уже её вызывать через CommandExec ?
Добавлено: Пт май 19, 2023 21:53
Loopback
LonerD
Можно и так, но мне кажется проще через пользовательскую функцию (в бете):
Код: Выделить всё
ControlSetMouseAction ... SendMyCommands
Func SendMyCommands
SendCommand ...
SendCommand ...
SendCommand ...
EndFunc