Эта статья поможет сэкономить время тем, кто сталкивается с подобными ситуациями - когда нужно перенести некоторые количества текста в такие места, куда он простым буфером обмена не переносится, например - в remote console виртуального или физического сервера, как Proxmox или iBMC / iLO.
Аналогичное решение "ClickPaste" (с гитхаба) показалось мне чуть менее удобным - захотелось доработать идею и сделать ввод более функциональным и наглядным.
Особенности моей реализации:
• запуск из одиночного исполняемого файла (portable) или из легковесного архива;
• многострочный ввод (симулирует нажатие клавиши enter между строк);
• редактирование и превью в окне ввода;
• режим медленного ввода;
• русская локализация
При нажатии на кнопку "Type for me!", программа переключится на предыдущее активное окно и симулирует либо быстрый ввод, либо с задержками между символами при отмеченном чекбоксе "Slow mode". Закрытие окна программы немедленно прекращает её выполнение.
Исходный код (C#)
using System.Text.RegularExpressions;
namespace typewriter
{
public partial class typewriter : Form
{
public typewriter()
{
InitializeComponent();
}
// Обработчик события для закрытия формы
protected override void OnFormClosing(FormClosingEventArgs e)
{
base.OnFormClosing(e);
// Останавливаем выполнение программы при закрытии окна
Environment.Exit(0);
}
private void button1_Click(object sender, EventArgs e)
{
string inputText = textBox1.Text;
// Переключаемся на предыдущее активное окно (Alt + Tab)
SendKeys.SendWait("%{TAB}");
// Задержка на время переключения окна
Thread.Sleep(1500); // полторы секунды
// Обработка текста
foreach (char c in inputText)
{
if (c == '\n') // Если символ - перенос строки
{
// Ничего не делаем, чтобы заблокировать лишние переносы строки
}
else
{
if (checkBox1.Checked) // Медленный режим
{
// Экранируем проблемные знаки
string txt = Regex.Replace(c.ToString(), "[+^%~()]", "{$0}");
SendKeys.SendWait(txt);
Thread.Sleep(100); // 100 миллисекунд между символами, если чекбокс включен
}
else
{
string txt = Regex.Replace(c.ToString(), "[+^%~()]", "{$0}");
SendKeys.SendWait(txt);
}
}
}
if (checkBox2.Checked) // Заканчивать клавишей "ВВОД"
{
SendKeys.SendWait("{ENTER}");
}
}
private void checkBox3_CheckedChanged(object sender, EventArgs e)
{
this.TopMost = checkBox3.Checked; //Поверх всех окон
}
private void button2_Click(object sender, EventArgs e)
{
textBox1.Clear(); // Очистить
}
}
}
Ссылки на скачивание
Microsoft Windows
.exe file, 69MB
English
SHA256 hash:
72AB75E32708412906C83F5907DF911886D892E1684C6AFD50D5C0ACCC196760
Хеш-суммы в два клика
Русский
SHA256 hash:
CC9A0E05DEE1C65B2951AD687E5B5C515224FBDF57BD5805CC3FC64108188690
Хеш-суммы в два клика
7Zip archive, 115KB
English
SHA256 hash:
7530621FAE2A6340381E6DD22C4717027A313319C4A826F7772DB573F38E7ABB
Хеш-суммы в два клика
Русский
SHA256 hash:
B7835A7F341468D6A2AE494406B232BDDC365A597B2DACBC9B929ED161191B84
Хеш-суммы в два клика
edit 27.06:
Всем спасибо за обратную связь! Создал проект на GitVerse: https://gitverse.ru/aremys/typewriter
Версия для десктопа Linux (на базе KDE) - в процессе разработки. Процесс фоновый - не ждите слишком скоро.
UksusoFF
Нужна под Убунту)
Aremys Автор
Принято! Будет сделано - добавлю к статье через редактирование и отпишусь Вам в личку. По срокам разве что ничего не могу сказать - от свободного времени на работе зависит.