Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
7 / 6 / 6
Регистрация: 20.03.2011
Сообщений: 350

Хук клавиатуры перехват сочетаний клавиш

25.02.2016, 21:15. Показов 3855. Ответов 4

Студворк — интернет-сервис помощи студентам
Задача такая: пользователь нажимает некую клавишу и запускает программу. Программа определяет, что за клавиша была нажата в момент ее запуска. Это как раз все работает с любым из хуков, которые я нашел. Но если пользователь зажимает несколько клавиш, то при включении программу хук ловит только одну из них.
По сути мне надо всего лишь две нажатые клавиши. Есть идеи как это можно реализовать?
P.S. не привожу здесь кода хуков, ибо он очень большой и использовал я разные варианты, но ни один так и не работает как надо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.02.2016, 21:15
Ответы с готовыми решениями:

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

Глобальный перехват сочетаний клавиш
Всем привет! Как возможно при свернутой форме, отловить нажатие 2-3 клавиш(одновременно, например ctrl+alt+b)? И если их нажали то...

Перехват нажатий клавиш клавиатуры (hook)
Вот пример кода перехвата и последующего блокирования комбинации клавиш Alt+Tab namespace WindowsFormsApplication3 { public...

4
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
26.02.2016, 20:12
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
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;
 
namespace KeyHook
{
    public partial class Form1 : Form
    {
        [StructLayout(LayoutKind.Sequential)]
        private struct KBDLLHOOKSTRUCT
        {
            public Keys key;
        }
 
        private delegate IntPtr LowLevelKeyboardProc(
            int nCode, IntPtr wParam, IntPtr lParam);
 
        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern IntPtr SetWindowsHookEx(
            int id, LowLevelKeyboardProc callback, IntPtr hMod, uint dwThreadId);
 
        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern IntPtr CallNextHookEx(
            IntPtr hook, int nCode, IntPtr wp, IntPtr lp);
 
        [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern IntPtr GetModuleHandle(string name);
 
        private IntPtr ptrHook;
 
        private LowLevelKeyboardProc objKeyboardProcess;
 
        public Form1()
        {
            InitializeComponent();
 
            ProcessModule objCurrentModule = 
                Process.GetCurrentProcess().MainModule;
            objKeyboardProcess = new LowLevelKeyboardProc(captureKey);
            ptrHook = SetWindowsHookEx(13, objKeyboardProcess, 
                GetModuleHandle(objCurrentModule.ModuleName), 0);
        }
 
        private IntPtr captureKey(int nCode, IntPtr wp, IntPtr lp)
        {
            if (nCode >= 0)
            {
                KBDLLHOOKSTRUCT objKeyInfo = 
                    (KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lp, typeof(KBDLLHOOKSTRUCT));
                if (objKeyInfo.key == Keys.Alt || objKeyInfo.key == Keys.F4)
                {
                    return (IntPtr)1;
                }
            }
            return CallNextHookEx(ptrHook, nCode, wp, lp);
        }
    }
}
0
7 / 6 / 6
Регистрация: 20.03.2011
Сообщений: 350
03.03.2016, 12:14  [ТС]
_lunar_, неа, не работает на 2 клавиши сразу. Либо на одну, либо на другую
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
03.03.2016, 21:51
Цитата Сообщение от polsok Посмотреть сообщение
не работает на 2 клавиши сразу
запустите приложение и нажмите Alt+F4. Без хука данная комбинация закрывает любое окно. С хук закрыть окно данной комбинацией не получится. Так что всё там работает.

C#
1
2
3
4
if (objKeyInfo.key == Keys.Alt || objKeyInfo.key == Keys.F4)
{
    return (IntPtr)1;
}
в это условие можете добавить хоть все кнопки и тогда вообще ни одна из них работать не будет.
0
7 / 6 / 6
Регистрация: 20.03.2011
Сообщений: 350
04.03.2016, 13:14  [ТС]
_lunar_, так проблема и стоит, в том что нажать клавиши надо перед запуском приложения. И кстати в коде он блокирует не альт и ф4. А нажатие клавиши альт или ф4. Программа срабатывает на нажатие любой из этих клавиш даже по отдельности.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.03.2016, 13:14
Помогаю со студенческими работами здесь

Перехват событий нажатия клавиш (стрелок клавиатуры)
Доброе время суток! Подскажите как перехватить нажатие клавиш "вверх", "вниз", "влево", "вправо" на форме, с...

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

Хук для чтения с клавиатуры. Добавление по кодам клавиатуры
Есть вот такой хук для считывания клавиш globalKeyboardHook gkh = new globalKeyboardHook(); gkh.HookedKeys.Add(Keys.Q); ...

Хук нескольких клавиш
public class Hook : IDisposable { #region Declare WinAPI functions private static extern IntPtr...

Назначение своих сочетаний клавиш
Здравствуйте, уважаемые форумчане! Работаю над некоторым проектом, написанным на C#. Мне бы хотелось сделать так, чтобы по нажатию...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru