如何禁用使用C ++软件内特定的Windows热键?(How can I disable speci

2019-09-27 16:43发布

我想提出一个软件中必要的代码为它禁用Windows(XP,VISTA,特别是7和sucessors)热键,可以让用户获得从软件了。

细节:

  • 命令必须只在该软件运行有效; 它不运行时,的Windows热键必须启用(所以:如果用户启动该软件,热键禁用;如果他关闭它,必须重新启用被)。
  • 我不想禁用所有Windows热键(一些关键热键,如Ctrl + Alt + Del必须仍可以运行),因此如某种Windows配置的解决方案,禁用所有的热键是无用我。 我必须能够明确选择我想要的热键继续工作,我不知道。
  • 在“热键”的绰号包括Windows按钮。
  • 代码必须用C ++或Windows功能是任一。
  • Preferetially没有requiering终止explorer.exe的。

我看这里的计算器是有一个非常相似的情况下为矿(后从退出通过系统热键一个Windows应用程序阻止用户 ),但据我了解解决方案的幽冥提出了适用于我的具体情况,我没有发现在网络的任何也是如此。

Answer 1:

好吧,我该怎么办呢。 该代码能够在不使用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。



Answer 2:

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++?