【发布时间】:2023-03-11 20:11:01
【问题描述】:
我想禁止我的应用程序的用户使用 alt-tab。我正在尝试通过使用低级键盘挂钩来解决这个问题。
设置它工作得很好,当我按下组合键等时触发回调过程。发生的奇怪的事情是我可以在应用程序中使用 alt-tab,但之后 alt-tabbing 被完全禁用。我用鼠标切换应用程序并尝试使用 alt-tabbing 但没有任何反应。我再次切换回我的应用程序和 alt-tab 并切换应用程序,但只有一步。当退出我的应用程序时,alt-tab 不再起作用。
我尝试了不同的场景,首先我认为它与 VS2010 中的调试器有关,但不,在没有调试器的情况下运行它会得到相同的结果。
我是否完全误解了这个钩子程序,它是否意味着只在应用程序不在焦点时捕获发生的事情?
osman.hpp:
static HHOOK m_hhook;
static LRESULT CALLBACK lowLevelKeyboardProc( int key, WPARAM wParam, LPARAM lParam );
osman.cpp:
HHOOK OSMan::m_hhook;
/*
* pseudo init code
*/
void OSMan::init()
{
m_hHook = SetWindowsHookEx( WH_KEYBOARD_LL, (HOOKPROC)lowLevelKeyboardProc, 0, 0 );
}
LRESULT CALLBACK OSMan::lowLevelKeyboardProc( int key, WPARAM wParam, LPARAM lParam )
{
KBDLLHOOKSTRUCT *pkbhs = (KBDLLHOOKSTRUCT *) lParam;
switch (key)
{
case HC_ACTION:
{
if (pkbhs->vkCode == VK_TAB && pkbhs->flags & LLKHF_ALTDOWN)
return 1;
}
default:
break;
}
return CallNextHookEx( m_hHook, key, wParam, lParam);
}
编辑:
- 添加了代码。
【问题讨论】:
-
一些演示如何设置钩子的代码会很有帮助。
-
@InS:每当有人想要这种限制性的东西时,他们通常会构建一个信息亭应用程序,用户只是想知道一本书是否有存货或商店里的橡皮筋在哪里存货.
-
@sarnold:制作信息亭之类的东西的正确方法是使用诸如group policies 之类的操作系统功能,并将管理员和“信息亭”用户帐户分开。与尝试开发基本上旨在削弱操作系统的软件黑客相比,设置具有适当权限的计算机帐户所需的时间更少。
-
@ins:这值得一票作为答案。 :)
-
@sarnold:如果 OP 谈到信息亭,我会发布一个答案。 :-)
标签: c++ visual-studio-2010 hook