Доброго времени суток.
Пишу приложение, которое по глобальному хоткею заносит выделенный текст в буфер обмена в любом окне и обрабатывает его.
Не могу решить задачу копирования в буфер обмена. Эмуляция Ctrl+c не получилась. Пробовал Sendmessage(HWND_BROADCAST, WM_COMMAND, APPCOMMAND_COPY, 0) и (HWND_BROADCAST, WM_COPY, 0, 0), пробовал вместо HWND_BROADCAST писать getForegroundWindow(). Не получается. Прошу совета.
насколько я помню, то HWND_BROADCAST используется в для передачи сообщения между процессами и вкупе с ним используется WM_COPYDATA и передается структура с данными, которые нужно передать. если вы хотите послать команду copy окну, то вам нужно знает его точный дескриптор (HWND) и далеко не факт, что оно вам ответит взаимностью. все будет зависеть от того, как это окно имплементировано и как оно отвечает на это сообщение.
Здравствуйте, 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)
Здравствуйте, iSparrow, Вы писали:
S>Доброго времени суток. S>Пишу приложение, которое по глобальному хоткею заносит выделенный текст в буфер обмена в любом окне и обрабатывает его. S>Не могу решить задачу копирования в буфер обмена. Эмуляция Ctrl+c не получилась. Пробовал Sendmessage(HWND_BROADCAST, WM_COMMAND, APPCOMMAND_COPY, 0) и (HWND_BROADCAST, WM_COPY, 0, 0), пробовал вместо HWND_BROADCAST писать getForegroundWindow(). Не получается. Прошу совета.
Есть идея, как это сделать по-другому (без глобального хука и пр.):