Использование глобальных горячих клавиш: получить фактически нажатую клавишу

Вам нужно нормализовать строки версии, чтобы их можно было сравнить. Что-то вроде

import java.util.regex.Pattern;

public class Main {
    public static void main(String... args) {
        compare("1.0", "1.1");
        compare("1.0.1", "1.1");
        compare("1.9", "1.10");
        compare("1.a", "1.9");
    }

    private static void compare(String v1, String v2) {
        String s1 = normalisedVersion(v1);
        String s2 = normalisedVersion(v2);
        int cmp = s1.compareTo(s2);
        String cmpStr = cmp < 0 ? "<" : cmp > 0 ? ">" : "==";
        System.out.printf("'%s' %s '%s'%n", v1, cmpStr, v2);
    }

    public static String normalisedVersion(String version) {
        return normalisedVersion(version, ".", 4);
    }

    public static String normalisedVersion(String version, String sep, int maxWidth) {
        String[] split = Pattern.compile(sep, Pattern.LITERAL).split(version);
        StringBuilder sb = new StringBuilder();
        for (String s : split) {
            sb.append(String.format("%" + maxWidth + 's', s));
        }
        return sb.toString();
    }
}

Печатает

'1.0' < '1.1'
'1.0.1' < '1.1'
'1.9' < '1.10'
'1.a' > '1.9'
3
задан pouyan 18 January 2019 в 05:31
поделиться

1 ответ

Вы должны быть в состоянии узнать фактический ключ, используя идентификатор. Когда вы регистрируете горячую клавишу, вы используете идентификатор, ключ и модификатор. Когда горячая клавиша нажата, Windows выдает идентификатор горячей клавиши в обратном вызове, а не клавишу и модификаторы.

RegisterHotKey(Handle, id: 1, ModifierKeys.Control, Keys.A);
RegisterHotKey(Handle, id: 2, ModifierKeys.Control | ModifierKeys.Alt, Keys.B);
const int WmHotKey = 786;
if (msg.message != WmHotKey)
    return;

var id = (int)msg.wParam;
if (id == 1) // Ctrl + A
{
}
else if (id == 2) // Ctrl + Alt + B
{
}

Вот сообщение в блоге, которое я написал с кодом для регистрации горячей клавиши для приложения WPF: https://www.meziantou.net/2012/06/28/hotkey- глобальные-ярлыки

0
ответ дан meziantou 18 January 2019 в 05:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: