COPY
От: iSparrow  
Дата: 26.11.09 11:16
Оценка:
Доброго времени суток.
Пишу приложение, которое по глобальному хоткею заносит выделенный текст в буфер обмена в любом окне и обрабатывает его.
Не могу решить задачу копирования в буфер обмена. Эмуляция Ctrl+c не получилась. Пробовал Sendmessage(HWND_BROADCAST, WM_COMMAND, APPCOMMAND_COPY, 0) и (HWND_BROADCAST, WM_COPY, 0, 0), пробовал вместо HWND_BROADCAST писать getForegroundWindow(). Не получается. Прошу совета.
copy
Re: COPY
От: игппук Беларусь  
Дата: 26.11.09 13:24
Оценка:
насколько я помню, то HWND_BROADCAST используется в для передачи сообщения между процессами и вкупе с ним используется WM_COPYDATA и передается структура с данными, которые нужно передать. если вы хотите послать команду copy окну, то вам нужно знает его точный дескриптор (HWND) и далеко не факт, что оно вам ответит взаимностью. все будет зависеть от того, как это окно имплементировано и как оно отвечает на это сообщение.
проклятый антисутенерский закон
Re: COPY
От: Carc Россия http://www.amlpages.com/home.php
Дата: 26.11.09 17:50
Оценка:
Здравствуйте, iSparrow, Вы писали:

S>Доброго времени суток.

S>Пишу приложение, которое по глобальному хоткею заносит выделенный текст в буфер обмена в любом окне и обрабатывает его.
S>Не могу решить задачу копирования в буфер обмена. Эмуляция Ctrl+c не получилась. Пробовал Sendmessage(HWND_BROADCAST, WM_COMMAND, APPCOMMAND_COPY, 0) и (HWND_BROADCAST, WM_COPY, 0, 0), пробовал вместо HWND_BROADCAST писать getForegroundWindow(). Не получается. Прошу совета.

см. на keybd_event, SendInput и иже с ними,

Да и потом "шо то я сумневаюся" насчет WM_APPCOMMAND — что таким способом можно "уломать" окно что-то сделать.
В MSDN написано что это сообщение нотифицирует окно о тех или иных действиях, но это не одно и то же что "попросить" выполнить это действие. Скажем так, по аналогии вообще с WM_NOTIFY в Windows: можно поймать конкретную нотификацию от какого-то конкретного контрола, окна и.т.д., и прореагировать как-то на конкретную нотификацию, но от самого факта отсылки такой же нотификации ручками само по себе действие не выполнится. Простой пример: какое-нить выделение в том же самом SysListView — нотификация это извещение о том, что произошло нечто в дочернем окне, и только, а само выделение надо менять иначе. Хотя может быть в случае WM_APPCOMMAND я и ошибаюсь, но я так дума-а-аю (C)
Aml Pages Home
Re: COPY
От: campri  
Дата: 01.12.09 12:16
Оценка:
Здравствуйте, iSparrow, Вы писали:

S>Доброго времени суток.

S>Пишу приложение, которое по глобальному хоткею заносит выделенный текст в буфер обмена в любом окне и обрабатывает его.
S>Не могу решить задачу копирования в буфер обмена. Эмуляция Ctrl+c не получилась. Пробовал Sendmessage(HWND_BROADCAST, WM_COMMAND, APPCOMMAND_COPY, 0) и (HWND_BROADCAST, WM_COPY, 0, 0), пробовал вместо HWND_BROADCAST писать getForegroundWindow(). Не получается. Прошу совета.

Есть идея, как это сделать по-другому (без глобального хука и пр.):

Вот тут
Автор(ы):
Дата: 07.07.2004
В этой статье приводятся примеры решения следующих задач:
— Реализация команд Вырезать (Cut), Копировать (Copy), и Вставить (Paste)
— Создание окна просмотра буфера обмена (Clipboard Viewer)
— Добавление этого окна в цепочку просмотра буфера обмена
— основа/пример; обработка текста в этом месте:
case WM_DRAWCLIPBOARD:  // содержимое буфера обмена изменилось


В данном способе хоткеем и является Ctrl+C (в нужном окне). Я переделал пример для своих нужд, и все работает на ура!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.