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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 13.01.2008, 20:20
Agon вне форума Посмотреть профиль Отправить личное сообщение для Agon Найти все сообщения от Agon
  № 1  
Ответить с цитированием
Agon

Регистрация: Mar 2002
Сообщений: 43
По умолчанию Как убрать Alt-Tab в Zinc

Нужно убрать Alt-Tab в полноэкранном приложении.
Сделал через mdm.Application.onAppChangeFocus но получается не эстетично: появляется окно выбора приложения, при выборе любого приложения, остается текущее, но иногда выскакивает меню "Пуск" и экран дергается т.к. разрешение не системное.

Прочитал здесь насчет перехвата событий через dll,
может этим путем пойти?
Хочу, чтобы ничего не появлялось, экран не мигал и т.д.

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

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

    HWND hWnd,	// window to receive hot-key notification
    int id,	// identifier of hot key
    UINT fsModifiers,	// key-modifier flags
    UINT vk 	// virtual-key code
   );
после непродолжительных поисков нашел еще
Код:
BOOL SystemParametersInfo(

    UINT uiAction,	// system parameter to query or set
    UINT uiParam,	// depends on action to be taken
    PVOID pvParam,	// depends on action to be taken
    UINT fWinIni 	// user profile update flag
   );
эту функцию можно вызывать прямо из цинка, подключив user32.dll.
Цитата:
В некоторых случаях (например, при работе в полноэкранном режиме, показе своей презентации или экранной заставки ...) бывает полезно заблокировать перечисленные комбинации клавиш. Они блокируются при работе системы в режиме "экранная заставка" , который в свою очередь несложно включить и выключить:

// Включение режима
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, 0, 0);
// Выключение режима
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 0, 0, 0);
численное представление константы SPI_SCREENSAVERRUNNING есть 97. то бишь можно вызывать так
SystemParametersInfo(97, 0, 0, 0);
...
ха-ха. под XP не катит. тогда хук ставить. про хуки см статью в ссылках по ZInc "слушаем систему". примерчик может изготовлю по-позже, но сейчас некогда.


Последний раз редактировалось alexcon314; 14.01.2008 в 11:33.
Старый 15.01.2008, 12:37
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 3  
Ответить с цитированием
alexcon314
listener

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

а вот и пример, все проще оказалось
Код:
// отключаем ALT+TAB
// задействуем обработчик события onAppExit чтобы при выходе все "восстановить"  
mdm.Application.enableExitHandler();
mdm.Application.onAppExit = function() {
	UnSet();
	myDLL.close();
	mdm.Application.exit();
};
// принудительно ставим заголовок формы и приложения в таскбаре, 
// чтобы по ним найти хэндл
formTitle = mdm.Forms.MainForm.title = "form";
appTitle = mdm.Application.title = "app";
// получаем хэндл окна
var wList = mdm.System.getWindowList();
var i = 0;
while (wList[i][1]) {
	if (wList[i][0] == formTitle || wList[i][0] == appTitle) {
		hwnd = wList[i][1];
	}
	i++;
}
myDLL = new mdm.DLL("user32.dll");
SetKey();
// параметр 0x003e  выбран произвольно, но он должени быть в
// пределах от 0x0000 до 0xBFFF, и имеет смысл уникального id
// для комбинации клавиш.
// 1 - это MOD_ALT константа
// 9 - это VK_TAB константа
function SetKey() {
	// описание вызываемой функции.
	//BOOL RegisterHotKey(
    			//HWND hWnd,	// window to receive hot-key notification
    		            //int id,	// identifier of hot key
    		            //UINT fsModifiers,	// key-modifier flags
    		            //UINT vk 	// virtual-key code
   //)
	myDLL.addParameter("integer", hwnd);
	myDLL.addParameter("integer", 0x003e);
	myDLL.addParameter("integer", 1);
	myDLL.addParameter("integer", 9);
	mdm.prompt(myDLL.call("boolean", "RegisterHotKey")); 
	// промт конечно можно убрать: myDLL.call("boolean", "RegisterHotKey")
	myDLL.clear();
}
function UnSet() {
	// здесь возвращаем все на круги своя
	// описание вызываемой функции.
	//BOOL UnregisterHotKey(
    				 //HWND hWnd,	// window associated with hot key
    				//int id 	// identifier of hot key
   //);
	myDLL.addParameter("integer", hwnd);
	myDLL.addParameter("integer", 0x003e);
	mdm.prompt(myDLL.call("boolean", "UnregisterHotKey"));
	myDLL.clear();
}


Последний раз редактировалось alexcon314; 15.01.2008 в 12:47.
Старый 15.01.2008, 14:33
Agon вне форума Посмотреть профиль Отправить личное сообщение для Agon Найти все сообщения от Agon
  № 4  
Ответить с цитированием
Agon

Регистрация: Mar 2002
Сообщений: 43
Цитата:
или же веские основания есть все-таки?
раньше мне альттаб не мешал, но после очередной версии цинка
(я им пользуюсь когда он еще был Flash Studio Pro), после перехода на другую задачу по альттаб, а потом обратно, не восстанавливается несистемное разрешение моего приложения.
Точнее разрешение теряется (обратно к системному) при переходе на другую задачу. Приложение становится не полноэкранным, выглядит это как баг. Раньше задача сменялась, а разрешение сохранялось.

Цитата:
а вот и пример, все проще оказалось
спасибо, пример красивый
жаль у меня не работает (XP sp2)
возвращает false.

Интересно, как этот код будет себя вести под Вистой?

Еще я вспомнил, что придется отключать Ctrl+Esc и клавишу "window" или как она там называется (MOD_WIN = 8 вроде)

Хорошо, если бы все-таки удалось это сделать, есть еще одна проблема: появляется flash-меню при нажатии клавиши "Меню" (VK_MENU), trapallkeys не помогает (приходится убирать из ресурсов exe-заголовка, но это геромой)

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

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
>>жаль у меня не работает (XP sp2) возвращает false.
возможно нужно поменять параметр вызова, тот который у меня в примере '0x003e'. вообще, может быть конфликт при "случайном" совпадении id комбинаций клавиш. попробуйте поменять его в указанных пределах. у меня сразу заработало. XP SP2. покопайте API - встречал там метод как этот id получать программно и без конфликтов. GlobalAddAtom вроде. под вистой щас проверю
а вот с появлением флаш-меню по кнопке "Меню" вы меня удивили. никогда раньше не задумывался над этим. а меж тем весьма актуально..
просто интересно (надеюсь не дадут нам по плюсу) как вы заглядываете в ехе цинковский?
...
под вистой не катит. дожимать не стал.
и тем не менее остается вариант с хуком.


Последний раз редактировалось alexcon314; 15.01.2008 в 15:15.
Старый 15.01.2008, 16:02
Agon вне форума Посмотреть профиль Отправить личное сообщение для Agon Найти все сообщения от Agon
  № 6  
Ответить с цитированием
Agon

Регистрация: Mar 2002
Сообщений: 43
у меня была версия 2.5.0.6, видимо из-за этого.
На последней (34) работает.

Под висту, видимо, cтоит экспериментировать с выходом zinc 3.0,
там обещана нормальная поддержка висты
(сейчас на некоторых машинах с вистой вообще цинк не запускается)
Придется ждать, все равно продажи 2.5 приостановлены...

Цитата:
просто интересно (надеюсь не дадут нам по плюсу) как вы заглядываете в ехе цинковский?
вроде редактировать ресурсы не криминал, кстати, если нет - поправьте кто знает.
использую exescope, но можно любой прогой.

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

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
вот такой вариант. срабатывает аж при нуле.но на висте хоть и выходит из цикла, типа true все-таки возвращает, но не катит все равно
Код:
// задействуем обработчик события onAppExit чтобы при выходе "восстановить" скорость  мыши. 
mdm.Application.enableExitHandler();
mdm.Application.onAppExit = function() {
	UnSet(p);
	myDLL.close();
	mdm.Application.exit();
};
// принудительно ставим заголовок формы и приложения в таскбаре, 
// чтобы по ним найти хэндл
formTitle = mdm.Forms.MainForm.title = "form";
appTitle = mdm.Application.title = "app";
// получаем хэндл окна
var wList = mdm.System.getWindowList();
var i = 0;
while (wList[i][1]) {
	if (wList[i][0] == formTitle || wList[i][0] == appTitle) {
		hwnd = wList[i][1];
	}
	i++;
}
myDLL = new mdm.DLL("user32.dll");
//SetKey();
// параметр 0x003e  выбран произвольно, но он должени быть в
// пределах от 0x0000 до 0xBFFF, и имеет смысл уникального id
// для комбинации клавиш.
// 1 - это MOD_ALT константа
// 9 - это VK_TAB константа
p = 0;
while (!SetKey(p) && p <= 49151) {
	SetKey(p);
	p++;
}
mdm.prompt(p);
function SetKey(p) {
	// описание вызываемой функции.
	//BOOL RegisterHotKey(
	//HWND hWnd,	// window to receive hot-key notification
	//int id,	// identifier of hot key
	//UINT fsModifiers,	// key-modifier flags
	//UINT vk 	// virtual-key code
	//)
	myDLL.addParameter("integer", hwnd);
	myDLL.addParameter("integer", p);
	myDLL.addParameter("integer", 1);
	myDLL.addParameter("integer", 9);
	//mdm.prompt(myDLL.call("boolean", "RegisterHotKey")); 
	var res = myDLL.call("boolean", "RegisterHotKey");
	myDLL.clear();
	return res;
}
function UnSet(p) {
	// здесь возвращаем все на круги своя
	// описание вызываемой функции.
	//BOOL UnregisterHotKey(
	//HWND hWnd,	// window associated with hot key
	//int id 	// identifier of hot key
	//);
	myDLL.addParameter("integer", hwnd);
	myDLL.addParameter("integer", p);
	mdm.prompt(myDLL.call("boolean", "UnregisterHotKey"));
	myDLL.clear();
}
да, подождем 3.0. за прогу спасибо.


Последний раз редактировалось alexcon314; 15.01.2008 в 16:55.
Старый 16.01.2008, 16:04
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 8  
Ответить с цитированием
alexcon314
listener

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


Последний раз редактировалось alexcon314; 16.01.2008 в 16:16.
Старый 21.01.2008, 22:11
Agon вне форума Посмотреть профиль Отправить личное сообщение для Agon Найти все сообщения от Agon
  № 9  
Ответить с цитированием
Agon

Регистрация: Mar 2002
Сообщений: 43
zinc 3.0
mdm.Application.Kiosk.disableAltEsc();
mdm.Application.Kiosk.disableAltTab();
mdm.Application.Kiosk.disableAltF4();
mdm.Application.Kiosk.disableAppKey(); //Disables the Menu key.
mdm.Application.Kiosk.disableCtrlEsc();
mdm.Application.Kiosk.disableWindowsDesktop();
mdm.Application.Kiosk.disableWindowsStartButton();
mdm.Application.Kiosk.disableWindowsTaskbar();
mdm.Application.Kiosk.disableWinKey();

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

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

Создать новую тему Ответ Часовой пояс GMT +4, время: 22:22.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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