С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
33 / 33 / 12
Регистрация: 18.10.2014
Сообщений: 339

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

09.12.2014, 21:14. Показов 1717. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
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? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru