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 

Single Post  Topic: Autorun 
Author Message
Orion9



PostPosted: Tue Jun 10, 2025 17:46    Post subject: Reply with quote

Loopback wrote:
Не представляю, как сюда блокировку притянуть.

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

Если откинуть баги Гислера и Lazarus, остается только один вариант: сообщение с IDCANCEL посылается специально и с определенной целью. Быть может, в работе ТСх64 есть некий критичный момент, когда появление диалогового окна нежелательно и может привести к проблемам, именно поэтому сразу посылается сообщение о закрытии.

Например, AkulaBig недавно писал, что при использовании TCFS2 значок Тотала на панели задач пропадает, а потом опять появляется. Я тоже заметил этот "прикол", характерный только для ТСх64. Но дело не только в TCFS2. Такое происходит и при отправке сообщений окну ТС из Autorun. То есть, складывается впечатление, что ТСх64, обрабатывыая полученные сообщения и выполняя какие-то внутренние операции, скрывает главное окно и повторно его инициализирует. По крайней мере, так выглядит визуально на панели задач.

А теперь допустим, что в такой момент что-то произойдет и значок на панели задач так и не появится. Вот именно о таком критичном моменте я и говорил. Но это только мысли, которые к реальности могут не иметь никакого отношения.
Loopback wrote:
Экземпляр контрола штука не всегда надёжная. Он постоянен только тогда, когда количество созданных контролов в процессе работы не изменяется, т.е. они не удаляются и не создаются новые.

Спасибо за объяснения. Теперь я, кажется, стал это лучше понимать.
Loopback wrote:
Для получения хэндлов элементов главного окна лучше пользоваться RequestInfo.

Да, забыл о таком, думал с хэндлами прокатит. Но этот вариант действительно представляется более надежным. Только я не совсем понял, какой именно индекс заменяет TMyPanel6 в ТСх86, потому что именно в это окно я хотел рисовать вентихлятор )

Обновленная функция, которая не требует отдельных файлов с иконками (иконка берется из основного окна ТС сообщением 0x7f и поворачивается вызовом функции PlgBlt из gdi32.dll)
 Hidden text

Старая функция по-прежнему доступна и вызывается с удержнием CTRL.
Loopback wrote:
- узнать, включены ли значки
- узнать их размер
- получить панель, над которой находится курсор (ItemAtCursor)
- получить хэндл панели (RequestInfo)
- получить координаты этой панели (WinGetPos)
- вычислить прямоугольник, где может находиться курсор, с помощью размера значка
- получить координаты курсора (MouseGetPos)
- проверить, находится ли курсор в границах прямоугольника

Норм алгоритм, но нужно на практике проверить, как он будет работать. Но я не стал бы заморачиваться. Когда приходится дополнительно куда-то целиться, это немного напрягает.
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group