我想提出一个软件中必要的代码为它禁用Windows(XP,VISTA,特别是7和sucessors)热键,可以让用户获得从软件了。
细节:
- 命令必须只在该软件运行有效; 它不运行时,的Windows热键必须启用(所以:如果用户启动该软件,热键禁用;如果他关闭它,必须重新启用被)。
- 我不想禁用所有Windows热键(一些关键热键,如Ctrl + Alt + Del必须仍可以运行),因此如某种Windows配置的解决方案,禁用所有的热键是无用我。 我必须能够明确选择我想要的热键继续工作,我不知道。
- 在“热键”的绰号包括Windows按钮。
- 代码必须用C ++或Windows功能是任一。
- Preferetially没有requiering终止explorer.exe的。
我看这里的计算器是有一个非常相似的情况下为矿(后从退出通过系统热键一个Windows应用程序阻止用户 ),但据我了解解决方案的幽冥提出了适用于我的具体情况,我没有发现在网络的任何也是如此。
好吧,我该怎么办呢。 该代码能够在不使用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键和Alt它的块输入。 另外两个分别必须在用户想要开始键禁用,当他希望它停止的功能被放置。
谢谢,
Momergil。
RegisterHotKey也是除非RegisterHotKey函数调用的所有应用程序全局关闭热键。
RegisterHotKey(GetSafeHwnd(), 100, 0,VK_F5); //F5 works only in our application
文章来源: How can I disable specific Windows hotkeys from inside a software using C++?