Отсутствует закрывающая скобка в строке «Mbox.Show» - редактировать нельзя, так как мне нужно 6 отредактированных символов ~. ~

ел этот маленький кусочек кода для регистрации горячей клавиши:

    [DllImport("user32.dll")]
    public static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vlc);

    protected override void WndProc(ref Message m)
    {
        if (m.Msg == 0x0312)
            MessageBox.Show("Hotkey pressed");
        base.WndProc(ref m);
    }

    public FormMain()
    {
        InitializeComponent();
        //Alt + A
        RegisterHotKey(this.Handle, this.GetType().GetHashCode(), 1, (int)'A');
    }

Это работает отлично, но моя проблема в том, что я хочу использовать два разных сочетания клавиш. Я знаю, что вторым параметром является идентификатор, поэтому я решил, что мог бы создать другой идентификатор и добавить новый оператор if в функцию WndProc, но я не уверен, как мне это сделать.

Короче говоря, как мне создать второй ярлык?

Спасибо,

 CodesInChaos16 янв. 2011 г., 15:55
GetHashCode() как удостоверение личности сломано двумя способами. 1) Два типа могут иметь одинаковый хэш 2) Используется неверный диапазон. «Приложение должно указывать значение идентификатора в диапазоне от 0x0000 до 0xBFFF. Общая библиотека DLL должна указывать значение в диапазоне от 0xC000 до 0xFFFF (диапазон, возвращаемый функцией GlobalAddAtom). Чтобы избежать конфликтов с идентификаторами горячих клавиш, определяемыми другими общими DLL, DLL должна использовать функцию GlobalAddAtom для получения идентификатора горячей клавиши. "

Ответы на вопрос(1)

Решение Вопроса
 RegisterHotKey(this.Handle, this.GetType().GetHashCode(), 1, (int)'A')

клавиши, начните с 0. Нет никакой опасности перепутать идентификаторы, идентификаторы горячих клавиш специфичны для каждого дескриптора. Вы получитеЯ бы обратно в метод WndProc (). Используйте m.WParam.ToInt32 (), чтобы получить значение:

protected override void WndProc(ref Message m)
{
    if (m.Msg == 0x0312) {    // Trap WM_HOTKEY
        int id = m.WParam.ToInt32();
        MessageBox.Show(string.Format("Hotkey #{0} pressed", id));
    }
    base.WndProc(ref m);
}
 torno03 сент. 2015 г., 15:24
Отсутствует закрывающая скобка в строке «Mbox.Show» - редактировать нельзя, так как мне нужно 6 отредактированных символов ~. ~

Ваш ответ на вопрос