![]() |
отключить кнопку контекстного меню (Zink)
Отключил в Цинке правую кнопку мыши (ignored), и конечно, по правому клику меню не выскакивает...
Но на клавиатуре есть кнопка контекстного меню (у меня слева от правого контрола, код 93) и при нажатии на ней меню флеш-плеера как миленькое вылазит. :( Более того, эта кнопка не отлавливаетя в Цинке (хотя отлавливается в среде фле-редактора): Код:
KL={} |
написать ДЛЛ, перехватывающую эту кнопку и подключить к цинку.
я делал подобное, подменяя оконную процедуру плеера в цинке. получалось. или же хук. |
Что такое хук?
NB! Интересное наблюдение. StandAlone плеер (флеша, а не цинка) перехватывает onKeyDown нажатие клавиши контекстного меню (выдает ее код и само меню не открывается). А вот ActiveX плеер (в ИЕ и Цинке) не отлавливает onKeyDown и открывает меню. |
хук - это hook. чти Win32 API. своего рода листенер. только слушает он системные сообщения. разные. кнопка "меню" - это семечки...
но с подменой оконной процедуры проще. |
Что-то никак не пойму, как dll-файл подключить в цинке.
пишу в начале флешки: Код:
myDLL = new mdm.DLL("имя_моей_библиотеки.dll")При сборке пишет ошибку: не удалось найти компонент bpl... Как dll подключить? Может его внедрять надо в экзешник как-то? |
*.bpl - это из области дэлфи.
1. без этой строчки все работает? 2. что в длл? в чем собирали? 3. что в экзе? 4. версия цинка? |
1. все работает (в смысле приложение, а запрет кнопки контекстного меню как раз не работает) и с этой строчкой (просто сообщение перед запуском выскакивало)
2. Собиралось как раз в дельфи, программист исправил, теперь сообщение не возникает. 3. Не понял насчет экзе? Работает нормально. 4. цинк 2.5.0.18 мне казалось, что в цинке достаточно вот эту строчку прописать Код:
myDLL = new mdm.DLL("имя_моей_библиотеки.dll")Код:
myDLL.close();Может надо выполнить DLL.call()? А как узнать что dll-ка загрузилась? |
>>мне казалось, что в цинке достаточно вот эту строчку прописать
Код: myDLL = new mdm.DLL("имя_моей_библиотеки.dll")в самом начале кода и при выходе выполнить Код: myDLL.close();>> так и надо поступать. myDll.call() вызываем по небходимости вызова длл-ной функции, не забывая про список параметров. у меня версия 2.5.0.34, чего и вам желаю :) Код:
hDll = new mdm.DLL(dllPath);если есть сомнения в работоспособности кода в длл - дебажить надо и все. как - это вопрос отдельный. элементарно: встроить в код длл какой-нибудь мессаджбокс, чтоб выскакивал в нужном месте. ну или debag tools разного рода юзать. Код:
// в длл встраиваем такие функции. ReplaceWndProc вызываем из цинка илиВариант с хуком принципиально не отличается. вместо подмены надо юзать SetWindowsHookEx(WH_GETMESSAGE, hpHookProc, hHookDll, hthread); |
Спасибо!
Видно дело именно в запрятанном окне цинка (dll-ка была рассчитана на стандартное приложение) Будем искать :) А теперь такой вопрос: dll подгружается извне, поэтому возможна ситуация, когда пользователь сможет запустить экзешник без dll-ки и нажав на кнопку контекстного меню увидит-таки флешовое окно. Можно ли внедрить dll прямо в экзешник? |
это предусмотрено в механизме создания и внедрения в ехе собственных расширений (в триале недоступно).
вариант: зашить длл в библиотеку (цинк, не путать с флэш-библиотекой) приложения и программно ее распаковывать при старте. далее подрубать длл как обычно из каталога распаковки. (я не пробовал). вариант с отсутствующей длл, о котором вы говорите, мне представляется маловероятным, ибо распространять приложение вы будете вместе с ней и никак иначе(?), одним инсталл-пакетом, возможно, благо такие возможности у цинка есть. зачем юзеру париться и запускать ехе без длл? ... впрочем, вам виднее. |
| Часовой пояс GMT +4, время: 04:29. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.