Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/147: Рейтинг темы: голосов - 147, средняя оценка - 4.77
4 / 1 / 0
Регистрация: 13.01.2009
Сообщений: 26

Глобальный прехват нажатия клавиш

19.01.2009, 03:03. Показов 27487. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно, что бы программка перехватила нажатие какой-то клавиши, с условием, что пользователь может работать и в другом окне.
В конкретном случае нажатие клавиши будет прерывать работу программы..

Вот только как организовать перехват? С примером кода, пожалуйста
1
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.01.2009, 03:03
Ответы с готовыми решениями:

Глобальный перехват сочетаний клавиш
Здравствуйте! Подскажите(покажите) пожалуйста, как сделать чтобы при нажатии на Ctrl+V, в том месте где курсор появилась моя форма!?

Глобальный перехват нажатий клавиш в системе
Всем доброго вечера. Хотелось реализовать программу которая будет при нажатии скажем Pause/Break? открывает Form2, пробовал так ...

Глобальный перехват сочетания клавиш в системе
Задача такая: нужно сделать программу, которая по-умолчанию будет невидимой, а по нажатию клавиш Ctrl+Shift+D показывать окно с несколькими...

14
Комбайнёр
 Аватар для MAcK
1606 / 704 / 77
Регистрация: 27.05.2008
Сообщений: 2,535
19.01.2009, 08:46
Есть пример ... скину завтра (во-вторник)
1
0 / 0 / 0
Регистрация: 20.01.2009
Сообщений: 17
20.01.2009, 20:54
И мне
0
4 / 1 / 0
Регистрация: 13.01.2009
Сообщений: 26
21.01.2009, 03:50  [ТС]
Вторник прошел а я все жду примера.... с нетерпением)
Хочется уже закончить эту прогу... остался вот такой штришок..)
0
0 / 0 / 0
Регистрация: 20.01.2009
Сообщений: 17
21.01.2009, 07:26
... а мне бы ее начать
0
Комбайнёр
 Аватар для MAcK
1606 / 704 / 77
Регистрация: 27.05.2008
Сообщений: 2,535
21.01.2009, 10:17
Лучший ответ Сообщение было отмечено как решение

Решение

Забыл просто

Вот один пример:
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
public sealed class KeyboardHook : IDisposable
{
    // Registers a hot key with Windows.
    [DllImport(“user32.dll)]
    private static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint vk);
    // Unregisters the hot key with Windows.
    [DllImport(“user32.dll)]
    private static extern bool UnregisterHotKey(IntPtr hWnd, int id);
 
 
    /// <summary>
    /// Represents the window that is used internally to get the messages.
    /// </summary>
    private class Window : NativeWindow, IDisposable
    {
        private static int WM_HOTKEY = 0×0312;
 
        public Window()
        {
            // create the handle for the window.
            this.CreateHandle(new CreateParams());
        }
 
        /// <summary>
        /// Overridden to get the notifications.
        /// </summary>
        /// <param name="m"></param>
        protected override void WndProc(ref Message m)
        {
            base.WndProc(ref m);
 
            // check if we got a hot key pressed.
            if (m.Msg == WM_HOTKEY)
            {
                // get the keys.
                Keys key = (Keys)(((int)m.LParam >> 16) & 0xFFFF);
                ModifierKeys modifier = (ModifierKeys)((int)m.LParam & 0xFFFF);
 
                // invoke the event to notify the parent.
                if (KeyPressed != null)
                    KeyPressed(this, new KeyPressedEventArgs(modifier, key));
            }
        }
 
        public event EventHandler<KeyPressedEventArgs> KeyPressed;
 
        #region IDisposable Members
 
        public void Dispose()
        {
            this.DestroyHandle();
        }
 
        #endregion
    }
 
    private Window _window = new Window();
    private int _currentId;
 
    public KeyboardHook()
    {
        // register the event of the inner native window.
        _window.KeyPressed += delegate(object sender, KeyPressedEventArgs args)
        {
            if (KeyPressed != null)
                KeyPressed(this, args);
        };
    }
 
    /// <summary>
    /// Registers a hot key in the system.
    /// </summary>
    /// <param name="modifier">The modifiers that are associated with the hot key.</param>
    /// <param name="key">The key itself that is associated with the hot key.</param>
    public void RegisterHotKey(ModifierKeys modifier, Keys key)
    {
        // increment the counter.
        _currentId = _currentId + 1;
 
        // register the hot key.
        if (!RegisterHotKey(_window.Handle, _currentId, (uint)modifier, (uint)key))
            throw new InvalidOperationException(“Couldn’t register the hot key.);
    }
 
    /// <summary>
    /// A hot key has been pressed.
    /// </summary>
    public event EventHandler<KeyPressedEventArgs> KeyPressed;
 
    #region IDisposable Members
 
    public void Dispose()
    {
        // unregister all the registered hot keys.
        for (int i = _currentId; i > 0; i–)
        {
            UnregisterHotKey(_window.Handle, i);
        }
 
        // dispose the inner native window.
        _window.Dispose();
    }
 
    #endregion
}
 
/// <summary>
/// Event Args for the event that is fired after the hot key has been pressed.
/// </summary>
public class KeyPressedEventArgs : EventArgs
{
    private ModifierKeys _modifier;
    private Keys _key;
 
    internal KeyPressedEventArgs(ModifierKeys modifier, Keys key)
    {
        _modifier = modifier;
        _key = key;
    }
 
    public ModifierKeys Modifier
    {
        get { return _modifier; }
    }
 
    public Keys Key
    {
        get { return _key; }
    }
}
 
/// <summary>
/// The enumeration of possible modifiers.
/// </summary>
[Flags]
public enum ModifierKeys : uint
{
    Alt = 1,
    Control = 2,
    Shift = 4,
    Win = 8
}
Также есть исходник.
Вложения
Тип файла: zip HotkeyDemo_src.zip (14.2 Кб, 2219 просмотров)
11
4 / 1 / 0
Регистрация: 13.01.2009
Сообщений: 26
23.01.2009, 20:16  [ТС]
фуф, с помощью исходника разобралась. Спасибо огромное)))
0
7 / 7 / 3
Регистрация: 05.02.2009
Сообщений: 30
07.02.2009, 20:06
нажатие какой-то клавиши, с условием, что пользователь может работать и в другом окне
C#
1
2
3
4
5
6
7
8
9
public Form2 fr = new Form2();
        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Alt & e.KeyCode == Keys.T)
            {
 
                fr.ShowDialog();
            }
        }
2
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
08.02.2009, 15:30
Цитата Сообщение от Notebook Посмотреть сообщение
нажатие какой-то клавиши, с условием, что пользователь может работать и в другом окне
Это обработка нажатия кнопки при работе с окном Form1. Будет работать если Form1 активна.
0
Albond
23.04.2009, 22:16
Спасибо за исходник! Очень помог, из него легко сделать регистрацию глобальных клавишь.
janincannab
17.07.2009, 11:27
Спасибо!
11 / 11 / 1
Регистрация: 02.08.2009
Сообщений: 6
02.08.2009, 11:01
присоединяюсь к просьбе

незнаю как ето замутить
скажем програмка висит в трее или гдето бэкграунд неважно где главное неактивна

я работаю с чемто другим например пишу в ворде тут мне нужно вызвать мою прогу
я работая с другой прогой нажимаю F7 открывается окно моей проги
она выполняет определеные действия я нажимаю кнопку ОК окно закрывается и я возрашаюсь к тому приложению над которым работал

и еще моментик после нажатия ок значение которое было в одном из текст боксов должно вставится автоматом в текст над которым я работал в то место где был курсор в момент нажатия F7

Добавлено через 26 минут 6 секунд
большое спосибо за пример приведеный выше
но там например если я сверну форму в низ то она уже не преехватывает хот кей там кому нужно надо убрать в возможностях формы ету функцию чтоб ее нельзя было свернуть
мнеже хотелось бы сделать чтобы форма была вообще закрыта либо в трее
1
Комбайнёр
 Аватар для MAcK
1606 / 704 / 77
Регистрация: 27.05.2008
Сообщений: 2,535
02.08.2009, 11:04
Ну так есть пример как сделать глобальный перехват:
1. Регистрируете F7 потом в обработчике пишите что нужно форму покаать, развернуть в нормальное положение и задаёте координаты формы, если нужно.
1
11 / 11 / 1
Регистрация: 02.08.2009
Сообщений: 6
02.08.2009, 11:41
а как задать F7 а то там в списке только буквы и цыфры
я просто только учусь такчто просьба не ругаса Ж)
в HotkeyValue.txt какой номер прописать

Добавлено через 8 минут 25 секунд
функцию регестрации hotkey надо наверно прописать в маин
потом когда нажат хоткей открывается форма
можно ли так сделать?

Добавлено через 25 минут 39 секунд
C#
1
2
3
4
private void FrmMain_Load(object sender, System.EventArgs e)
{
    FrmMain.RegisterHotKey(this.Handle, this.GetType().GetHashCode(), ShortcutInput.Win32ModifiersFromKeys(Keys.F7), ShortcutInput.CharCodeFromKeys(Keys.F7));
}
я так понимаю так я регистрирую F7 при загрузке формы?
2
 Аватар для FreeWay
84 / 84 / 19
Регистрация: 17.12.2007
Сообщений: 574
17.06.2011, 20:52
Цитата Сообщение от Notebook Посмотреть сообщение
нажатие какой-то клавиши, с условием, что пользователь может работать и в другом окне
Код C#
1 2 3 4 5 6 7 8 9 public Form2 fr = new Form2(); private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.Alt & e.KeyCode == Keys.T) { fr.ShowDialog(); } }
а у меня никак работать не хочет:

C#
1
2
3
4
5
6
7
8
9
      private void main_f_KeyDown(object sender, KeyEventArgs e)
        {
            //if (e.Alt & e.KeyCode == Keys.X)
            if (e.KeyCode == Keys.Insert)
            {
 
                MessageBox.Show("pla");
            }
        }

main_f - моя главная форма.

что я не так делаю?

Добавлено через 3 минуты
Цитата Сообщение от MAcK Посмотреть сообщение
Есть пример ... скину завтра (во-вторник)
спасибо огромное, полезнейшая штука....
а скажи пж, на 64 бит винде этот метод не будет работать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.06.2011, 20:52
Помогаю со студенческими работами здесь

Обработка событий вне формы (глобальный перехват клавиш)
Здравствуйте, уважаемые форумчане! В процессе обучения у меня возникли 2 вопроса: 1. Можно ли написать приложение для обработки нажатия...

Имитация нажатия клавиш
Доброго времени суток! Возможно ли в консольном приложении програмно нажать клавишу &lt;Enter&gt;?

Отслеживание нажатия клавиш
Есть label1. Как сделать так, чтобы при нажатии клавиши &quot;w&quot; текст label1 менялся на &quot;ww&quot;?

Обработка нажатия клавиш
Здравствуйте. Я интересуюсь разработкой звуковых игр. Здесь я использую как игровое окно Windows Forms с настройками полного черного...

Отслеживания нажатия клавиш в системе
Есть такой код - private void Form1_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == (char)Keys.W) ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
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-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru