Быстрый ввод текста через эмуляцию клавиатуры

Регистрация
23.03.2015
Сообщения
1 218
Благодарностей
751
Баллы
113
Мне надо вводить текст(несколько кусков) с промежуточными действиями мышью.
Что нужно, чтобы после клика мышью в поле ввода текст вводился значительно быстрее чем стандартным кубиком или эти кодом:
C#:
instance.SendText(текст, 0);
Заранее спасибо
 

Shogo

Client
Регистрация
07.04.2015
Сообщения
474
Благодарностей
100
Баллы
43
Вот тоже давно с этим мучаюсь, очень медленно вводит, но за два года так и не нашел способы ускорить этот процесс
 

slavon

Client
Регистрация
24.06.2016
Сообщения
599
Благодарностей
129
Баллы
43
Мне надо вводить текст(несколько кусков) с промежуточными действиями мышью.
Что нужно, чтобы после клика мышью в поле ввода текст вводился значительно быстрее чем стандартным кубиком или эти кодом:
C#:
instance.SendText(текст, 0);
Заранее спасибо
Через Ctrl+v не катит?
 

Ilshakin

Client
Регистрация
14.02.2017
Сообщения
639
Благодарностей
581
Баллы
93
заводишь словарик с обозначением клавиш, по типу ↓ и погнал )

C#:
string text = "Hello World in 2022".ToLower();

Dictionary<char, System.Windows.Forms.Keys> wordKey = new Dictionary<char, System.Windows.Forms.Keys>
{
    {'0', System.Windows.Forms.Keys.D0},
    {'2', System.Windows.Forms.Keys.D2},
    {'e', System.Windows.Forms.Keys.E},
    {'d', System.Windows.Forms.Keys.D},
    {'h', System.Windows.Forms.Keys.H},
    {'i', System.Windows.Forms.Keys.I},
    {'l', System.Windows.Forms.Keys.L},
    {'o', System.Windows.Forms.Keys.O},
    {'n', System.Windows.Forms.Keys.N},
    {'r', System.Windows.Forms.Keys.R},
    {'w', System.Windows.Forms.Keys.W},
    {' ', System.Windows.Forms.Keys.Space}
};

foreach (var s in text)
    Emulator.SendKey(instance.ActiveTab.Handle, wordKey[s], KeyboardEvent.Down);
 

Shogo

Client
Регистрация
07.04.2015
Сообщения
474
Благодарностей
100
Баллы
43

slavon

Client
Регистрация
24.06.2016
Сообщения
599
Благодарностей
129
Баллы
43
и быстрее вводит? )
lock(SyncObjects.InputSyncer) // блокировка
{
var descr = project.Variables["text"].Value;
if (String.IsNullOrEmpty(descr)) {
throw new Exception("Пустой текст для вставки");
}

// сохраняем предыдущее состояние буфера
String previous_text = null;
previous_text = System.Windows.Forms.Clipboard.GetText();

// сохраняем нужный текст в буфер и вставляем его (программно делаем CTRL+V)
System.Windows.Forms.Clipboard.SetText(descr);
instance.ActiveTab.KeyEvent("v","press","ctrl");

// стираем буфер и возвращаем его к первоначальному состоянию
System.Windows.Forms.Clipboard.Clear();
if (!String.IsNullOrEmpty(previous_text)) {
System.Windows.Forms.Clipboard.SetText(previous_text);
}
}


Самый быстрый ввод )
 

Wide

Client
Регистрация
04.02.2013
Сообщения
945
Благодарностей
257
Баллы
63
lock(SyncObjects.InputSyncer) // блокировка
{
var descr = project.Variables["text"].Value;
if (String.IsNullOrEmpty(descr)) {
throw new Exception("Пустой текст для вставки");
}

// сохраняем предыдущее состояние буфера
String previous_text = null;
previous_text = System.Windows.Forms.Clipboard.GetText();

// сохраняем нужный текст в буфер и вставляем его (программно делаем CTRL+V)
System.Windows.Forms.Clipboard.SetText(descr);
instance.ActiveTab.KeyEvent("v","press","ctrl");

// стираем буфер и возвращаем его к первоначальному состоянию
System.Windows.Forms.Clipboard.Clear();
if (!String.IsNullOrEmpty(previous_text)) {
System.Windows.Forms.Clipboard.SetText(previous_text);
}
}


Самый быстрый ввод )
Дико жуткая х*йня на многопотоке, даже и не думайте юзать...
 
  • Спасибо
Реакции: izubr и djaga

slavon

Client
Регистрация
24.06.2016
Сообщения
599
Благодарностей
129
Баллы
43

Wide

Client
Регистрация
04.02.2013
Сообщения
945
Благодарностей
257
Баллы
63
Только на отдельном серваке можно,на компе если в многопотоке это пипец )
Нет, на серваке юзал, разницы нет. На разных потоках тестил, в итоге понял что нужно от буфера отказаться.
 

slavon

Client
Регистрация
24.06.2016
Сообщения
599
Благодарностей
129
Баллы
43
Нет, на серваке юзал, разницы нет. На разных потоках тестил, в итоге понял что нужно от буфера отказаться.
Ну хз,у меня работало нормально.Правда убрал патом,на компе мешает пипец.
 

Ilshakin

Client
Регистрация
14.02.2017
Сообщения
639
Благодарностей
581
Баллы
93

Sho

Активный пользователь
Регистрация
08.08.2022
Сообщения
100
Благодарностей
51
Баллы
28
это нужно у ТС'а спрашивать, я подобными вещами не пользуюсь ....
Очень круто!
А как раскладку поменять? А то у меня твой пример только русские буквы напишет.
 

Grindaize

Новичок
Регистрация
17.03.2023
Сообщения
14
Благодарностей
4
Баллы
3
заводишь словарик с обозначением клавиш, по типу ↓ и погнал )

C#:
string text = "Hello World in 2022".ToLower();

Dictionary<char, System.Windows.Forms.Keys> wordKey = new Dictionary<char, System.Windows.Forms.Keys>
{
    {'0', System.Windows.Forms.Keys.D0},
    {'2', System.Windows.Forms.Keys.D2},
    {'e', System.Windows.Forms.Keys.E},
    {'d', System.Windows.Forms.Keys.D},
    {'h', System.Windows.Forms.Keys.H},
    {'i', System.Windows.Forms.Keys.I},
    {'l', System.Windows.Forms.Keys.L},
    {'o', System.Windows.Forms.Keys.O},
    {'n', System.Windows.Forms.Keys.N},
    {'r', System.Windows.Forms.Keys.R},
    {'w', System.Windows.Forms.Keys.W},
    {' ', System.Windows.Forms.Keys.Space}
};

foreach (var s in text)
    Emulator.SendKey(instance.ActiveTab.Handle, wordKey[s], KeyboardEvent.Down);
Подскажите пожалуйста, как найти точку, двоеточие и слэш?
 

Grindaize

Новичок
Регистрация
17.03.2023
Сообщения
14
Благодарностей
4
Баллы
3

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)