Как скопировать и вставить текст из любого приложения Windows (второй буфер обмена) - PullRequest
2 голосов
/ 23 августа 2011

У меня есть приложение Windows для рабочего стола в c # (WPF), которое в основном является приложением для управления проблемами в колл-центре.Он управляет (добавляет, редактирует, удаляет, ...) проблемами клиентов (записи в базе данных), где каждая проблема имеет многочисленные поля (текстовые поля, текстовые области, флажки, ...). При создании проблемы пользователь часто копирует / вставляетданные из других ресурсов для этого и других приложений (Excel, блокнот, браузер ...), а также буфер обмена Windows, полный ценных данных.

Проблема, которую я не знаю, как решить: пользовательвыбирает произвольный текст в любом текстовом поле (например, в текстовом поле) в этой программе и копирует данные.но эти данные нельзя скопировать в классический буфер обмена Windows

Clipboard.SetText(Textbox1.Text);

, потому что в буфере обмена уже есть ценные данные, которые нельзя потерять.Поэтому я хотел бы создать второй буфер обмена, который прослушивает все вводимые с клавиатуры данные.И всякий раз, когда нажимается определенная комбинация клавиш, он считывает выделенный текст (необходим только текст) из любого приложения (блокнот, Excel, моя программа, ...).Точно так же с другой комбинацией клавиш он вставляет скопированный текст в любое приложение (блокнот, Excel, ..)

В Windows уже есть эта функциональность с сочетаниями клавиш CTRL + C и CTRL + V, которые работают в любом приложении, котороене отменяет эти ярлыки.Я хотел бы то же самое для моего пользовательского приложения / службы буфера обмена, с различными ярлыками.Но я не знаю, как получить и вставить данные в любое текстовое поле в любом приложении Windows.Короче говоря, мне нужно что-то вроде:

string clipboardData;

public void OnSpecialCopyShortcutPressed() {
  clipboardData = SelectedTextAnywhereInWindowsOrAnyWindowsApp.Text;
}

public void OnSpecialPasteShortcutPressed() {
  focusedTextFieldAnywhereInWindowsOrAnyWindowsApp.Text = clipboardData;
}

По сути, я хотел бы иметь два буфера обмена Windows.

Любые указатели были бы хорошими.Спасибо.

--- edit ---

нашел решение для подключения к нажатым клавишам глобальная клавиатура хук Все еще ищем способ "перехватить"вверх "к активным приложениям и выбранному тексту для копирования и выделенным элементам управления для вставки скопированного текста.

Ответы [ 3 ]

0 голосов
/ 23 августа 2011

Что бы я сделал в такой ситуации:

  1. Создайте службу с именем 'MyClipBoard' или чем-то еще.
  2. Создание глобальных клавиатурных хуков для поиска любых комбинаций клавиш, которые вы пытаетесь найти. то есть альтернативы Ctrl + C и Ctrl + V
  3. Всякий раз, когда вы сталкиваетесь с комбинацией клавиш, предназначенной для копирования, ищите активное окно и затем выбирайте из этого окна.
  4. Скопируйте выделенную область в область памяти вашего «MyClipBoard».
  5. Когда вы сталкиваетесь с комбинацией вставки клавиатуры, вставьте данные из буфера обмена в фокусированное окно активного окна.

Все это требует хорошего знания клавиатурных хуков и Windows API. И это может быть не идеальным решением.

Самый важный вопрос: почему вы хотите это сделать? Похоже, это не правильный способ решения проблемы.

0 голосов
/ 28 августа 2011

Вы не можете иметь два буфера обмена Windows.Вы можете соединить что-то, что будет действовать как буфер обмена в определенных ситуациях, но это не будет работать для каждого приложения (или большинства приложений).Лучшее, на что вы можете надеяться, - это захватывать текст с помощью горячих клавиш в приложении, которым вы управляете, и использовать sendkeys для ввода данных в другие совместные приложения.Забудьте о необычных форматах, таких как HTML, RTF, Bitmap.
Я написал оригинальный расширитель буфера обмена Windows (ClipMate) в 1991 году, поэтому я видел всевозможные идеи по улучшению буфера обмена.Это один из худших.Я включаю этот комментарий не для того, чтобы подшутить над вами или вашим клиентом, но в надежде, что вы сможете использовать его, чтобы убедить своего клиента не тратить много времени и денег на это чудо.

0 голосов
/ 23 августа 2011

Существует несколько вариантов обмена данными между приложениями: IPC
Файл с отображенной памятью
Файл в файловой системе
Использование сети через localhost.

Вы изучали эти варианты?

Возможно, прочитайте эту статью ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...