Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хук на несколько нажатых клавиш, HookCallback 
:(
    Опции темы
Moid
  Дата 24.9.2009, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 27.3.2006

Репутация: 2
Всего: 3



Нужно установить хук на нажатие нескольких клавишь одновременно.
На одну клавишу делается так:

Код

 private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
        {
            if ((nCode >= 0) && (wParam == (IntPtr)WM_KEYDOWN))
            {
                int vkCode = Marshal.ReadInt32(lParam);
                if (((Keys)vkCode == Keys.Escape))
                {
                    if (Helper.checkedScala)
                    {
                        Helper._ShowOrders();
                    }
                    else
                    {
                        Helper._ShowScala();
                    }

                    return (IntPtr)1;
                }
            }
            return CallNextHookEx(_hookID, nCode, wParam, lParam);
        }


Но как отследить нажатие одновременно нескольких клавиш?


--------------------
"Всё должно быть сделано настолько простым, насколько это возможно, но не проще" (с) А.Эйнштейн
PM MAIL   Вверх
Partizan
Дата 24.9.2009, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



Код

if (((vkCode & Keys.Escape) == Keys.Escape) && ((vkCode & Keys.RShift) == Keys.RShift))



--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
S1oven
Дата 22.3.2010, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 3.9.2009

Репутация: нет
Всего: нет



Не работает. 

Код

public int hookProc(int code, IntPtr wParam, IntPtr lParam)
{
   if (code >= 0) 
   {
    int vkCode = Marshal.ReadInt32(lParam);
    if (((vkCode & (int)Keys.Z) == (int)Keys.Z) && ((vkCode & (int)Keys.Control) == (int)Keys.Control))
    {
        KeyEventArgs kea = new KeyEventArgs(Keys.A);
        KeyDown(this, kea);
    }
   }
}

Код

(((vkCode & (int)Keys.Z) == (int)Keys.Z) && ((vkCode & (int)Keys.Control) == (int)Keys.Control)) 
 == false.

точно vkCode = Marshal.ReadInt32(lParam) должен содержать код модификаторов? Помогите плз.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1088 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.