Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
2 / 2 / 0
Регистрация: 19.08.2012
Сообщений: 9

Из потока вывести текст в фокус ввода активного приложения-получателя

19.08.2012, 03:32. Показов 2201. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Использую InputSimulator v2 для эмуляции ввода текста, метод WindowsInput.KeyboardSimulator.TextEntry (string text)

Задача простая: из потока вывести в фокус ввода активного приложения-получателя текст.
Собственно, проблема в следующем: Если приложение по каким-то причинам не успевает обрабатывать события клавиатуры, которые туда уходят через из TextEntry (посредством SendInput, посимвольно), то буфер этих событий переполняется и старый текст затирается вновь пришедшим из метода.

Метод использую для ввода текста в сложное графическое DirectInput приложение.

Придумал рабочий костыль:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
KeyboardSimulator cc = new KeyboardSimulator();
int i = 0;
string s = "";
foreach (Char c in Text) //string Text - содержит весь текст, который надо передать
{
   s += c;
   i++;
   if (i == 10)  //Разбиваем строку на подстроки по 10 символов и выводим порциями, ибо приложение-получатель текста не успевает обработать весь длинный текст сразу
   {
      cc.TextEntry(s);
      Thread.Sleep(5); // Чем медленнее комп, тем больше здесь надо ждать
      i = 0;
      s = "";
   }
}
cc.TextEntry(s);
Проблема в том, что этот костыль не дает 100% гарантии, что передаваемый приложению текст будет доставлен в целости и сохранности. Переполнения могут возникнуть из-за любых тормозов в приложении-получателе, вызывающих задержку между обработкой событий клавиатуры.

Как наверняка узнать, есть ли место в буфере клавиатуры для отправки очередной порции текста получателю?

Есть идеи? Заранее благодарю!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.08.2012, 03:32
Ответы с готовыми решениями:

Вставить текст в фокус другого приложения?
Здравствуйте комрады! 1. При запуске приложения, оно должно находиться в режиме ожидания нажатия горячей клавиши. 2. Я нажимаю...

Операция ввода/вывода была прервана из-за завершения потока команд или по запросу приложения
Такая проблема. Прибор посылает каждые 4 сек данные. Считываю с порта по событию DataReceived. Закрываю порт по кнопке...

Получить отправителя сообщения, получателя и сам текст
Проблема такая: не получается получить получателя сообщения, выводит одно и тоже имя, как сделать, что бы выводило всё правильно? А вообще...

6
Заблокирован
19.08.2012, 07:25
Цитата Сообщение от aepot Посмотреть сообщение
Использую InputSimulator v2
Как это подключается?

Добавлено через 1 минуту
Нашла только на codeproject самописный класс с таким именем.
0
2 / 2 / 0
Регистрация: 19.08.2012
Сообщений: 9
19.08.2012, 15:25  [ТС]
Цитата Сообщение от Cyrus Посмотреть сообщение
Как это подключается?

Добавлено через 1 минуту
Нашла только на codeproject самописный класс с таким именем.
сайт симулятора: http://inputsimulator.codeplex.com/
В бинарниках старая версия, ибо последняя еще не стабилизирована.
Последняя версия взята отсюда: http://inputsimulator.codeplex... changesets
Ссылка на скачивание исходника проекта справа.

Собираем DLL WindowsInput.dll из готового исходника, вносим на нее ссылку в наш проект, затем
using WindowsInput;
0
2 / 2 / 0
Регистрация: 19.08.2012
Сообщений: 9
21.08.2012, 14:41  [ТС]
На медленных машинах проблема сохранилась, что бы я не делал. Если увеличить время ожидания между порциями передаваемого текста, то набор текста будет катастрофически медленным, что не устроит пользователей софтины на быстрых машинах.

Помогите, пожалуйста, решить проблему, или хотя-бы скажите, куда копать? Третий день безрезультатно бьюсь.
0
51 / 38 / 5
Регистрация: 14.01.2012
Сообщений: 127
22.08.2012, 16:28
Как наверняка узнать, есть ли место в буфере клавиатуры для отправки очередной порции текста получателю?
Посмотри в сторону C++: там можно работать с клавой через winapi и еще как-то, в отличие от .net. Допустим ты нашел как это делать в C++, сделал dll с одной функцией, возвращающей кол-во свободного места в буфере, подключил эту dll, и юзаешь её в своем .net приложении.
Буфер же имеется ввиду тот, за который ось отвечает?
0
2 / 2 / 0
Регистрация: 19.08.2012
Сообщений: 9
22.08.2012, 17:56  [ТС]
Я еще только учусь. C# позволяет подключать методы из системных dll, .NET здесь не мешает. Время поиска для меня решения на C++ одинаково, как и на C#. Кое-что откопал на просторах интернета в неймспейсе консоли. Буду сегодня пробовать. По результатам отпишусь.
0
2 / 2 / 0
Регистрация: 19.08.2012
Сообщений: 9
31.08.2012, 01:55  [ТС]
Имеется в виду буфер ввода с клавиатуры, в который уходят данные посредством SendInput()
До сих пор не могу даже близко подобраться к решению проблемы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.08.2012, 01:55
Помогаю со студенческими работами здесь

Получить url активного потока данных со страницы
Возможно ли реализовать это через vb.net? То есть, к примеру, открываем в том же самом webbrowser'е ссылку с радио, нажимаем в плеере на...

Из запущенного с помощью функции BeginThread потока нужно вывести текст в RichEdit
Из запущенного с помощью функции BeginThread потока нужно вывести текст в RichEdit, как это сделать так, чтобы не вылетала ошибка...

Вывести текст из поля для ввода
у меня задача, взять текст из поля для ввода и вывести его в конец страницы, вот код: <!DOCTYPR html> <html> ...

Вывести текст, введенный в поле ввода
господа делаю поле ввода затем по определённым действиям в VessageBox должен вывести текст введёный текст но выдаёт пустую строчку. HWND...

HTML!? Есть поле ввода Type text, после ввода текста и нажатия entrer теряется фокус, как его оставить в этом же поле?
HTML!? Есть поле ввода Type text, после ввода текста и нажатия entrer теряется фокус, как его оставить в этом же поле?


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru