Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.07.2012, 08:56   #1
alex4321
Пользователь
 
Регистрация: 23.07.2012
Сообщений: 77
По умолчанию Перехват клавиш + LuaInterface

В общем, есть юзающее LuaInterface приложение.
В нём для взаимодействия с lua 2 класса :
1) ScriptWorker - создает объект класса LuaFunctions, передает некоторые его функции библиотеке LuaInterface) и запускает скрипт
2) LuaFunctions - содержит сами встраиваемые в Lua функции.

Необходимо чтобы после нажатия определённых клавиш скрипт завершал работу.
Предполагал реализовать так :
1. в LuaFunctions есть приватное поле last_key и возвращающая его значение функция.
2. эта функция встраивается в Lua
3. при запуске LuaFunctions создаёт поток, следящий за клавой и пишущий в last_key;
Код :
Код:
class LuaFuntions()
{
        string lastKey = "";

        public LuaFunctions()
        {
            keyboard = new Thread(this.KeyboardThread);
            keyboard.Start();
        }

        private IntPtr LowLevelKeyboardHookProc(
           int nCode, IntPtr wParam, IntPtr lParam)
        {
            if (nCode < 0)
            {
                return WinAPI.CallNextHookEx(m_hHook, nCode, wParam, lParam);
            }
            else
            {
                var khs = (WinAPI.KeyboardHookStruct)
                          System.Runtime.InteropServices.Marshal.PtrToStructure(lParam,
                          typeof(WinAPI.KeyboardHookStruct));

                
                string key = khs.VirtualKeyCode.ToString();
                if ((settings["REGISTER_KEYS"].IndexOf(key) != -1) && (WinAPI.GetActiveWindow() == handle))
                {
                    lastKey = key;
                    return new IntPtr(1);
                }
                else
                    return WinAPI.CallNextHookEx(m_hHook, nCode, wParam, lParam);
            }
        }

        public void KeyboardThread()
        {
            m_callback = LowLevelKeyboardHookProc;
            m_hHook = WinAPI.SetWindowsHookEx(Constants.WH_KEYBOARD_LL, m_callback, WinAPI.GetModuleHandle(IntPtr.Zero), 0);
        }

        public string get_last_key()
        {
            return lastKey;
        }
}
но LowLevelKeyboardHookProc почему-то не вызывется. Что это может быть?
alex4321 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перехват нажатых клавиш. -=Virus=- Общие вопросы Delphi 8 29.07.2011 17:11
Перехват клавиш AnTe Общие вопросы Delphi 3 23.07.2010 06:24
Перехват нажатых клавиш sxem Общие вопросы Delphi 7 02.05.2010 23:31
перехват нажатия клавиш skalt12 Общие вопросы Delphi 4 17.08.2009 13:06
Перехват нажатых клавиш AidarBik Общие вопросы Delphi 2 21.06.2007 20:11