发布网友
共2个回答
热心网友
用键盘钩子,钩键盘按键消息,钩子的话,捕捉多少个键都行,但是象“清风or朗月”兄说的,你那工业小键盘的键值应该是生产厂商自定义的吧,那你就要联系相关的技术支持把键盘键值说明拿来。
键盘钩子的话用SetWindowHoolEx,第一个为钩子类型,键盘的话就是WH_KEYBOARD_LL,流程的话就是安装钩子,设置钩子消息处理回调函数,然后在回调函数中处理消息。不难的。
/************************************************
*@函数名: MyTaskKeyHookLL
*@函数功能: 键盘钩子回调函数
*@函数参数: nCode, wp, lp
*@入参:
* nCode:钩子代号
* wp:消息,如,按键按下消息,按键弹起消息等
* lp:消息事件的具体结构指针
*@出参:
*
*@返回值:
*
*@备注:
**************************************************/
LRESULT CALLBACK MyTaskKeyHookLL(int nCode, WPARAM wp, LPARAM lp)
{
return 1;
// KBDLLHOOKSTRUCT *pkh = (KBDLLHOOKSTRUCT *) lp;
//
// if (nCode==HC_ACTION)
// {
// BOOL bCtrlKeyDown =GetAsyncKeyState(VK_CONTROL)>>((sizeof(SHORT) * 8) - 1);
// BOOL bShift =GetAsyncKeyState(VK_LSHIFT)>>((sizeof(SHORT) * 8) - 1);
// BOOL bAlt = GetAsyncKeyState(VK_LMENU)>>((sizeof(SHORT) * 8) - 1);
// BOOL bEsc = pkh->vkCode==VK_ESCAPE?TRUE:FALSE;
// BOOL bWin = GetAsyncKeyState(VK_LWIN)>>((sizeof(SHORT) * 8) - 1);
// }
// return CallNextHookEx(g_hHookKbdLL, nCode, wp, lp);
}
/************************************************
*@函数名: MonopolizeHotKey
*@函数功能: 屏蔽热键
*@函数参数: bMonopolize
*@入参:
* bMonopolize:是否屏蔽,TRUE:屏蔽;FALSE:不屏蔽
*@出参:
*
*@返回值:
* TRUE:屏蔽成功;FALSE:屏蔽失败
*@备注:
**************************************************/
BOOL CSysMonoOperation::MonopolizeHotKey(BOOL bMonopolize)
{
if (bMonopolize)
{
if (g_hHookKbdLL == NULL)
{
g_hHookKbdLL = SetWindowsHookEx(WH_KEYBOARD_LL, MyTaskKeyHookLL, (HINSTANCE)AfxGetApp()->m_hInstance, 0);
if (g_hHookKbdLL != NULL)
{
return TRUE;
}
return FALSE;
}
}
else
{
if (g_hHookKbdLL != NULL)
{
UnhookWindowsHookEx(g_hHookKbdLL);
g_hHookKbdLL = NULL;
}
}
return TRUE;
}
上面那个MonopolizeHotKey方法就是安装或者卸载钩子,安装bMonopolize就为TRUE,卸载bMonopolize为FALSE。
热心网友
用kebord_event()吧,首先要知道你要捕捉的键的虚拟码值,然后才能使用
你可以查查工业小键盘的说明书或在网上查查,应该可以查到的