C++键盘挂钩 CTRL 键卡住
C++ keyboard hook CTRL key gets stuck
我希望在我的Windows 10机器上重写ctrl +c和ctrl+v以添加一些附加功能。
我能够正确复制和粘贴,并成功创建了一个键盘挂钩来在按下这些键后执行我的代码,但是在我的程序运行时按 ctrl 后我遇到了问题,ctrl连续就像按住一样。即使在我完全终止程序后,ctrl仍会继续充当,就好像它被按住一样,直到我完全注销计算机。我该怎么做才能纠正这种情况?
谢谢!
编辑:在做了一些混乱之后,我可以得出结论,任何键都被卡住了。换档和大写锁定也会卡住。
#include <Windows.h>
#include <stdio.h>
#include <queue>
using namespace std;
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) {
PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT)lParam;
if (wParam == WM_KEYDOWN) {
if (p->vkCode == 0x43 && GetKeyState(VK_CONTROL) & 0x8000) { // ctrl-c is pressed
WM_COPY;
}
else if (p->vkCode == 0x56 && GetKeyState(VK_CONTROL) & 0x8000) { // ctrl-v is pressed
OpenClipboard(NULL);
char* buffer;
buffer = (char*)GetClipboardData(CF_TEXT);
CloseClipboard();
cout << buffer;
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
}
int main()
{
HHOOK keyBoard = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, NULL, NULL);
MSG msg;
while (!GetMessage(&msg, NULL, NULL, NULL)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
UnhookWindowsHookEx(keyBoard);
}
不要把return CallNextHookEx(NULL, nCode, wParam, lParam)
放在if (wParam == WM_KEYDOWN)
中。
修改:
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) {
PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT)lParam;
if (wParam == WM_KEYDOWN) {
if (p->vkCode == 0x43 && GetKeyState(VK_CONTROL) & 0x8000) { // ctrl-c is pressed
WM_COPY;
}
else if (p->vkCode == 0x56 && GetKeyState(VK_CONTROL) & 0x8000) { // ctrl-v is pressed
OpenClipboard(NULL);
char* buffer;
buffer = (char*)GetClipboardData(CF_TEXT);
CloseClipboard();
cout << buffer;
}
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
相关文章:
- 物理键盘上的触发器按键
- 如何使用C/C++在MacOSX中获得键盘布局
- 热键/按钮,根据需要进行编译,但不运行(在F5和Ctrl+Shift+B之间)
- 捕获标准输出以压缩并使用 CTRL-C 中断会给出损坏的 zip 文件
- 视窗键盘输入 c++
- 将鼠标和键盘输入发送到 unity3d 游戏 (Rust)
- C ++异步键盘输入(标准方式)
- Ctrl + 不适用于在 Visual Studio 中运行该程序
- 键盘不起作用 - Arduino Uno - 与变量有关的多个错误
- 如何在 WindowProc 处理程序中区分箭头键和数字键盘?
- 覆盖应用程序的低级别键盘挂钩问题
- C++键盘挂钩 CTRL 键卡住
- 在 OpenGL 中使用键盘移动 3D 形状,C++
- SFML 键盘条件或
- 找不到键盘,即使我包括键盘。
- 在C++中隐藏键盘记录器的控制台窗口
- 盖奇不读取键盘输入
- 使用Boost async_read和POSIX::stream_descriptor从键盘读取
- 在 Linux 上C++:在作为 systemd 服务运行时侦听键盘输入
- 当用户在键盘上按住 CTRL 键时,如何在树视图中的 Qt 中实现多选?