33 / 33 / 12
Регистрация: 18.10.2014
Сообщений: 339

Добавление еще одной горячей клавиши

09.12.2014, 21:14. Показов 1721. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть 1 хотккей. Но нужно еще добавить штук 5, код отбросил весь лишний, но как добавить не понял.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
using System;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Threading;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
 
        [DllImport("user32.dll")]
        private static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint vk);
        [DllImport("user32.dll")]
        private static extern bool UnregisterHotKey(IntPtr hWnd, int id);
        public Form1()
        {
            InitializeComponent();
            RegisterHotKey(this.Handle, this.GetType().GetHashCode(), (uint)ModiferKeys.Control, (uint)Keys.D1);
        }
        protected override void WndProc(ref Message m)
        {
            if (m.Msg == 0x0312)
            {
                textBox1.Text = "yhooo";
            }
            base.WndProc(ref m);
        }
 
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            UnregisterHotKey(this.Handle, this.GetType().GetHashCode());
        }
 
        [Flags]
        public enum ModiferKeys : uint
        {
            Alt = 1,
            Control = 2,
            Shift = 4,
            Win = 8
        }
 
    }
}
Добавлено через 7 часов 55 минут
Неужели никто не знает.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.12.2014, 21:14
Ответы с готовыми решениями:

Обработка горячей клавиши Ctrl+V
Здравствуйте! Есть код: private void updatableRTB1_KeyDown(object sender, KeyEventArgs e) { if (e.Control...

Обработчик горячей клавиши на форме дублируется
написал простейший обработчик нажатия кнопки. в конструкторе Form1: KeyPreview = true; KeyDown += new KeyEventHandler(Form1_KeyDown);...

Добавление текста в TextBox по нажатию клавиши
Здравствуйте. есть форма с гридом и textbox. textbox скрытый. как сделать чтоб при нажатии на клавиши текст сразу же вносился в textbox? ...

8
 Аватар для Anklav
447 / 305 / 47
Регистрация: 23.01.2013
Сообщений: 661
09.12.2014, 23:21
C#
1
RegisterHotKey(this.Handle, this.GetType().GetHashCode(), (uint)ModiferKeys.Control, (uint)Keys.D1);
Во первых, что это за бред вторым параметром? Причем тут хеш код типа формы? Это айдишник горячей клавиши, нужен для вызова UnregisterHotKey. Их нужно нумеровать и запоминать.

И вполне логично, что для регистрации второй клавиши нужно вызвать функцию 2 ой раз, с другой кнопкой.

C#
1
2
RegisterHotKey(this.Handle, 0, (uint)ModiferKeys.Control, (uint)Keys.D1);
RegisterHotKey(this.Handle, 1, (uint)ModiferKeys.Alt, (uint)Keys.A);
0
33 / 33 / 12
Регистрация: 18.10.2014
Сообщений: 339
09.12.2014, 23:25  [ТС]
Anklav, с этим понял, но
Ошибка 1 Тип "хоткеи.Form1" уже определяет член с именем "WndProc" с теми же типами параметров. Как мне его использовать еще раз?
0
 Аватар для Anklav
447 / 305 / 47
Регистрация: 23.01.2013
Сообщений: 661
09.12.2014, 23:37
Лучший ответ Сообщение было отмечено ivan r как решение

Решение

В сообщении в параметре wParam придет айдишник который вы зарегистрировали.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    RegisterHotKey(this.Handle, 0, 0, (int)Keys.A);
    RegisterHotKey(this.Handle, 1, 0, (int)Keys.B);
 
    protected override void WndProc(ref Message m)
    {
      if (m.Msg == 0x0312)
      {
        if (m.WParam.ToInt32() == 0)
          MessageBox.Show("Click A");
 
        if (m.WParam.ToInt32() == 1)
          MessageBox.Show("Click B");
      }
 
      base.WndProc(ref m);
    }
1
33 / 33 / 12
Регистрация: 18.10.2014
Сообщений: 339
10.12.2014, 13:15  [ТС]
Anklav, спасибо огромное!
Цитата Сообщение от Anklav Посмотреть сообщение
что это за бред вторым параметром?
Я на гуглил код, толком не зная.

Добавлено через 13 часов 24 минуты
Anklav,
C#
1
2
3
RegisterHotKey(this.Handle, 0, 0, (int)Keys.D1);
            RegisterHotKey(this.Handle, 1, 0, (int)Keys.D2);
            RegisterHotKey(this.Handle, 2, 0, (int)Keys.D3);
и
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
protected override void WndProc(ref Message m)
        {
            if (m.Msg == 0x0312)
            {
                if (m.WParam.ToInt32() == 0)
                    if (timer2.Enabled)
                    {
                        toolStripStatusLabel1.Text = "Бесконечный азот выключен";
                        timer2.Stop();
                    }
                    else
                        toolStripStatusLabel1.Text = "Бесконечный азот включен";
                        timer2.Start();
 
                if (m.WParam.ToInt32() == 1)
                    ammo_race();
                if (m.WParam.ToInt32() == 2)
                    ammo_police();
            }
 
            base.WndProc(ref m);
        }
Клавиши сначало работают, а потом перестают. Уже не знаю что делать.
0
 Аватар для Anklav
447 / 305 / 47
Регистрация: 23.01.2013
Сообщений: 661
12.12.2014, 16:06
Этого не достаточно что бы понять в чем проблема.

Ну и после else не стоят фигурные скобки. Таймер все время будет стартовать...
0
33 / 33 / 12
Регистрация: 18.10.2014
Сообщений: 339
12.12.2014, 16:14  [ТС]
Цитата Сообщение от Anklav Посмотреть сообщение
Таймер все время будет стартовать...
он и должен всё время работать пока не будет нажата кнопка которая его отключит. Проект не вижу смысла весь скидывать... Это трейнер для игры, так что кнопки нажимаются во время игры.
0
 Аватар для Anklav
447 / 305 / 47
Регистрация: 23.01.2013
Сообщений: 661
12.12.2014, 18:58
Дело в том что он будет стартовать при нажатии любой клавиши. Внимательнее прочитайте сообщение выше.

Из темы я самоудаляюсь
0
33 / 33 / 12
Регистрация: 18.10.2014
Сообщений: 339
13.12.2014, 13:24  [ТС]
Цитата Сообщение от Anklav Посмотреть сообщение
он будет стартовать при нажатии любой клавиши.
Я вас понимаю я в этом тоже был сильно удивлён, но он не стартует сам, и он запускается когда только в else написано запуск ему и конечно он запускается как надо клавишей 1. Я вот что думаю, таймер нужен что бы был бесконечный азот, то есть он всё время перезаписывает байты, а когда я жму 2 то есть другая функция он обращается к тому же айдишнику приложения, и ко всем тем же параметрам, то есть id, handle и переменные для работы с байтами, я пока надумал использовать для таймера отдельный класс.

Добавлено через 17 часов 58 минут
Всё работает, вот мои ошибки таймера переменные для работы с байтами и другой функции были одинаковые (Исправил.)
Что бы выключалось включалось сделал так.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
if (m.Msg == 0x0312)
            {
                if (m.WParam.ToInt32() == 0)
                    if (timer2.Enabled)
                    {
                        timer2.Stop();
                        toolStripStatusLabel1.Text = "Выключено";
                    }
                    else
                    {
                        toolStripStatusLabel1.Text = "Включено";
                        timer2.Start();
                    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.12.2014, 13:24
Помогаю со студенческими работами здесь

Добавление еще одной пары к имеющимся
Всем привет! Хочу накинуть еще 8 гб оперативки. Материнка asus p8z77-v lx. Уже стоят две планки (на скриншоте инфа) Слышал что бессмысленно...

Отмена горячей клавиши OnKey
Добрый вечер, дорогие форумяне! прошу помочь в решении данного вопроса - если на клавишу "m" записан макрос...

Win и PrtSc в качестве горячей клавиши
Дайте пожалуйста совет: Надо сделать так, чтобы пользователь мог самостоятельно назначить на действие горячую клавишу (через форму...

Показать toolTip при нажатии горячей клавиши
Здравствуйте, не могу понять почему ошибка, вот код: .h class item_Ping : public QObject, public QGraphicsEllipseItem { ...

Вызвать программу из трея нажатием горячей клавиши
День добрый! Необходимо горячими клавиша вызывать программу из трея (нужно, потому что часто на день это необходимо, а мышью редко...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru