好的,我知道该怎么做了。该代码能够使用低级键盘钩子在没有 DLL 的情况下创建一个系统范围的钩子。这是代码(更好地解释)(使用Qt):
//Installing the hook
SWH_return = SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc,GetModuleHandle(NULL),0);
if (SWH_return != NULL)
qDebug() << "Hook true";
else
qDebug() << "Hook false";
//Uninstalling the hook
bool teste = false;
teste = UnhookWindowsHookEx(SWH_return);
if (teste)
qDebug() << "Unhook: true";
else
qDebug() << "Unhook: false";
//The function responsible for detecting the keystrokes
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode < 0)
return CallNextHookEx(NULL, nCode, wParam, lParam);
tagKBDLLHOOKSTRUCT *str = (tagKBDLLHOOKSTRUCT *)lParam;
switch(str->flags)
{
case (LLKHF_ALTDOWN):
qDebug() << "ALT";
delete str;
return 1;
}
if (wParam == WM_KEYDOWN)
{
switch (str->vkCode)
{
case VK_RWIN:
case VK_LWIN:
case VK_LCONTROL:
case VK_RCONTROL:
case VK_APPS:
case VK_SLEEP:
case VK_MENU:
qDebug() << "SPECIAL PRESS";
delete str;
return 1;
}
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
最后一个函数不需要 .h 或 .cpp 文件中的任何声明。它阻止 Ctrl、Windows 键和 Alt 的输入。另外两个必须分别放在用户想要开始按键禁用的功能和他想要停止的功能中。
谢谢,
莫尔吉尔。