如何在另一个程序中禁用密钥? 我正在用Visual C++编写一个程序,它应该改变游戏中的一些键盘键。
我曾经 kHook=setWindowshookxwh\u键盘,setkey,NULL,0; 要知道在计算机和 芬德温多 为了找到游戏,我应该处理我的代码,以获得该游戏中的按键 但是我需要禁用一些键,例如,当点击空格时,我需要阻止游戏知道空格被点击。实际上,在那个游戏中禁用空间我应该怎么做。我找了很多,但什么也没找到。请仔细阅读。答案是有的 基本上,您需要在低层KeyboardProc实现中设置密钥: 检查wParam中的WM_KEYDOWN和WM_keydup消息 从LPRAM指向的结构中检查VK_空间的vkCode 如果1和2均为真,则返回非零的已处理消息如何在另一个程序中禁用密钥? 我正在用Visual C++编写一个程序,它应该改变游戏中的一些键盘键。,c++,visual-c++,C++,Visual C++,我曾经 kHook=setWindowshookxwh\u键盘,setkey,NULL,0; 要知道在计算机和 芬德温多 为了找到游戏,我应该处理我的代码,以获得该游戏中的按键 但是我需要禁用一些键,例如,当点击空格时,我需要阻止游戏知道空格被点击。实际上,在那个游戏中禁用空间我应该怎么做。我找了很多,但什么也没找到。请仔细阅读。答案是有的 基本上,您需要在低层KeyboardProc实现中设置密钥: 检查wParam中的WM_KEYDOWN和WM_keydup消息 从LPRAM指向的结构中检查
这个全系统键盘挂钩可能会让你半途而废。它检测到空格键 代码:
非常感谢,我的问题是返回非零
#define _WIN32_WINNT 0x0400
#pragma comment( lib, "user32.lib" )
#include <windows.h>
#include <stdio.h>
HHOOK hKeyboardHook;
__declspec(dllexport) LRESULT CALLBACK KeyboardEvent (int nCode, WPARAM wParam, LPARAM lParam)
{
DWORD SHIFT_key=0;
DWORD CTRL_key=0;
DWORD ALT_key=0;
if ((nCode == HC_ACTION) && ((wParam == WM_SYSKEYDOWN) || (wParam == WM_KEYDOWN)))
{
KBDLLHOOKSTRUCT hooked_key = *((KBDLLHOOKSTRUCT*)lParam);
DWORD dwMsg = 1;
dwMsg += hooked_key.scanCode << 16;
dwMsg += hooked_key.flags << 24;
char lpszKeyName[1024] = {0};
lpszKeyName[0] = '[';
int i = GetKeyNameText(dwMsg, (lpszKeyName+1),0xFF) + 1;
lpszKeyName[i] = ']';
int key = hooked_key.vkCode;
SHIFT_key = GetAsyncKeyState(VK_SHIFT);
CTRL_key = GetAsyncKeyState(VK_CONTROL);
ALT_key = GetAsyncKeyState(VK_MENU);
if (key ==VK_SPACE) //Space key detected, do stuff
{
MessageBox(NULL, "Space key detected", "Keyboard hook", MB_OK);
return 1;
}
}
return CallNextHookEx(hKeyboardHook, nCode,wParam,lParam);
}
void MessageLoop()
{
MSG message;
while (GetMessage(&message,NULL,0,0))
{
TranslateMessage( &message );
DispatchMessage( &message );
}
}
DWORD WINAPI my_HotKey(LPVOID lpParm)
{
HINSTANCE hInstance = GetModuleHandle(NULL);
if (!hInstance) hInstance = LoadLibrary((LPCSTR) lpParm);
if (!hInstance) return 1;
hKeyboardHook = SetWindowsHookEx ( WH_KEYBOARD_LL, (HOOKPROC) KeyboardEvent, hInstance, NULL );
MessageLoop();
UnhookWindowsHookEx(hKeyboardHook);
return 0;
}
int main(int argc, char** argv)
{
HANDLE hThread;
DWORD dwThread;
hThread = CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE) my_HotKey, (LPVOID) argv[0], NULL, &dwThread);
if (hThread) return WaitForSingleObject(hThread,INFINITE);
else return 1;
}