我想編寫一個攔截用戶輸入並更改它的軟件。在後期的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,所以我也想這樣做。 –