gpt4 book ai didi

c++ - 如何使用 C++ 从软件内部禁用特定的 Windows 热键?

转载 作者:可可西里 更新时间:2023-11-01 11:59:44 27 4
gpt4 key购买 nike

我想在软件中放入必要的代码,以禁用 Windows(Xp、Vista、特别是 7 和后续版本)热键,从而使用户可以离开该软件。

详细信息:

  • 命令必须仅在软件运行时有效;当它未运行时,必须启用 Windows 热键(因此:如果用户启动该软件,则热键被禁用;如果他关闭它,则必须重新启用)。
  • 我不想禁用所有 Windows 热键(某些关键热键,例如 ctrl+alt+del 必须仍然可用),因此禁用所有热键的某种 Windows 配置之类的解决方案对我来说毫无用处。我必须能够明确选择哪些热键我想继续使用,哪些我不想。
  • “热键”昵称包括 Windows 按钮。
  • 代码必须使用 C++ 或 Windows 函数。
  • 最好不需要终止 explorer.exe。

我确实看过 stackoverflow 中的一篇帖子,它与我的情况非常相似 (Prevent users from quitting a windows application via system hotkeys),但据我所知,所提供的解决方案都不适用于我的具体情况,但我没有找到网络上的任何内容。

最佳答案

好的,我知道怎么做了。该代码能够使用低级键盘 Hook 在没有 DLL 的情况下创建系统范围的 Hook 。这是代码(比解释更好)(使用 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 的输入。另外两个必须分别放在用户想要开始禁用按键和停止按键禁用的函数中。

谢谢,

默吉尔。

关于c++ - 如何使用 C++ 从软件内部禁用特定的 Windows 热键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11352343/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com