gpt4 book ai didi

c++ - 使用 C++ 禁用任务切换键

转载 作者:太空宇宙 更新时间:2023-11-04 13:49:24 27 4
gpt4 key购买 nike

我已经做了很多搜索但没有真正的解决方案(针对我自己的问题)所以我想我会在这里问。

我正在设计一个类似 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。

最佳答案

您的代码很好,只是 Hook 不适用于控制台应用程序,因为 Windows 无法回调到控制台应用程序,它需要一个消息循环。

阅读this Hans Passant 的回答也适用于此。

关于c++ - 使用 C++ 禁用任务切换键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24134998/

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