我想编写一个拦截用户输入并更改它的软件。在后期的Windows 98以及之前我们的语言不被正式支持,所以程序员决定发明一种基于ASCII字符(ArmSCII)和字体的书写方法,以便我们可以用我们的语言编写。该软件只是将英文inpur修改为ArmSCII中的相关字符。该计划现在已经老了。我想写一个新的。它应该是全系统的。任何建议我怎样才能钩入键盘并改变输入? C,C++或C#无关紧要。我没事与他们..键盘挂钩和更改用户输入
0
A
回答
2
这里是一个键盘钩子截获用户输入,并将其变为printf("ha ha, I intercepted your [%c] and changed it to [%c]\n", key, key+1);
Win32控制台C/C++代码:
#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 >= 'A' && key <= 'Z')
{
if (GetAsyncKeyState(VK_SHIFT)>= 0) key +=32;
if (CTRL_key !=0 && key == 'y')
{
MessageBox(NULL, "CTRL-y was pressed\nLaunch your app here", "H O T K E Y", MB_OK);
CTRL_key=0;
}
if (CTRL_key !=0 && key == 'q')
{
MessageBox(NULL, "Shutting down", "H O T K E Y", MB_OK);
PostQuitMessage(0);
}
//printf("key = %c\n", key);
printf("ha ha, I intercepted your [%c] and changed it to [%c]\n", key, key+1);
SHIFT_key = 0;
CTRL_key = 0;
ALT_key = 0;
}
//printf("lpszKeyName = %s\n", lpszKeyName);
// printf("%s", lpszKeyName);
}
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);
//ShowWindow(FindWindowA("ConsoleWindowClass", NULL), false);
if (hThread) return WaitForSingleObject(hThread,INFINITE);
else return 1;
}
+0
应用程序中有很多构建错误..: –
相关问题
- 1. 键盘挂钩:更改密钥代码
- 2. 挂钩键盘更改密钥代码
- 3. 键盘挂钩,防止键盘输入到应用程序
- 4. 使用低级别键盘挂钩更改键盘字符
- 5. 键盘挂钩改变键的行为
- 6. Java键盘挂钩
- 7. 键盘挂钩存储键
- 8. 检测键盘挂钩
- 9. 键盘挂钩问题
- 10. 键盘挂钩错误
- 11. 低级键盘挂钩
- 12. 多个键盘和低级挂钩
- 13. 全局键盘钩子/原始输入捕获键盘输入
- 14. Windows键盘挂钩挂起调试器
- 15. 语言栏(输入语言)如何影响键盘挂钩?
- 16. Android edittext键盘更改输入键
- 17. 按了什么键?键盘挂钩
- 18. 更改值挂钩
- 19. 针对Mac的挂钩,特别是键盘挂钩
- 20. 全局键盘挂钩工作,但全局shell挂钩失败
- 21. Raw输入另一个键盘钩子?
- 22. 我可以更改用户的键盘输入吗?
- 23. 如何更改java-ME键盘输入
- 24. 将键盘输入法更改为unicode?
- 25. WinCE设备 - 更改键盘输入法
- 26. 更改输入值在键盘上
- 27. 更改键盘输入文字的Android
- 28. jQuery - 相当于更改/键盘输入
- 29. wxWidgets更改键盘输入语言
- 30. jQuery:输入时更改键盘值
要使用亚美尼亚资讯交换标准代码为什么而不是普通的亚美尼亚语键盘布局(从Windows本地化设置)? – Gir
我自己使用unicode,但很多人要求ArmSCII,所以我也想这样做。 –