![]() |
|
||||||||||
|
|||||
|
Регистрация: May 2008
Сообщений: 5
|
кто знает как установить глобальный hook на события мыши ?
Приложение свёрнуто но должно отслеживать активность мыши вернее только левый клик. Кто знает подскажите как? |
|
|||||
|
Регистрация: Oct 2006
Адрес: Волгодонск
Сообщений: 182
|
поищи сообщения alexcon314. он в этом мастер
|
|
|||||
|
Регистрация: May 2008
Сообщений: 5
|
Я прочитал все сообщения "alexcon314", попробовал хук из "слушаем систему" и второй, но они все локальные... НУЖЕН ГЛОБАЛЬНЫЙ Hook.
|
|
|||||
|
listener
|
Распакуйте все файлы в одну папку.
Откройте dllconnection.fla и скомпилируйте swf. Создайте новый проект цинк, укажите на вкладке Input Devices для средней и правой кнопок мыши опцию Ignored. Выберите на вкладке Input File swf, созданный на предыдущем шаге, скомпилируйте ехе. Зпустите ехе и нажмите кнопку Connect Dll для подключения модулей. Для установки глобального хука нажмите кнопку setGMHook. В окне при кликах мыши должны отображаться сообщения модулей о том, какой клик произошел, координаты курсора в момент клика. Все три модуля и ехе должны лежать в одной папке. Это не обязательно, но при изменении путей необходимо изменить параметры вызовов некоторых функций в ехе. ... Краткое описание модулей: 1. zwnd.dll - модуль подменяет оконную процедуру плеера в цинке и подгружает остальные два модуля. 2. as32.dll - модуль служит для обратной связи с приложением по LocalConnection. 3. glmhook.dll - модуль устанавливает глобальный хук на клики кнопок мыши и отдает результат оконной процедуре в zwnd.dll Возможные баги: иногда в памяти остается "невостребованный" объект Mutex. Как следствие, модуль as32.dll перестает отдавать события в приложение, остальные модули при этом функционируют. Причина мной до конца не выяснена. Предположительно, "виноват" софт, установленный на моем компе, т.к на других машинах баг не наблюдался ни разу за время использования этой схемы отлова системных событий цинком. ... Если необходимы исходники - постите, выложу. API модулей пока не публикую, ибо он не устоялся. ... да, чуть не забыл, все работает под Zinc 2.5.0.34. под другими вряд ли. Последний раз редактировалось alexcon314; 08.05.2008 в 16:41. |
|
|||||
|
Регистрация: May 2008
Сообщений: 5
|
Только что зашёл на форум, огромное спасибо
всё попробую и напишу с уважением Николай nik3nnn |
|
|||||
|
Регистрация: May 2008
Сообщений: 5
|
Если можно выложите исходники. Все работает иногда зависает если работает
видещплеер почему непонятно. |
|
|||||
|
Регистрация: May 2008
Сообщений: 5
|
Огромное спасибо!!!
|
|
|||||
|
Регистрация: Oct 2006
Адрес: Волгодонск
Сообщений: 182
|
2 alexcon314
День добрый. Помогите разобраться с подключением длл для АС3. package interaktivnieOkna3{ import flash.text.*; import flash.display.*; import flash.events.*; import mdm.Application; import mdm.Dialogs; import mdm.Forms; import mdm.Exception; import flash.net.*; import flash.system.*; public class MainProgramm extends Sprite{ public var dllConnection:DllConnection; public function MainProgramm(){ //запускаем функцию инициализации скриптов MDM mdm.Application.init( this, onInit ); } //функция инициализации скриптов MDM public function onInit():void{ mdm.Application.onAppExit = function():void{ mdm.Exception.DebugWindow.trace("fvnsdfsdlkfsd"); quitFromApp(); } mdm.Application.onArrowKeyPress = function(myObject:*):void{ mdm.Dialogs.prompt(myObject.status); } mdm.Application.maximize(); mdm.Application.title="REDAKTOR 2"; //для DllConnection dllConnection=new DllConnection(); } public function quitFromApp():void{ mdm.Dialogs.prompt("onAppExit"); dllConnection.stopDllConnection(); mdm.Application.exit(); } } } //класс для работы с dllconnection package interaktivnieOkna3{ import mdm.Application; import mdm.Dialogs; import mdm.Forms; import mdm.DLL; import mdm.Exception; import flash.net.*; public class DllConnection{ var formTitle:String = "Redaktor"; // путь к файлу DLL // если файл располагается в одной папке с приложением, // полный путь указывать не нужно var dllPath:String = "zwnd.dll"; //Параметры инициализации LocaConnection в DLL var connectionName:String = "hooks"; var dlm:String = ":"; var method:String = "wndProc"; // Имена объектов file mapping и mutex, создаваемых плеером. var fileMapping:String = "MacromediaFMOmega"; var MutexObj:String = "MacromediaMutexOmega"; var activex :String= "FlashPlayerControl_MacromediaFlashPlayerActiveX_7309416"; // Создаем соединение var listener:LocalConnection;// = new LocalConnection(); var hDll:Object = new Object();// в hDll будет храниться ссылка на DLL public function DllConnection():void{ mdm.Application.doEvents();//вроди бы обязательная строка listener= new LocalConnection(); listener.client = this; listener.connect(connectionName); mdm.Dialogs.prompt("DllConnection srarted"); function wndProc(message:String):void{ mdm.Dialogs.prompt(message+"message"); } getDllConnection(); } //функция закрытия dll public function endDllConnection():void{ // вызываем ReplaceWndProc(FALSE) из нашей DLL // чтобы снять нашу оконную процедуруы if (hDll) { hDll.addParameter("boolean", false); var res:* = hDll.call("integer", "ReplaceWndProc"); if (res == 0) { mdm.Dialogs.prompt("Unhook fail " + res); } hDll.clear(); hDll.close(); } } // функция начала работы с DLL public function getDllConnection():void{ // подключаем DLL и проверяем загрузилась она или нет hDll = new mdm.DLL(dllPath); // if (!hDll.isLoaded) {//отключил ибо флеш ругается // mdm.Dialogs.prompt("Dll load failed!"); // return; // } // Формируем список параметров вызова функции GetLocalConnection // GetLocalConnection (LPSTR fName, char* lm, char* lk, char* lcn, LPCSTR fm, LPCSTR mu, char* dl, char* activex) // Порядок следования параметров должен соответствовать их порядку в определении функции hDll.addParameter("string", formTitle); hDll.addParameter("string", method); hDll.addParameter("string", "localhost:" + connectionName); hDll.addParameter("string", fileMapping); hDll.addParameter("string", MutexObj); hDll.addParameter("string", dlm); hDll.addParameter("string", activex); // инициализируем LocalConnection в DLL var res:* = hDll.call("integer", "GetLocalConnection"); if (res < 0 || !res) { mdm.Dialogs.prompt("Init dll error with code " + res + "\rCheck init parameters."); } hDll.clear(); } public function stopDllConnection():void { endDllConnection(); listener.close(); } } } 1. не получаю события мыши - не выполняется. 2. в классе MainProgramm() не выпонняется |
|
|||||
|
listener
|
По второму пункту - попробуйте вынести обработчики в отдельные методы класса, не используйте поределение функций внутри функций.
например: public function onInit():void{ mdm.Application.onAppExit = appExitHandler; mdm.Application.maximize(); mdm.Application.title="REDAKTOR 2"; //для DllConnection dllConnection=new DllConnection(); } public function appExitHandler():void{ ///... } Под какой версией цинка делаете проект? Присутствует ли as32.dll в вашем проекте? |
![]() |
![]() |
Часовой пояс GMT +4, время: 05:49. |
|
|
« Предыдущая тема | Следующая тема » |
|
|