Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Простенький winlock, hook 
V
    Опции темы
Dalt
Дата 27.1.2011, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

LRESULT CALLBACK KeyboardHook(int nCode, WPARAM wParam, LPARAM lParam)
{
 
 
  if (HC_ACTION==nCode)
  switch(wParam)
  { 
    case VK_SPACE:  return 1;break; // работает
    case VK_LWIN:   return 1;break; // от чего то неработает
  }
 
  return CallNextHookEx(NULL, nCode, wParam, lParam);
}

Подкиньте подсазку) 
PM MAIL   Вверх
Dem_max
Дата 27.1.2011, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

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



а VK_RWIN не пробовал ?


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Dalt
Дата 27.1.2011, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



VK_RWIN проверял. Клавиши win отличается от других тем что меню пуск появляться после отпускания клавиши а не в момент нажатия. 
Код


LRESULT CALLBACK KeyboardHook(int nCode, WPARAM wParam, LPARAM lParam)
{
  if (HC_ACTION==nCode)
if(!(lParam >> 31 & 1));  else  // момент отпускания клавиши

  switch(wParam)
  { 
    case VK_SPACE:  return 1;break; // робит
    case VK_LWIN:   Beep(80,80);return 1;break; // неробит те. сигнал есть эффекта нет)
    case VK_RWIN:   Beep(80,80);return 1;break; // неробит
  }
 
  return CallNextHookEx(NULL, nCode, wParam, lParam);
}
Ну а может дело и не в этом

Это сообщение отредактировал(а) Dalt - 27.1.2011, 12:49
PM MAIL   Вверх
Dem_max
Дата 27.1.2011, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

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



блин, дык у тебя ж не правильно сделано
Код

LRESULT CALLBACK KeyboardLL(int code, WPARAM wParam, LPARAM lParam)
{

    if(code < 0) return CallNextHookEx(NULL, code, wParam, lParam);

    if(code == HC_ACTION)
    {
        if(wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN)
        {

            vKey = ((PKBDLLHOOKSTRUCT)lParam)->vkCode;
             switch(vKey)
              {
                   case VK_LWIN: бла бла бал
               }
         }
    }
    return CallNextHookEx(NULL, code, wParam, lParam);
}


Это сообщение отредактировал(а) Dem_max - 27.1.2011, 13:43


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Dalt
Дата 27.1.2011, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



`vKey' undeclared (first use this function) 
а если попробовать 

Код

LRESULT CALLBACK KeyboardLL(int code, WPARAM wParam, LPARAM lParam)
{
    if(code < 0) return CallNextHookEx(NULL, code, wParam, lParam);
    if(code == HC_ACTION)
    {
        if(wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN)
        {
          PKBDLLHOOKSTRUCT  vKey = ((PKBDLLHOOKSTRUCT)lParam)->vkCode; // то  invalid conversion from `DWORD' to `tagKBDLLHOOKSTRUCT*'  а DWORD vKey  не робит
             switch(vKey)
              {
                   case VK_LWIN:return 1;
               }
         }
    }
    return CallNextHookEx(NULL, code, wParam, lParam);
}


Это сообщение отредактировал(а) Dalt - 27.1.2011, 14:08
PM MAIL   Вверх
Dem_max
Дата 27.1.2011, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

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



ну вообще то 
DWORD vKey;

Цитата

а DWORD vKey  не робит


Все робит, я тебе кусок из работающей проги дал.


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Dalt
Дата 27.1.2011, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



WH_KEYBOARD не содержит сообщения WM_SYSKEYDOWN
поэтому 
Код

DWORD vKey;
LRESULT CALLBACK KeyboardHook(int code, WPARAM wParam, LPARAM lParam)
{ 
    if(code < 0) return CallNextHookEx(NULL, code, wParam, lParam);
    if(code == HC_ACTION)
    { 
   if(wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN)  
        {
           vKey = ((PKBDLLHOOKSTRUCT)lParam)->vkCode;
             switch(vKey)
              {
                   case VK_LWIN: Beep(80,80); return 1; break;
               }
         }
    }
    return CallNextHookEx(NULL, code, wParam, lParam);
}

неробил но сообщение WM_SYSKEYDOWN передает WH_KEYBOARD_LL 
SetWindowsHookEx(WH_KEYBOARD_LL ... И  Все заработало! )

Это сообщение отредактировал(а) Dalt - 27.1.2011, 20:57
PM MAIL   Вверх
Dem_max
Дата 28.1.2011, 05:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

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



ну вот видишь сам неправильно делал.


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




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


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

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