mediamcce Ответов: 1

Изменение последовательности клавиш с помощью global keyboardhookup in VB.NET


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;

using System.Windows.Forms;
using System.Runtime.InteropServices;
using Utilities;

namespace key_preview {
    public partial class Form1 : Form {
        globalKeyboardHook gkh = new globalKeyboardHook();

        public Form1() {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e) {

            gkh.HookedKeys.Add(Keys.A);
            gkh.HookedKeys.Add(Keys.B);
            gkh.HookedKeys.Add(Keys.C);
            gkh.KeyDown += new KeyEventHandler(gkh_KeyDown);
            gkh.KeyUp += new KeyEventHandler(gkh_KeyUp);
        }

        void gkh_KeyUp(object sender, KeyEventArgs e) {
            if ( e.KeyCode == Keys.A)
            {
                   SendKeys.Send("c");
             }
            if (e.KeyCode == Keys.C)
            {
                    SendKeys.Send ("b");

            }
            if (e.KeyCode == Keys.B)
            {
                    SendKeys.Send("a");
            }
            e.Handled = true;

        }

        void gkh_KeyDown(object sender, KeyEventArgs e) {

            e.Handled = true;
        }
    }
}


Что я уже пробовал:

Я нажимаю клавишу дисплей B, затем B дисплей c. Я хочу нажать клавишу дисплея C и нажмите B, дисплей

Patrice T

В чем вопрос ?
В чем проблема ?
Вы сами пытались это сделать ?

mediamcce

функция sendkey. send () с использованием события keyup не используется.

1 Ответов

Рейтинг:
2

Dave Kreskowiak

Вы не можете использовать SendKeys внутри ключевого события, если только не хотите запустить его снова, и снова, и снова ...

В реальном крючке GlobalKeyboard, если это то, что вы действительно используете, вы должны изменить значение ключа, которое получает крючок, а затем это измененное значение ключа передается вверх по цепочке крючков.

Вы не можете использовать SendKeys для замены одного ключа на другой, потому что вы не изменяете ключ, а отправляете новый. Если исходная клавиша не будет подавлена,вы в конечном итоге получите две клавиши вместо одной.