如何禁用另一个程序中的密钥
How to disable a key in another program?
我正在用visual C++编写一个程序,该程序应该会更改游戏中的一些键盘键。
我曾经kHook = SetWindowsHookEx(WH_KEYBOARD_LL,setkey,NULL,0);
了解电脑中的按键和FindWindow()
找到我应该处理代码的游戏,以获得在该游戏中按下的键。
但我需要禁用一些键,例如当空间被点击时,我需要阻止游戏知道空间被点击了。实际上在那个游戏中禁用空间我该怎么办。我搜索了很多,但一无所获。
基本上,您在LowLevelKeyboardProc
实现(setkey
?)中需要:
- 检查
wParam
是否有WM_KEYDOWN
和WM_KEYUP
消息 - 从
lParam
指向的结构中检查vkCode
是否为VK_SPACE
- 如果1和2都为真,则返回非零以吃掉已处理的消息
这个系统范围的键盘挂钩可能会让你半途而废。它检测空格键。
代码:
#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;
}
相关文章:
- SSH通过/sbin/SSH无法读取RSA密钥文件(从控制台运行)
- 允许从 std::map 的密钥窃取资源?
- TMap::Emplace() 在应用现有密钥时会覆盖吗?
- 在没有密钥的情况下读取密文的剩余噪声预算
- 如何修复无效的API密钥,IP或操作权限错误?
- Qt将给定的密钥发送到活动应用程序
- 是否可以显示需要线性搜索的时间才能找到您在程序中找到的密钥
- C++键盘挂钩-退出程序,但也防止密钥在其他地方被处理
- 如何禁用另一个程序中的密钥
- 在应用程序中嵌入SSL密钥
- OpenSSL:我使用存储外部文件的RSA密钥加密和解密文件,但有时我的程序会崩溃
- 如何接受字符串作为异或加密程序的密钥
- 需要使用"enter"密钥终止程序
- 如何将密钥和鼠标事件发送到 Java 小程序
- 如何防止注册热键阻止其他应用程序的密钥
- 如何关闭或忽略curses应用程序的密钥重复
- KSP(密钥存储提供程序)未通过凭据提供程序在登录时加载
- 链接器编译密钥程序时出错
- 如何使用特定于应用程序的密钥加密目录
- 在KeyDow上的Windows商店应用程序OEM密钥