25 / 28 / 19
Регистрация: 24.12.2014
Сообщений: 1,259
1
.NET 4.x

Как написать свой Shift? ( или как отловить клавиши )

08.12.2015, 11:47. Показов 2273. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
И снова Здравствуйте!)
Уже 3-й день сижу над Клавиатурным хуком ) KeyboardHook
И никак не могу понять как же отловить Shift (Шифт) ?
Этот класс явно не работает с шифтом и в исключениее мне пишет, что Клавиша не поддерживает

Использую так:
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
public void keyUp(KeyboardHook.VKeys key)
        {
             if (Control.IsKeyLocked(Keys.CapsLock))
                {
                    
                    if (key == KeyboardHook.VKeys.KEY_A)
                    {
                        Shell.Text += "A";
                    }
                    else if (key == KeyboardHook.VKeys.SPACE)
                    {
                        Shell.Text += " ";
                    }
                    else if (key == KeyboardHook.VKeys.KEY_B)
                    {
                        Shell.Text += "B";
                    }
                    else{}
// И так далее!
// Дальше что я пытаюсь сделать так это
//  попробовал так:
                if (Control.IsKeyLocked(Keys.ShiftKey)) // и тут он мне выбивает что не поддерживает!
                {
                 Shell.Text += "@";
                 }
}
Так вот как же сделать так чтобы:
C#
1
2
3
4
5
if ( проверка что нажата клавиша Shift)
{
 // Дальнейшее действие!
}
else {} //Если не нажато пропускаем
P.S: Класс с которым я работаю.. KeyboardHook.zip

P.P.S: Или помогите написать отдельный Shift ( Если у кого имеется реализация поделитесь буду благодарен :*
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.12.2015, 11:47
Ответы с готовыми решениями:

Как имитировать нажатия и удерживания клавиши Shift
Здравствуйте Как написать код что бы при нажатии горячей клавиши(назначу потом) запустился цикл...

Как реализовать работу одновременно нажатой клавиши Shift и button1?
Подскажите как можно реализовать такую вещь к примеру когда нажимается button1 выполняется одно...

Как отловить нажатие клавиши?
Нужно отлавливать нажатие любой клавиши (если не отлавливаются три-четыре клавиши типа TAB - ничего...

Как отловить нажатие клавиши?
Доброго времени и суток ! Я хочу узнать : Есть ли какое подобие в питоне для определения нажатия...

8
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.12.2015, 12:21 2
C#
1
2
bool shiftDown = (Control.ModifierKeys & Keys.Shift) == Keys.Shift;
bool shiftDown2 = Control.ModifierKeys.HasFlag(Keys.Shift);
1
25 / 28 / 19
Регистрация: 24.12.2014
Сообщений: 1,259
08.12.2015, 12:29  [ТС] 3
Как использовать?
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.12.2015, 12:47 4
chaleureux,
C#
1
2
3
4
if (shiftDown2)
{
   //...
}
1
25 / 28 / 19
Регистрация: 24.12.2014
Сообщений: 1,259
08.12.2015, 14:22  [ТС] 5
Попробую спс, отпишусь если что

Добавлено через 1 час 9 минут
Не работает а что за HasFlag ? он не определяется

Добавлено через 14 минут
Сори, в теме написано Net 4 framework, а я не проглядел ( вообще делаю на 3-ем )
Поэтому и не читает HasFlag !
Можно ли как нибудь подделать на 3-й framework
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.12.2015, 14:35 6
chaleureux, можно:
C#
1
bool shiftDown = (Control.ModifierKeys & Keys.Shift) == Keys.Shift;
0
25 / 28 / 19
Регистрация: 24.12.2014
Сообщений: 1,259
08.12.2015, 14:46  [ТС] 7
не работает Жму шифт + клавишу и в текстбоксе просто цифры (

Добавлено через 5 минут
Ну а вообще что я хочу это получить знаки, если жмем шифт + 5 = получаем %, если жмем 4 получаем ; и т д
но для этого нужно зафиксировать шифт
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.12.2015, 14:54 8
chaleureux, простой пример:
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
using System;
using System.Windows.Forms;
 
namespace ShiftMessage
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainForm());
        }
    }
 
    internal class MainForm : Form
    {
        public MainForm()
        {
            KeyDown += (s, e) =>
                       {
                           bool shiftDown = (Control.ModifierKeys & Keys.Shift) == Keys.Shift;
                           if (shiftDown)
                               MessageBox.Show("Нажали шифт!!");
                       };
        }
    }
}
Добавлено через 59 секунд
C#
1
bool shiftDown = (e.Modifiers & Keys.Shift) == Keys.Shift;
даст такой же результат.
0
25 / 28 / 19
Регистрация: 24.12.2014
Сообщений: 1,259
09.12.2015, 01:25  [ТС] 9
Ну в принципе работает показывает то что нужно, но + ко всему как присвоить false?
например
у меня действует
C#
1
2
3
4
5
6
7
8
if (key == KeyboardHook.VKeys.KEY_A)
                    {
                        Shell.Text += "A";
                    }
                    else if (key == KeyboardHook.VKeys.KEY_B)
                    {
                        Shell.Text += "B";
                    }
// ниже собственно прописываю для знаков

C#
1
2
3
4
5
6
7
8
bool shiftDown = (Control.ModifierKeys & Keys.Shift) == Keys.Shift;
                    if (shiftDown)
                    {
                        if (key == KeyboardHook.VKeys.KEY_5)
                        {
                            Shell.Text += "%";
                        }
                    }
// но в текст боксе он появляется по 2 знака ( типо : 5% ) как сделать для первого false, а для второго true ???

Добавлено через 32 минуты
Не красиво получается, вывод (1! 2" 3№ 4; 5% 6: 7? 8* (9 )0)

Добавлено через 7 часов 58 минут
кто нибудь поможет решить эту задачу?

Добавлено через 1 час 52 минуты
Всё получилось долго копался, но нашел решение нужно просто было сделать 2-й шифт наподобие и присвоить ему значение == false)
Всем спасибо кто помогал)

C#
1
2
bool shiftDown2 = (Control.ModifierKeys & Keys.Shift) == Keys.Shift;
                    if (shiftDown2 == false)
0
09.12.2015, 01:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.12.2015, 01:25
Помогаю со студенческими работами здесь

Как отловить нажатие клавиши
Мне нужно, чтобы при нажатии клавиши вверх что-то происходило. Напишите лучше эту задачу, потом...

Как программно включать и отключать клавиши (ALT, Shift, Win, Ctrl, F4)
Как программно включать и отключать клавиши(ALT, Shift, Win, Ctrl, F4) Добавлено через 3 минуты...

Клавиши shift глючат, при нажатии активируется ещё по 10 клавиш на каждый shift
Добрый день. Товарищи, прошу вас помочь, на форумах ничего не нашёл, способы в стиле переустановки...

Как отловить клавиши в KeyDown компонента textBox?
Как можно отловить клавиши в KeyDown компонента textBox? Visual C++ 2013 Приложения для Windows...


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

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

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