Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Flash Приложения: AIR, Zinc и тд.

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.03.2008, 16:05
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 1  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
По умолчанию отключить кнопку контекстного меню (Zink)

Отключил в Цинке правую кнопку мыши (ignored), и конечно, по правому клику меню не выскакивает...
Но на клавиатуре есть кнопка контекстного меню (у меня слева от правого контрола, код 93) и при нажатии на ней меню флеш-плеера как миленькое вылазит.
Более того, эта кнопка не отлавливаетя в Цинке (хотя отлавливается в среде фле-редактора):

Код:
KL={}
KL.onKeyDown=function(){
	trace(Key.getCode())
	myKey.text=Key.getCode() // тестовое текстовое поле
}
Key.addListener(KL)
Как заблокировать?

Старый 19.03.2008, 17:45
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 2  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
написать ДЛЛ, перехватывающую эту кнопку и подключить к цинку.
я делал подобное, подменяя оконную процедуру плеера в цинке. получалось. или же хук.

Старый 19.03.2008, 20:09
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 3  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Что такое хук?

NB!
Интересное наблюдение. StandAlone плеер (флеша, а не цинка) перехватывает onKeyDown нажатие клавиши контекстного меню (выдает ее код и само меню не открывается).
А вот ActiveX плеер (в ИЕ и Цинке) не отлавливает onKeyDown и открывает меню.

Старый 19.03.2008, 22:13
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 4  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
хук - это hook. чти Win32 API. своего рода листенер. только слушает он системные сообщения. разные. кнопка "меню" - это семечки...
но с подменой оконной процедуры проще.


Последний раз редактировалось alexcon314; 20.03.2008 в 01:13.
Старый 24.03.2008, 20:36
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 5  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Что-то никак не пойму, как dll-файл подключить в цинке.

пишу в начале флешки:
Код:
myDLL = new mdm.DLL("имя_моей_библиотеки.dll")
файл имя_моей_библиотеки.dll лежит отдельно рядом с флешкой и цинковским экзешником.

При сборке пишет ошибку: не удалось найти компонент bpl...

Как dll подключить? Может его внедрять надо в экзешник как-то?

Старый 25.03.2008, 08:42
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 6  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
*.bpl - это из области дэлфи.
1. без этой строчки все работает?
2. что в длл? в чем собирали?
3. что в экзе?
4. версия цинка?

Старый 25.03.2008, 11:29
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 7  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
1. все работает (в смысле приложение, а запрет кнопки контекстного меню как раз не работает) и с этой строчкой (просто сообщение перед запуском выскакивало)
2. Собиралось как раз в дельфи, программист исправил, теперь сообщение не возникает.
3. Не понял насчет экзе? Работает нормально.
4. цинк 2.5.0.18

мне казалось, что в цинке достаточно вот эту строчку прописать
Код:
myDLL = new mdm.DLL("имя_моей_библиотеки.dll")
в самом начале кода и при выходе выполнить
Код:
myDLL.close();
И все. Но что-то пока не выходит.
Может надо выполнить DLL.call()?

А как узнать что dll-ка загрузилась?

Старый 25.03.2008, 12:33
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 8  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
>>мне казалось, что в цинке достаточно вот эту строчку прописать

Код:
myDLL = new mdm.DLL("имя_моей_библиотеки.dll")в самом начале кода и при выходе выполнить

Код:
myDLL.close();>>
так и надо поступать. myDll.call() вызываем по небходимости вызова длл-ной функции, не забывая про список параметров.
у меня версия 2.5.0.34, чего и вам желаю
Код:
hDll = new mdm.DLL(dllPath);
if (!hDll.isLoaded) {
	mdm.prompt("Dll load failed!");
	return;
}
только true isLoaded будет при реалной загрузке. если длл уже в оперативке (как например системная какая-нибудь) будет false. но работать все равно должно.
если есть сомнения в работоспособности кода в длл - дебажить надо и все. как - это вопрос отдельный. элементарно: встроить в код длл какой-нибудь мессаджбокс, чтоб выскакивал в нужном месте. ну или debag tools разного рода юзать.
Код:
//  в длл встраиваем такие функции. ReplaceWndProc вызываем из цинка или
 //сразу при загрузке длл из EntryPoint. 
//предварительно надо найти окно плеера в цинке 

LRESULT CALLBACK GetMsgProc(HWND hWnd,UINT nMsg,WPARAM wParam,LPARAM lParam){

		switch (nMsg) {
			case WM_MOUSEMOVE:
			// ...
			break;
			case WM_MBUTTONUP:
			// ...	
			break;
			case WM_RBUTTONUP:
			// ...
			break;
			case WM_LBUTTONDBLCLK:
			// ...
			break;
			case  WM_SYSKEYDOWN:
			// ...	
			break;
			case WM_KEYDOWN:
					switch (wParam)
					{
						case VK_LEFT:
							break;
						case VK_RIGHT:
							break;
						case VK_UP:
							break;
						case VK_DOWN:
							break;
						case VK_HOME:
							break;
						case VK_END:
							break;
						case VK_INSERT:
							break;
						case VK_DELETE:
							break;
						case VK_F2:
							break;
						case VK_LWIN:
							//MessageBox(hwin,(LPCSTR)"left winbuttonb down","",MB_OK);
							break;
						case 93:// это и есть кнопка "меню"
							//MessageBox(hwin,(LPCSTR)"menubutton down","",MB_OK);
							return 1; // прекращаем обработку сообщения, меню не вываливается
							break;
						default:
							//
							break;
					}
			default:
				//
			break;
		}
// передаем все далее родной процедуре на обработку
		return CallWindowProc((WNDPROC)oldWnd, hwin, nMsg, wParam, lParam);
} 
// поиск окна плеера fName - заголовок (title) формы приложения
// имя класса окна плеера можно узреть в WinSpector'e, например.
HWND fwin = FindWindow(NULL,fName);
HWND tpan = FindWindowEx(fwin,NULL,(LPCSTR)"TPanel",NULL);
hwin = FindWindowEx(tpan,NULL,(LPCSTR)"FlashPlayerControl_MacromediaFlashPlayerActiveX_7309416",NULL);
// собственно подмена оконной процедуры
extern "C" __declspec(dllexport)LONG ReplaceWndProc(BOOL bSet){
	if(bSet){
		oldWnd = SetWindowLong(hwin, GWL_WNDPROC, (LONG)GetMsgProc);
		return oldWnd;
	} else{ 
		
		return SetWindowLong(hwin, GWL_WNDPROC, oldWnd);
	}
}
откопал кусок исходника рабочего. посмотрите. может пригодится.
Вариант с хуком принципиально не отличается. вместо подмены надо юзать
SetWindowsHookEx(WH_GETMESSAGE, hpHookProc, hHookDll, hthread);


Последний раз редактировалось alexcon314; 25.03.2008 в 12:54.
Старый 25.03.2008, 13:19
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 9  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Спасибо!
Видно дело именно в запрятанном окне цинка (dll-ка была рассчитана на стандартное приложение) Будем искать

А теперь такой вопрос:
dll подгружается извне, поэтому возможна ситуация, когда пользователь сможет запустить экзешник без dll-ки и нажав на кнопку контекстного меню увидит-таки флешовое окно. Можно ли внедрить dll прямо в экзешник?

Старый 25.03.2008, 13:46
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 10  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
это предусмотрено в механизме создания и внедрения в ехе собственных расширений (в триале недоступно).
вариант: зашить длл в библиотеку (цинк, не путать с флэш-библиотекой) приложения и программно ее распаковывать при старте. далее подрубать длл как обычно из каталога распаковки. (я не пробовал).
вариант с отсутствующей длл, о котором вы говорите, мне представляется маловероятным, ибо распространять приложение вы будете вместе с ней и никак иначе(?), одним инсталл-пакетом, возможно, благо такие возможности у цинка есть. зачем юзеру париться и запускать ехе без длл? ... впрочем, вам виднее.


Последний раз редактировалось alexcon314; 25.03.2008 в 13:50.
Создать новую тему Ответ Часовой пояс GMT +4, время: 16:56.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 16:56.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.