C++ 如何在c++;用低级键盘程序?
我需要重新映射一些键,比如Left Alt,但我只是禁用了它,所以禁用Left Alt的代码如下所示:C++ 如何在c++;用低级键盘程序?,c++,windows,keyboard,shortcut,remap,C++,Windows,Keyboard,Shortcut,Remap,我需要重新映射一些键,比如Left Alt,但我只是禁用了它,所以禁用Left Alt的代码如下所示: LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) { if (nCode == HC_ACTION) { KBDLLHOOKSTRUCT* p = (KBDLLHOOKSTRUCT*) lParam; if (p->vkCode ==
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode == HC_ACTION)
{
KBDLLHOOKSTRUCT* p = (KBDLLHOOKSTRUCT*) lParam;
if (p->vkCode == VK_LMENU) return 1;
}
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
因此,我尝试将Left Alt重新映射到Left Ctrl,并使用类似于keybd_event
和sendmagesa
的函数,但没有得到任何结果
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode == HC_ACTION)
{
KBDLLHOOKSTRUCT* p = (KBDLLHOOKSTRUCT*) lParam;
if (p->vkCode == VK_LMENU)
{
keybd_event(VK_CONTROL, 0, 0, 0);
// or use this is sameSendMessageA(0, WM_KEYUP, VK_CONTROL, 0);
}
}
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
如何将左Alt重新映射到左Ctrl 这是一种将Alt重新映射到Ctrl的方法,效果非常好。不要忘记默认参数
如果不定义wParam,请切换回alt可能只是我的计算机,请尝试一下
include iostream
include windows.h
using namespace std;
HHOOK hHook = 0;
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode == HC_ACTION)
{
KBDLLHOOKSTRUCT* p = (KBDLLHOOKSTRUCT*) lParam;
if (p->vkCode == VK_LMENU) // VK_LMENU = ALT key
{
switch (wParam){
case WM_SYSKEYDOWN :{ // use SYSKEYDOWN
cout << "Key down" << endl;
keybd_event(VK_LCONTROL, 0x1D, KEYEVENTF_EXTENDEDKEY | 0, 0 );
break;
}
case WM_KEYUP: // use regular keyup
{
cout << "Key up" << endl;
keybd_event( VK_LCONTROL, 0x1D, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
return 1;
break;
}
default:
wParam = WM_SYSKEYDOWN; // if you do not specify it changes back to alt
break;
}
return 1;
}
}
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nCmdShow)
{
hHook = SetWindowsHookEx(WH_KEYBOARD_LL, &LowLevelKeyboardProc, hThisInstance, NULL);
if (hHook == NULL)
{
cout << "Error" << endl;
return 1;
}
MSG messages;
while (GetMessage (&messages, NULL, 0, 0))
{
TranslateMessage(&messages);
DispatchMessage(&messages);
}
return messages.wParam;
}
包含iostream
包括windows.h
使用名称空间std;
HHOOK HHOOK=0;
LRESULT回调LowLevelKeyboardProc(int-nCode、WPARAM-WPARAM、LPARAM-LPARAM)
{
如果(nCode==HC\U动作)
{
KBDLLHOOKSTRUCT*p=(KBDLLHOOKSTRUCT*)lParam;
如果(p->vkCode==VK\u LMENU)//VK\u LMENU=ALT键
{
交换机(wParam){
案例WM_SYSKEYDOWN:{//使用SYSKEYDOWN
库特