1 / 1 / 0
Регистрация: 04.11.2015
Сообщений: 32
1

Манипулирование индикаторами Num/Scroll/CapsLock

23.11.2015, 01:15. Показов 2337. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер!
Написал программу , позволяющую включать и выключать индикаторы на клаве(Scroll,NummCaps)
Возникает необходимость по нажатию клавиши на клавиатуре включать индикаторы/отключать/мигать :
те, по нажатию клавиши 0 - выключим все индикаторы, по нажатию 1 - включим, по нажатию 2 - будем ими мигать.
Алгоритм прост, в обработчике события KeyPress запускаемой формы перехватываю код символа,проверяю,если нужный,то уже работаю с ним :
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
private void Form1_KeyPress(object sender, KeyPressEventArgs e)
        {
            char c = e.KeyChar;
            int i = (int)c;
            if (!( i>57 && i<=48 ))
            {
                e.Handled = true;
                switch (i-48)
                {
                    case 0: //Выкл все
                        {
                            SetNumLockKey(false);
                            SetCapsLockKey(false);
                            SetScrollLockKey(false);
                        }break;
                    case 1: //Вкл все
                        {
                            SetNumLockKey(true);
                            SetCapsLockKey(true);
                            SetScrollLockKey(true);
                        }break;
                    case 2: 
                        {
                            SetNumLockKey(false);
                            SetCapsLockKey(false);
                            SetScrollLockKey(false);
                            for (; ; )
                            {
                                Thread.Sleep(100);
                                SetScrollLockKey(false);
                                Thread.Sleep(100);
                                SetScrollLockKey(true);
 
                                Thread.Sleep(100);
                                SetCapsLockKey(false);
                                Thread.Sleep(100);
                                SetCapsLockKey(true);
 
                                Thread.Sleep(100);
                                SetNumLockKey(false);
                                Thread.Sleep(100);
                                SetNumLockKey(true);
                            }
                        }break;
                }
            }
        }
С нажатием 0 и 1 все понятно, вопрос возник при нажатии 2. После нажатия логичным образом программа зацикливается, и я не могу придумать точку выхода из цикла, поскольку перехвата нажатия клавиш после запуска цикла не происходит.
Как быть?
Спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.11.2015, 01:15
Ответы с готовыми решениями:

Как можно управлять лампочками (светодиодами) Num, Caps, Scroll
Как можно управлять лампочками (светодиодами) Num, Caps, Scroll ? Сделал через эмуляцию нажатия...

Клавиатура мигает всеми тремя индикаторами Caps Lock, Scroll Lock и Num Lock и соответственно не работает!
Здравствуйте парни и девушки! Столкнулся с такой проблемой! Имеется клавиатура Genius Ergomedia...

