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

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

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2011, 14:36   #1
Synapse
Пользователь
 
Регистрация: 14.08.2011
Сообщений: 10
По умолчанию Обработка событий клавиш клавиатуры

Все доброго дня. Тема может объезженная... Суть проблемы такова, есть dll, которая подцепляется к процессу. В ней запускается бесконечный цикл:
PHP код:
void __stdcall GetKeysStates(void)
{
    for(;;)
    {
        if(
GetAsyncKeyState(VK_NUMPAD2)){
            
//123
        
}
    }
    

PHP код:
int __stdcall WINAPI DllMain(HINSTANCE hModuleDWORD dwAttachedLPVOID lpvReserved)
{
    if(
dwAttached == DLL_PROCESS_ATTACH){
        
CreateThread(NULLNULL, (LPTHREAD_START_ROUTINE)GetKeysStatesNULLNULLNULL);
    }
    return 
1;

Но он будет срабатывать каждую миллисекунду, не успею я клавишу отпустить. Команда sleep в данном случаем не вариант. Как сделать, чтобы код срабатывал только тогда, когда клавиша была отпущена или нажата? Заранее спасибо.

Последний раз редактировалось Synapse; 20.10.2011 в 14:39.
Synapse вне форума Ответить с цитированием
Старый 20.10.2011, 15:10   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

запоминать последнее состояние?(переключение состоние есть нажатие или отпускание)
кстати у вас ошибка в сигнатуре функции потока, она принимает один параметр типа void*, в вашем бесконечном цикле разницы нет, а вот если будет конечный поток, то разница будет.(и приведение типов то не спроста понадовилось же)
по хорошему бы, не забудьте обработать условие выгрузки длл(с завершением потока этого) а то ошибки будут при завеошении приложения.

да и кстати, уверены что вам не подходят хуки?(а то активный ожидающий цикл...)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.10.2011, 18:37   #3
Synapse
Пользователь
 
Регистрация: 14.08.2011
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
запоминать последнее состояние?(переключение состоние есть нажатие или отпускание)
да, именное это мне и нужно. можете дать примерчик?
Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
кстати у вас ошибка в сигнатуре функции потока, она принимает один параметр типа void*, в вашем бесконечном цикле разницы нет, а вот если будет конечный поток, то разница будет.(и приведение типов то не спроста понадовилось же)
по хорошему бы, не забудьте обработать условие выгрузки длл(с завершением потока этого) а то ошибки будут при завеошении приложения.
это для примера, там у меня всё продумано
Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
да и кстати, уверены что вам не подходят хуки?(а то активный ожидающий цикл...)
к сожалению нет, специфика
Synapse вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обработка событий в javascript Marika lady Помощь студентам 2 19.09.2011 13:21
обработка событий CoRviN88 Помощь студентам 0 16.12.2010 13:46
Обработка событий meganom Общие вопросы Delphi 5 01.09.2010 19:41
Обработка событий формы aval Microsoft Office Excel 3 17.06.2009 18:17
Обработка событий в Delphi SlavaSH Компоненты Delphi 19 30.03.2009 11:00