Слияние кода завершено, страница обновится автоматически
#include "keyboardevent.h"
HHOOK KeyboardEvent::keyHook= nullptr;
//键盘钩子过程
LRESULT CALLBACK KeyboardEvent::keyProc(int nCode,WPARAM wParam,LPARAM lParam )
{
//在WH_KEYBOARD_LL模式下lParam 是指向KBDLLHOOKSTRUCT类型地址
KBDLLHOOKSTRUCT *pkbhs = (KBDLLHOOKSTRUCT *) lParam;
//如果nCode等于HC_ACTION则处理该消息,如果小于0,则钩子子程就必须将该消息传递给 CallNextHookEx
if(nCode == HC_ACTION)
{
// if(KBCallBack != nullptr){
// KBCallBack(pkbhs->vkCode, pkbhs->flags);
// }else{
// KeyboardEvent::getInstance().UnhookSetKeyboardHookEx();
// }
KeyboardEvent::getInstance().SendKeyboardSignal(pkbhs->vkCode, pkbhs->flags);
if(pkbhs->vkCode == VK_ESCAPE && GetAsyncKeyState(VK_CONTROL)& 0x8000 && GetAsyncKeyState(VK_SHIFT)&0x8000)//"Ctrl+Shift+Esc"
{
return 1;
}
else if(pkbhs->vkCode == VK_ESCAPE && GetAsyncKeyState(VK_CONTROL) & 0x8000)//"Ctrl+Esc"
{
return 1;
}
else if(pkbhs->vkCode == VK_TAB && pkbhs->flags & LLKHF_ALTDOWN )//"Alt+Tab"
{
return 1;
}
else if(pkbhs->vkCode == VK_ESCAPE && pkbhs->flags &LLKHF_ALTDOWN )//"Alt+Esc"
{
return 1;
}
else if(pkbhs->vkCode == VK_F4 && pkbhs->flags & LLKHF_ALTDOWN)//"Alt+F4"
{
return 1;
}
else if(wParam == WM_KEYDOWN && pkbhs->vkCode == VK_SNAPSHOT)//"Prtic"
{
//MainWindow::getInstance()->keyPressedDisplay(MainWindow::getInstance()->ui->label_prtsc);
return 1;
}
else if(wParam == WM_KEYUP && pkbhs->vkCode == VK_SNAPSHOT)
{
//MainWindow::getInstance()->keyReleasedDisplay(MainWindow::getInstance()->ui->label_prtsc);
return 1;
}
else if(wParam == WM_KEYDOWN && pkbhs->vkCode == VK_LWIN)// "LeftWin"
{
//MainWindow::getInstance()->keyPressedDisplay(MainWindow::getInstance()->ui->label_winl);
return 1;
}
else if(wParam == WM_KEYUP && pkbhs->vkCode == VK_LWIN)
{
//MainWindow::getInstance()->keyReleasedDisplay(MainWindow::getInstance()->ui->label_winl);
return 1;
}
else if(wParam == WM_KEYDOWN && pkbhs->vkCode == VK_RWIN)//"RightWin"
{
//MainWindow::getInstance()->keyPressedDisplay(MainWindow::getInstance()->ui->label_winr);
return 1;
}
else if(wParam == WM_KEYUP && pkbhs->vkCode == VK_RWIN)
{
//MainWindow::getInstance()->keyReleasedDisplay(MainWindow::getInstance()->ui->label_winr);
return 1;
}
else if(wParam == WM_KEYDOWN && pkbhs->vkCode == VK_TAB)//"TAB"
{
//MainWindow::getInstance()->keyPressedDisplay(MainWindow::getInstance()->ui->label_tab);
return 1;
}
else if(wParam == WM_KEYUP && pkbhs->vkCode == VK_TAB)
{
//MainWindow::getInstance()->keyReleasedDisplay(MainWindow::getInstance()->ui->label_tab);
return 1;
}
}
return CallNextHookEx(keyHook, nCode, wParam, lParam);
}
void KeyboardEvent::SetKeyboardHookEx( ){
if(keyHook == nullptr){
//注册钩子
keyHook = SetWindowsHookEx(WH_KEYBOARD_LL,keyProc,GetModuleHandle(nullptr),0);
}else{
UnhookSetKeyboardHookEx();
//注册钩子
keyHook = SetWindowsHookEx(WH_KEYBOARD_LL,keyProc,GetModuleHandle(nullptr),0);
}
}
void KeyboardEvent::UnhookSetKeyboardHookEx(){
UnhookWindowsHookEx(keyHook);
keyHook= nullptr;
}
void KeyboardEvent::SendKeyboardSignal( int vkCode, int val){
emit KeyboardSignalVal(vkCode, val);
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )