Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.79/14: Рейтинг темы: голосов - 14, средняя оценка - 4.79
Genu
54 / 54 / 11
Регистрация: 07.03.2010
Сообщений: 157
1

Запрет клавиш

27.03.2010, 13:42. Просмотров 2761. Ответов 3
Метки нет (Все метки)

Здравствуйте, у меня вопрос: Как запретить использование клавиш или чтобы эти клавиши не выполняли своё действие. Например: Alt + F4. Как запретить их использование?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2010, 13:42
Ответы с готовыми решениями:

Запрет нажатия клавиш в определенном процессе
Hello! Ребят, такой вопрос, можно ли как либо "убрать" реакцию на нажатие той или иной клавиши в...

Запрет нажатий клавиш
Как запретить пользователю нажимать клавишу PrtSc power home cmd shift + цифра .. ?

Запрет горячих клавиш windows в программе
Как можно сделать, чтобы после запуска программы до ее закрытия, горячие клавиши переставали...

Запрет нажатия клавиш Backspace и Delete
Подскажите пожалуйста. Как запретить использование на странице клавиш клавиатуры Backspace и...

Запрет нажатий сочетаний клавиш для определенного процесса
Всем привет! В Visual Basic я новичок, но мне нужно решить одну задачу. Запретить нажатие следующих...

3
Alligieri
CEO
Эксперт С++
2254 / 1244 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
27.03.2010, 17:14 2
Цитата Сообщение от Genu Посмотреть сообщение
Здравствуйте, у меня вопрос: Как запретить использование клавиш или чтобы эти клавиши не выполняли своё действие. Например: Alt + F4. Как запретить их использование?
Перехватывать их нажатие в оконной процедуре и не передавать системе, перехватывать действия таких сочетаний (например закрытие окна как в данном случае) и отменять их.
1
Mikant
1292 / 965 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
27.03.2010, 18:09 3
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
    public class WindowsShell {
        #region fields
        public static int MOD_ALT = 0x1;
        public static int MOD_CONTROL = 0x2;
        public static int MOD_SHIFT = 0x4;
        public static int MOD_WIN = 0x8;
        public static int WM_HOTKEY = 0x312;
        #endregion
 
        [DllImport("user32.dll")]
        private static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vlc);
 
        [DllImport("user32.dll")]
        private static extern bool UnregisterHotKey(IntPtr hWnd, int id);
 
        private static int keyId;
        public static void RegisterHotKey(Form f, Keys key) {
            int modifiers = 0;
 
            if ((key & Keys.Alt) == Keys.Alt)
                modifiers = modifiers | WindowsShell.MOD_ALT;
 
            if ((key & Keys.Control) == Keys.Control)
                modifiers = modifiers | WindowsShell.MOD_CONTROL;
 
            if ((key & Keys.Shift) == Keys.Shift)
                modifiers = modifiers | WindowsShell.MOD_SHIFT;
 
            Keys k = key & ~Keys.Control & ~Keys.Shift & ~Keys.Alt;
 
            Func ff = delegate() {
                    keyId = f.GetHashCode(); // this should be a key unique ID, modify this if you want more than one hotkey
                    RegisterHotKey((IntPtr)f.Handle, keyId, modifiers, (int)k);
                };
 
            f.Invoke(ff); // this should be checked if we really need it (InvokeRequired), but it's faster this way
        }
 
        private delegate void Func();
 
        public static void UnregisterHotKey(Form f) {
            try {
                Func ff = delegate() {
                    UnregisterHotKey(f.Handle, keyId); // modify this if you want more than one hotkey
                };
 
                f.Invoke(ff); // this should be checked if we really need it (InvokeRequired), but it's faster this way
            } catch (Exception ex) {
                Debug.WriteLine(ex.ToString());
            }
        }
    }
 
    public partial class Form1 : Form, IDisposable {
        protected override void OnLoad(EventArgs e) {
            base.OnLoad(e);
            Keys k = Keys.F4 | Keys.Alt;
            WindowsShell.RegisterHotKey(this, k);
        }
 
        protected override void WndProc(ref Message m) {
            base.WndProc(ref m);
 
            if (m.Msg == WindowsShell.WM_HOTKEY) {
                MessageBox.Show("Не тут-то было");
            }
        }
 
        // хотя это не обязательно вроде как
        protected override void OnFormClosing(FormClosingEventArgs e) {
            WindowsShell.UnregisterHotKey(this);
            base.OnFormClosing(e);
        }
    }
2
Genu
54 / 54 / 11
Регистрация: 07.03.2010
Сообщений: 157
27.03.2010, 21:33  [ТС] 4
Спасибо!
0
27.03.2010, 21:33
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.03.2010, 21:33

Запрет сворачивания формы, в том числе и с помощью горячих клавиш
Доброе время суток. Пишу программу на visual basic 6.0. Подскажите пожалуйста какой код нужно...

Запрет в RTB перехода на новую строку при нажатии сочетания клавиш
Всем приветы! Речь у нас сегодня пойдет про RTB. Рассмотрим такую ситуацию. Допустим, что у меня...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.