3

可以在 Windows 8 之前的 Windows 版本上注册 Win+V 热键。使用此组合的示例应用程序是PureText

在 Windows 8 Release Preview 中,我注意到 Windows 8 已经控制了很多涉及 Windows 键的热键,但似乎没有使用 Win+V。下面的代码将允许我为 Win+CTRL+V 注册一个热键:

#include <Windows.h>

int _tmain(int argc, _TCHAR* argv[])
{
    if (RegisterHotKey(
        NULL,
        1,
        MOD_WIN | MOD_NOREPEAT | MOD_CONTROL,
        0x56))  // 0x56 is 'v'
    {
        _tprintf(_T("Hotkey 'CTRL+WIN+V' registered, using MOD_NOREPEAT flag\n"));
    }

    MSG msg = {0};
    while (GetMessage(&msg, NULL, 0, 0) != 0)
    {
        if (msg.message == WM_HOTKEY)
        {
            _tprintf(_T("WM_HOTKEY received\n"));            
        }
    } 

    return 0;
}

如果我将其修改为仅注册 Win+V 那么它将无法注册:

if (RegisterHotKey(
    NULL,
    1,
    MOD_WIN | MOD_NOREPEAT,
    0x56))  // 0x56 is 'v'
{
    _tprintf(_T("Hotkey 'WIN+V' registered, using MOD_NOREPEAT flag\n"));
}

有没有办法强制注册 Windows+V 热键?我认为可能有一种方法可以通过 Win32 API 挂钩来做到这一点,但我已经有一段时间没有看到它了。实现这一点的更容易支持的选项将不胜感激。

4

3 回答 3

4

RegisterHotKey函数始终为系统保留 Windows 键。文档甚至指出:

MOD_WIN 0x0008
任一 WINDOWS 键被按住。这些键标有 Windows 徽标。涉及 WINDOWS 键的键盘快捷键保留供操作系统使用。

在注册自己的非系统热键时,您应该选择不同的 [set of] 修饰键。

此外,正如其他人所提到的,Windows key+V键盘快捷键已经在使用中。RegisterHotKey当您尝试注册已注册的热键时失败。

许多 Win32 函数设置了一个错误代码,当它们不工作时,它会指出究竟出了什么问题。如果文档说明了很多,您可以调用该GetLastError函数来确定该错误代码是什么。这将为您提供更多信息以帮助调试问题。

于 2012-08-02T06:20:04.440 回答
2

使用 PlainTexter... 它使用全局键盘钩子。{在我的机器上工作}

http://www.elijahg.com/plaintexter

于 2012-10-27T22:38:34.647 回答
2

这是pdfxps格式的 Windows 8 键盘快捷键的完整列表。Win+V 已经在使用中;它循环通过通知。坚持使用 Win+CTRL+V 可能是您最好的选择。

于 2012-08-02T05:12:14.687 回答