我想在软件中加入必要的代码来禁用Windows(Xp,Vista,特别是7和sucessors)热键,这些热键可以让用户远离软件。
详细说明:
我确实在stackoverflow中查看了一个帖子,其中有一个非常类似于我的帖子(Prevent users from quitting a windows application via system hotkeys),但据我所知,所提出的解决方案更适用于我的具体情况,而且我没有也可以在网上找到任何东西。
答案 0 :(得分:2)
好的,我知道怎么做了。该代码能够使用低级键盘钩创建一个没有DLL的sistem范围的钩子。这是代码(更好解释)(使用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 Key和Alt的输入。其他两个必须分别放在用户想要开始关键禁用的功能和他希望停止的时候。
谢谢,
Momergil。
答案 1 :(得分:0)
RegisterHotKey也是所有应用程序的全局禁用热键,除非进行RegisterHotKey函数调用。
RegisterHotKey(GetSafeHwnd(), 100, 0,VK_F5); //F5 works only in our application