在c++中禁用任务切换键
Disable task switching keys with c++
我已经做了很多搜索,没有真正的解决方案(我自己的问题),所以我想我在这里问一下。
我正在设计一个类似kiosk的程序,它可以防止用户在程序运行时使用任务键(alt+tab, alt+esc, ctrl+esc等)。注意,我是一个新手程序员,因此我想远离单独的dll处理,如果我可以。特别是,我去了这个网站http://support.microsoft.com/kb/226359/en-us获取代码。我的代码的简化部分看起来像这样在顶部:
HHOOK mule;
HHOOK g_hKeyboardHook;
BOOL g_bFullscreen;
LRESULT CALLBACK LowLevelKeyboardProc (INT nCode, WPARAM wParam, LPARAM lParam)
{
// By returning a non-zero value from the hook procedure, the
// message does not get passed to the target window
KBDLLHOOKSTRUCT *pkbhs = (KBDLLHOOKSTRUCT *) lParam;
BOOL bControlKeyDown = 0;
switch (nCode)
{
case HC_ACTION:
{
// Check to see if the CTRL key is pressed
bControlKeyDown = GetAsyncKeyState (VK_CONTROL) >> ((sizeof(SHORT) * 8) - 1);
// Disable CTRL+ESC
if (pkbhs->vkCode == VK_ESCAPE && bControlKeyDown)
return 1;
// Disable ALT+TAB
if (pkbhs->vkCode == VK_TAB && pkbhs->flags & LLKHF_ALTDOWN)
return 1;
// Disable ALT+ESC
if (pkbhs->vkCode == VK_ESCAPE && pkbhs->flags & LLKHF_ALTDOWN)
return 1;
break;
}
default:
break;
}
return CallNextHookEx (mule, nCode, wParam, lParam);
}
主目录
int main(int argc, char **argv)
{
_getch();
g_hKeyboardHook = SetWindowsHookEx( WH_KEYBOARD_LL, LowLevelKeyboardProc, GetModuleHandle(NULL), 0 );
cout << "Testing task keys disabling (alt tab, ctrl esc, alt esc) and taskbar..." << endl;
_getch();
UnhookWindowsHookEx( g_hKeyboardHook );
cout << "Re enabled" << endl;
_getch();
return 0;
}
我意识到这段代码是为真正老的windows操作系统,但我已经环顾四周,其他解决方案类似于这段代码,所以我认为它应该工作。
但由于某种原因,它似乎不起作用。每当我的程序到达那行代码时,程序会暂停大约5秒钟,然后继续运行,但任务键仍然在工作。
我听说我应该将该函数实现为dll而不是将所有内容放在一个文件中,但我不确定它们是否绝对正确(也我对dll一无所知)
此外,我也尝试了代码(禁用windows键)在这里:http://msdn.microsoft.com/en-us/library/windows/desktop/ee416808(v=vs.85).aspx,它做同样的事情我自己的程序(停滞和不做任何事情)
谁能指出我做错了什么?我在windows 7 64位上使用vc++ 2010。
你的代码很好,钩子只是不能与控制台应用程序一起工作,因为windows不能回调到控制台应用程序,它需要一个消息循环。
阅读汉斯·帕桑特的回答,这也适用于这里。
相关文章:
- 与互斥锁相比,旋转锁可以保证上下文切换
- 如何在运行中期切换GTK CSS style_context
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 如何在cpp文件之间切换窗口?在Qt中
- 有没有任务栏API可以立即应用注册表更改
- 如何切换整数的 N 位
- 切换大小写后如何阻止变量重置?
- 如何创建线程序列以按照启动顺序执行任务?
- C++一个线程如何正确通信其任务已完成?
- 在线程之间拆分任务总是值得的吗?
- 递归求和任务的错误答案
- "main"函数堆栈中的对象在第一个任务运行时被覆盖 (FreeRTOS)
- C++ 程序菜单使用做同时和切换
- C++ 任务流库入门
- 第一个任务的代码在 RTOS 中切换
- 对于同一任务,线程的等待时间在 0 到 30000 微秒之间系统地切换
- 如何在程序或网站处于活动状态时禁用剪贴板和任务切换操作
- 在c++中禁用任务切换键
- 在任务切换器中显示子窗口
- 在Windows 10上检测活动的虚拟桌面-任务视图-虚拟桌面切换器