보안 KeyDown, KeyPress, KeyUp NineKY 2008. 1. 17. 20:46 Логин Пароль Помнить меня | Регистрация | Забыли? Новости Новости сайтаСобытияНовости MicrosoftНовости от разработчиков Статьи .Net Framework 3.0.Net FrameworkASP.NETADO.NETVB.NETC#MobilityWeb ServicesWindows Forms Алгоритмы на .NETРазноеАрхив конкурса статей Используем .NET Часто задаваемые вопросыСтудентамКнигиСловарь терминовАрхив чатовПолезные ссылкиГалерея сайтов ASP.NET 2.0 Файлы ПримерыASP.NET Starter Kits Пробный хостинг Студентам НовостиImagine CupКонференцииСтуд. форумы Channel 9 UserGroups Дни Разработчика ОбъявленияВикторинаМатериалы О сайте Проекты сообществаПравила использованияПолитика защитыКодекс поведенияТрудности со входом на сайтЯзык поисковых запросов Форумы Темы из всех форумовВопросы без ответовОбщий форумРабота с даннымиРабота с XMLASP.NETWinFormsWSS и Sharepoint PortalПробный хостинг на IIS7Перевод MSDNРаботаОбсуждение нашего сайтаVisual Studio 2005Windows MobileФорум User GroupsЧаты на GotDotNetЮридические вопросыOffice System Windows Server System Windows Media БлогиЧатыКонкурс 2005Microsoft DynamicsСтуд. форумыАрхитектура приложений.Net Framework 3.x Если авторизация не работает Форумы Общий форум Общий форум Нить: KeyDown, KeyPress, KeyUp Сообщить модератору DmitriAl Добрый день!Подскажите, как решить проблему: я ловлю нажатия клавиш следующим образом LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam){ if (nCode >= 0) { switch (state) { case 0: if (wParam == VK_CONTROL)Нажатие на одну клавишу создает три сообщения: KeyDown, KeyPress, KeyUp. Я хочу обрабатывать только KeyDown. В MSDN написано, что если 31 бит lParam равен нулю, то клавиша нажата, иначе клавиша отжата. Я пишу if ((wParam == VK_CONTROL) && !(lParam & 80000000))Но это условие выполняется уже два раза, а не три при нажатии на одну клавишу. Как сделать, чтобы оно выполнялось один раз? Данное сообщение получено с сайта RSDN, ссылка на исходное сообщение Отправлено: 19.10.2005 22:55 Re: KeyDown, KeyPress, KeyUp Сообщить модератору eddy_ka Здравствуйте, DmitriAl, Вы писали:DA>Подскажите, как решить проблему: я ловлю нажатия клавиш следующим образомDA> LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam)DA>{DA> if (nCode >= 0) {DA> switch (state) {DA> case 0:DA> if (wParam == VK_CONTROL)DA>DA>Нажатие на одну клавишу создает три сообщения: KeyDown, KeyPress, KeyUp. Я хочу обрабатывать только KeyDown. В MSDN написано, что если 31 бит lParam равен нулю, то клавиша нажата, иначе клавиша отжата. Я пишуDA> DA>if ((wParam == VK_CONTROL) && !(lParam & 80000000))DA>DA>Но это условие выполняется уже два раза, а не три при нажатии на одну клавишу. Как сделать, чтобы оно выполнялось один раз?Странно, на сколько я помню HookProc должен иметь еще один параметр — сообщение (msg)...Тогда, вообще, все получается просто: switch(msg){ case WM_KEYDOWN : <...> break;} Данное сообщение получено с сайта RSDN, ссылка на исходное сообщение Отправлено: 20.10.05 02:20 Re[2]: KeyDown, KeyPress, KeyUp Сообщить модератору DmitriAl Здравствуйте, eddy_ka, Вы писали:_>Странно, на сколько я помню HookProc должен иметь еще один параметр — сообщение (msg)...MSDN: LRESULT CALLBACK KeyboardProc( int code, WPARAM wParam, LPARAM lParam);Please help! Что делать? Данное сообщение получено с сайта RSDN, ссылка на исходное сообщение Отправлено: 20.10.05 12:03 Re: KeyDown, KeyPress, KeyUp Сообщить модератору VladKurmaz Здравствуйте, DmitriAl, Вы писали:DA>Добрый день!DA>Подскажите, как решить проблему: я ловлю нажатия клавиш следующим образомDA> LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam)DA>{DA> if (nCode >= 0) {DA> switch (state) {DA> case 0:DA> if (wParam == VK_CONTROL)DA>DA>Нажатие на одну клавишу создает три сообщения: KeyDown, KeyPress, KeyUp. Я хочу обрабатывать только KeyDown. В MSDN написано, что если 31 бит lParam равен нулю, то клавиша нажата, иначе клавиша отжата. Я пишуDA> DA>if ((wParam == VK_CONTROL) && !(lParam & 80000000))DA>DA>Но это условие выполняется уже два раза, а не три при нажатии на одну клавишу. Как сделать, чтобы оно выполнялось один раз?lParam0-15Specifies the repeat count. The value is the number of times the keystroke is repeated as a result of the user's holding down the key.30Specifies the previous key state. The value is 1 if the key is down before the message is sent; it is 0 if the key is up.Попробуй обработать количество повторений и/или предыдущее состояние. Данное сообщение получено с сайта RSDN, ссылка на исходное сообщение Отправлено: 20.10.05 17:46 Re: KeyDown, KeyPress, KeyUp Сообщить модератору Alex Fedotov Здравствуйте, DmitriAl, Вы писали:DA>Нажатие на одну клавишу создает три сообщения: KeyDown, KeyPress, KeyUp. Я хочу обрабатывать только KeyDown. В MSDN написано, что если 31 бит lParam равен нулю, то клавиша нажата, иначе клавиша отжата. Я пишуDA> DA>if ((wParam == VK_CONTROL) && !(lParam & 80000000))DA>Что, прямо так и написано? Или, все-таки, 0x80000000? Данное сообщение получено с сайта RSDN, ссылка на исходное сообщение Отправлено: 20.10.05 18:03 Re[2]: KeyDown, KeyPress, KeyUp Сообщить модератору DmitriAl Здравствуйте, Alex Fedotov, Вы писали: LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam){ if (code >= 0) { FILE *out = fopen("hello.txt", "a"); fprintf(out, "%x\t%x\n", wParam ,lParam); fclose(out); switch (state) { case 0: if ((wParam == VK_C) && (lParam & 0x80000000)) PostMessage(GlobalParent, WM_USER, (int)lParam, 0); break; } } return CallNextHookEx(hHook, code, wParam, lParam);}output:43 2e000143 2e000143 c02e000143 c02e0001Почему??? Данное сообщение получено с сайта RSDN, ссылка на исходное сообщение Отправлено: 20.10.05 18:47 Re[3]: KeyDown, KeyPress, KeyUp Сообщить модератору Alex Fedotov Здравствуйте, DmitriAl, Вы писали:DA>Здравствуйте, Alex Fedotov, Вы писали:DA> DA>LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam)DA>{ DA> if (code == HC_ACTION) {DA> FILE *out = fopen("hello.txt", "a");DA> fprintf(out, "%x\t%x\n", wParam ,lParam);DA> fclose(out);DA> switch (state) {DA> case 0:DA> if ((wParam == VK_C) && (lParam & 0x80000000))DA> PostMessage(GlobalParent, WM_USER, (int)lParam, 0);DA> break; DA> }DA> }DA> return CallNextHookEx(hHook, code, wParam, lParam);DA>}DA>DA>output:DA>43 2e0001DA>43 2e0001DA>43 c02e0001DA>43 c02e0001DA>Почему???Потому что надо проверять код на HC_ACTION, как показано выше. Данное сообщение получено с сайта RSDN, ссылка на исходное сообщение Отправлено: 20.10.05 18:53 Правила использования | Политика защиты | Кодекс поведения | Обратная связь© 2002-2006 Корпорация Microsoft. Все права защищены.Создание сайта - MetricХостинг на Parking.ru