Эта статья поможет сэкономить время тем, кто сталкивается с подобными ситуациями — когда нужно перенести некоторые количества текста в такие места, куда он простым буфером обмена не переносится, например — в 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
Хеш-суммы в два клика
Если кому-то нужна версия для ОС Linux - пишите в комментарии, сделаю!
ссылка на оригинал статьи https://habr.com/ru/articles/824452/
Добавить комментарий