Импорт текста C # из внешнего окна - PullRequest
0 голосов
/ 20 июля 2010

Я работаю над существующим проектом, в котором есть инструмент для импорта текста, написанный на C #. По сути, он перемещается к последнему окну, в котором был фокус, копирует текст, переключается назад и вставляет текст в текстовое поле. Для этого он по существу выдает команды клавиатуры так: Alt + Tab , Ctrl + A , Ctrl + C , Alt + Tab , а затем, наконец, получить текст из буфера обмена и добавить его в текстовое поле.

В настоящее время он отлично работает на XP. Тем не менее, он не работает на Vista / Win 7. Он переключится на новое окно, и это выглядит так, но когда я возвращаюсь к C #, он добавил все, что было ранее в буфере обмена (не успешно копируя новое текст). Я предполагаю, что есть какая-то проблема сказать другому окну использовать клавиши клавиатуры (Выбрать все и Копировать).

Я провел умеренный поиск в Интернете и ничего не нашел, поэтому я надеялся выяснить, не было ли у кого-нибудь подобной проблемы.

1 Ответ

1 голос
/ 20 июля 2010

Предполагая, что вы используете SendKeys, вы можете посмотреть этот комментарий на странице MSDN SendKeys. Если это что-то введенное в Vista, это почти наверняка повлияет и на Windows 7, я думаю:

Примечание

Класс SendKeys обновлен для .NET Framework 3.0 для включения его использование в приложениях, работающих на Виндоус виста. Усиленная безопасность Windows Vista (известный как пользователь Контроль учетных записей или UAC) предотвращает предыдущая реализация от работы как и ожидалось.

Класс SendKeys подвержен проблемы времени, которые некоторые разработчики пришлось обойти. Обновленный реализация по-прежнему подвержена проблемы со временем, но немного быстрее и может потребовать внесения изменений в обходные пути. Класс SendKeys пытается использовать предыдущую реализацию во-первых, и если это не удается, использует новый реализация. В результате Класс SendKeys может вести себя по-разному на разных операционных системах. Кроме того, когда класс SendKeys использует новую реализацию, Метод SendWait не будет ждать сообщения для обработки, когда они отправлено другому процессу.

Если ваше приложение использует последовательное поведение независимо от операционная система, вы можете заставить Класс SendKeys для использования нового реализация путем добавления следующего настройка приложения для вашего app.config файл.

Чтобы заставить класс SendKeys использовать предыдущая реализация, используйте значение Вместо "JournalHook".

http://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.aspx

...