C # - Перезаписать Ctrl + C контроль - PullRequest
0 голосов
/ 11 октября 2009

Я подумываю создать простое приложение для хранения того, что я скопировал, используя Ctrl + C. Теперь у меня есть интересный код Google: (я скорее опубликую ссылку на него как на огромном)

http://www.prilepi.com/221 (по http://www.liensberger.it/web/blog/?p=207)

http://www.prilepi.com/222

Теперь все работает нормально, единственная проблема в том, что он полностью перезаписывает все. Это означает, что когда я выделяю текст и нажимаю Ctrl + C, я не могу получить выделенный текст.

Мне известен класс Clipboard, но в нем ничего не хранится ...

Ответы [ 3 ]

0 голосов
/ 11 октября 2009

Чтобы добавить что-то в буфер обмена, вы можете использовать:

Clipboard.SetText(Text, TextDataFormat.Text);

Существует несколько других форматных опций, кроме простого текста

0 голосов
/ 24 января 2010

Есть еще один способ сделать это, хотя он немного слабоват. Предположим, у вас есть текстовое поле, ожидающее ввода, вы можете назначить пустое контекстное меню, создав новое контекстное меню, в котором ничего нет, затем назначьте его. в текстовое поле. Таким образом, пользователь не может щелкнуть правой кнопкой мыши, чтобы вызвать контекстное меню по умолчанию для копирования / вставки.

Редактировать: Поскольку ОП опубликовал вопрос, который не совсем ясен, « C # Перезаписать код Ctrl + C », я думал, он имел в виду, чтобы предотвратить использование Ctrl + C, чтобы скопировать в буфер обмена. Извините, если мой ответ неверен. Не могли бы вы уточнить ваш вопрос немного больше, поскольку это звучит вводящим в заблуждение.

Редактирование # 2: После комментариев ОП я могу дать подсказку о том, чего он пытается достичь, для начала зайдите в CodeProject и прочитайте эту статью и подключите в буфер обмена зацепить на глобальном уровне и работа сделана! Не нужно вставлять глобальный хук клавиатуры! Подключите событие ClipboardChanged и ClipboardStateChanged.

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

0 голосов
/ 11 октября 2009

Горячая клавиша полностью скрывает сообщение от других окон, как вы сказали. Что вам нужно сделать, это найти окно с фокусом и затем прочитать выделенный текст (а затем, возможно, добавить его в буфер обмена вручную?)

Этот фрагмент должен найти сфокусированное окно. Это на C ++, но вы можете легко перевести его на C #.

HWND GetGlobalFocus()
{
   GUITHREADINGO info;
   info.cbSize = sizeof(info);

   if (!GetGUIThreadInfo(0, &info))
      return NULL;

   return info.hwndFocus;
}

Как только вы это поймете, вот тут-то и будет сложно. Вы можете сделать PostMessage(hWnd, WM_COPY, 0, 0);, но он не будет работать, если элемент управления не поддерживает это (любой элемент управления с подсвеченным синтаксисом, скорее всего, нестандартен и может не отвечать на это).

Вы можете вручную отправить сообщение WM_GETTEXT, чтобы получить текст, а затем вручную добавить его в буфер обмена, но, опять же, это, скорее всего, приведет к сбою, если элемент управления сильно нестандартен, не говоря уже о том, что он не сохранит приложения возможны несколько форматов буфера обмена (думаю, Word).

Другой вариант - когда вы получаете горячую клавишу, отключаете свою ловушку, снова отправляете комбинацию клавиш с помощью keybd_event, а затем снова включаете свою ловушку, и у вас будут данные в буфере обмена. Это кажется неуклюжим, но это может работать в зависимости от того, блокирует keybd_event или нет, я не помню.

Надеюсь, это поможет!

...