C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
глобальный перехват, ctrl + any_key
joynter
Отправлено: 15.11.2004, 11:55


Станционный диспетчер

Группа: Участник
Сообщений: 137



как это осуществить? или как узнать код двух нажатых клавиш?
(что-то типа ctrl+any_key <=> wParam = ...)

CODE

LRESULT CALLBACK KeyboardProc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam ) // keystroke-message information
{
if(code < 0)
return CallNextHookEx(hHook,code,wParam,lParam);
else
if(GetKeyState(VK_CONTROL) && GetKeyState(any_key) && isHook == false)
{
isHook = true;
ShowMessage("done");
return CallNextHookEx(hHook,code,wParam,lParam);
}
else
{
isHook = false;
return CallNextHookEx(hHook,code,wParam,lParam);
}
}


Отредактировано joynter — 15/11/2004, 12:57
Ajgor
Отправлено: 15.11.2004, 17:15


Ученик-кочегар

Группа: Участник
Сообщений: 23



Посмотри API функцию GetKeyboardState(). Ей передаётся буфер который заполняется текущим состоянием клавиатуры. Потом можеш проследить которые из них нажаты. Хоть все biggrin.gif
serg128
Отправлено: 15.11.2004, 18:54


Дежурный стрелочник

Группа: Участник
Сообщений: 46



GetAsyncKeyState(int KeyKode)
и ненадо никаких хуков.
NedioVic
  Отправлено: 22.01.2005, 05:39


Ученик-кочегар

Группа: Участник
Сообщений: 14



Скачай пакет компонент LMD-Tools Special Edition (C++ Builder 6.0) с сайта http://www.torry.net

После установки на вкладке LMD Sys (палитры компонент) есть классный компонент TLMDGlobalHotKey — классно работает, пробовал — советую
cool.gif cool.gif cool.gif cool.gif cool.gif

Отредактировано NedioVic — 22/01/2005, 06:50
Gal
Отправлено: 24.01.2005, 12:54


Станционный диспетчер

Группа: Участник
Сообщений: 124



void __fastcall TMainForm::ListViewKeyDown(TObject *Sender,
WORD &Key, TShiftState Shift)
{
TShiftState ShiftTest;

ShiftTest.Clear();
ShiftTest << ssCtrl;
if ((Shift == ShiftTest) && (Key == 65))
{
...........................................
}
}
xim
Отправлено: 24.01.2005, 14:41


Станционный диспетчер

Группа: Участник
Сообщений: 143



Немного переделал начальный вариант:
CODE

LRESULT CALLBACK KeyboardProc(
      int code,         // hook code
      WPARAM wParam,         // virtual-key code
      LPARAM lParam       )  // keystroke-message information
{
if(code>=0&&
   GetKeyState(VK_CONTROL)<0&&
   any_key==WORD(wParam)&&
   isHook == false)
  {
    isHook = true;
    ShowMessage("done");
  }else isHook = false;
  кeturn CallNextHookEx(hHook,code,wParam,lParam);
}


Первоначальный вариант работал менее строго:
CODE

...GetKeyState(VK_CONTROL) && GetKeyState(any_key)...

Вернуться в Вопросы программирования в C++Builder