Управление клавишами и индикаторами CapsLock, ScrLock, NumLock
Добрый всем день. Возникла необходимость программно управлять режимами клавиатуры (имеется ввиду...

Включение/выключение caps num scroll
помогите сделать прогу которая Включает/выключает caps,num,scroll lock использую TASM 5.0 код пишу...

2
911 / 815 / 333
Регистрация: 03.02.2015
Сообщений: 5,266
Записей в блоге: 9
23.11.2015, 02:12 2
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Threading;
 
namespace KeyLed
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();            
 
            this.KeyPreview = true;
        }
 
        Thread FlashTr;
        private const byte VK_SCROLL = 0x91;
        private const byte VK_NUMLOCK = 0x90;
        private const byte VK_CAPITAL = 0x14;
        private const uint KEYEVENTF_KEYUP = 0x2;
         
        [DllImport("user32.dll", EntryPoint = "keybd_event", SetLastError = true)]
        static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo);
         
        [DllImport("user32.dll", EntryPoint = "GetKeyState", SetLastError = true)]
        static extern short GetKeyState(uint nVirtKey);
 
        //Scroll-------------------------------------------------------
        public static void SetScrollLockKey(bool newState)
        {
            bool scrollLockSet = GetKeyState(VK_SCROLL) != 0;
            if (scrollLockSet != newState)
            {
                keybd_event(VK_SCROLL, 0, 0, 0);
                keybd_event(VK_SCROLL, 0, KEYEVENTF_KEYUP, 0);
            }
        }
        public static bool GetScrollLockState()
        {
            return GetKeyState(VK_SCROLL) != 0;
        }
 
        //NUM-------------------------------------------------------
        public static void SetNumLockKey(bool newState)
        {
            bool scrollLockSet = GetKeyState(VK_NUMLOCK) != 0;
            if (scrollLockSet != newState)
            {
                keybd_event(VK_NUMLOCK, 0, 0, 0);
                keybd_event(VK_NUMLOCK, 0, KEYEVENTF_KEYUP, 0);
            }
        }
         
        public static bool GetNumLockState()
        {
            return GetKeyState(VK_NUMLOCK) != 0;
        }
 
        //Caps-------------------------------------------------------
        public static void SetCapsLockKey(bool newState)
        {
            bool scrollLockSet = GetKeyState(VK_NUMLOCK) != 0;
            if (scrollLockSet != newState)
            {
                keybd_event(VK_CAPITAL, 0, 0, 0);
                keybd_event(VK_CAPITAL, 0, KEYEVENTF_KEYUP, 0);
            }
        }
         
        public static bool GetCapsLockState()
        {
            return GetKeyState(VK_CAPITAL) != 0;
        }
        
 
        //
        void Flash()
        {
            while (true)
            {
                SetNumLockKey(true);
                Thread.Sleep(200);
                SetNumLockKey(false);
                Thread.Sleep(200);
                SetCapsLockKey(true);
                Thread.Sleep(200);
                SetCapsLockKey(false);
                Thread.Sleep(200);
                SetScrollLockKey(true);
                Thread.Sleep(200);
                SetScrollLockKey(false);
                Thread.Sleep(200);
            }
        }
        
 
        // 
        private void MainForm_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.F1 && e.Control)
            {
                if (FlashTr != null)
                    FlashTr.Abort();
 
                SetNumLockKey(true);
                SetCapsLockKey(true);
                SetScrollLockKey(true);
            }
            else if (e.KeyCode == Keys.F2 && e.Control)
            {
                if (FlashTr != null)
                    FlashTr.Abort();
 
                SetNumLockKey(false);
                SetCapsLockKey(false);
                SetScrollLockKey(false);
            }
            else if (e.KeyCode == Keys.F3 && e.Control)
            {
                FlashTr = new Thread(Flash);
                FlashTr.IsBackground = true;
                FlashTr.Start();
            }
        }
    }
}
0
1 / 1 / 0
Регистрация: 04.11.2015
Сообщений: 32
23.11.2015, 09:03  [ТС] 3
В обработчике события в каждом if значение e.Control передается как false , соответственно любое из условий не выполняется

Добавлено через 4 минуты
Все, разобрался, тему можно закрывать,благодарю
0
23.11.2015, 09:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.11.2015, 09:03
Помогаю со студенческими работами здесь

Мигание лампочек Num, Caps, Scroll с временными паузами
Необходимо, чтобы определенная лампочка моргнула при выполнении определенного условия. ...

Вывести на экран в символическом виде состояние NUM LOCK, CAPS LOCK и SCROLL LOCK
Помогите решить задачку на турбо си Выводить на экран в символическом виде состояние NUM LOCK,...

Acer aspire 5552G-N974G64Mikk Проблема с Caps Lock, Num Lock, Scroll Lock
Вообщем у меня такая же проблемма https://www.cyberforum.ru/notebooks/thread552722.html ...

Работа с клавиатурой (клавиши num lock, caps lock, scroll lock)
определить состояние статуса клавиш &quot; num lock, caps lock,scroll lock &quot; с отображением и их...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru