![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как скопировать из любого приложения выделенный текст в буфер? [D6, WinXP]
leonidus © (2006-06-17 19:11:00)Проблема простая и много раз обсуждалась но у меня есть нюанс. Моя программа по нажатию горячей клавиши (установлен глобальны хук на клаву) при чем клавиша нажимается и держится, должна записать в буфер обмена выделенный в любом приложении текст (подразумеваем что окно в котором текст выделен имеет фокус ввода). Я делаю так:
keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,0),0,0);
keybd_event(Ord('C'),0,0,0);
keybd_event(Ord('C'),0,KEYEVENTF_KEYUP,0);
keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,0),KEYEVENTF_KEYUP,0);
и все прекрасно работает если "горячая клавиша" это Ctrl, но если "горячая клавиша" скажем Shift то код не срабатывает. И на самом деле если скажем руками нажать Shift и одновременно Ctrl+C то ничего в буфер обмена не скопируется, поэтому и код не работает. Но как же мне быть ведь условие "нажатия и не отпускания" горячей клавиши у меня обязательно?
leonidus (2006-06-29 10:18:00) [1]люди help!
leonidus (2006-06-24 21:46:00) [2]В том то и дело что если посылать WM_COPY то это сработает только для Edit-контролов, а мне нужно из любых контролов копировать в буфер...
Leonid Troyanovsky (2006-06-24 17:47:00) [3]
> leonidus © (24.06.06 13:09) [13]
> и еще не понятно, если по сути своей PostMessage и SendMessage
> выполняют одинаковые функции, то зачем их вызывать вместе?
При нажатии кнопок в очередь асинхронных сообщений попадают
(Post(Thread)Message) WM_KEYDOWN, WM_KEYUP.
Кроме того, при TranslateMessage некоторые WM_KEYDOWN генерируют
послание (PostMessage) WM_CHAR.
Ну, а такие сообщения как WM_COPY посылаются SendMessage,
т.е., синхронно.
В твоем случае, видимо, достаточно лишь последнего.
--
Regards, LVT.
leonidus (2006-06-24 13:09:00) [4]и еще не понятно, если по сути своей PostMessage и SendMessage выполняют одинаковые функции, то зачем их вызывать вместе?
leonidus (2006-06-24 13:07:00) [5]а с какими параметрами передается PostMessage и SendMessage?
HF-Trade (2006-06-24 12:14:00) [6]PostMessage
SendMessage
leonidus (2006-06-24 11:55:00) [7]У меня тут возникла мысль, а какое сообщение Windows посылает окну при обработке команды keybd_event? Может просто обойти эту самую keybd_event и напрямую послать нужное сообщение интересующему меня окну?
Германн (2006-06-20 02:08:00) [8]Имхо, в сабже явно проглядывает неверное понимание термина HotKey ("горячая клавиша")! :-(
И непонимание того, что в качестве "горячей клавиши" может выступать либо "функциональные клавиши" - F1..F12 (плюс с Shift-ом), либо какое-то сочетаниеиных клавиш, которое не имеет заранее заданного значения.
TStas (2006-06-19 20:46:00) [9]Вот проблему на ровном месте выдумали. Когда мне надо было транслит к аське написать, я именно ctrl+C Ctrl+Enter аське отсылал. Все работало замечательно. Иногда, правда, аське не все обрабатывала, так она в принципе скоростью не отличаеттся
Leonid Troyanovsky (2006-06-19 18:49:00) [10]
> leonidus © (19.06.06 10:16) [6]
> Юзер должен нажать и держать горяцую клавишу а программа
> скопировать текст в буфер.
Остается лишь SendMessage WM_COPY.
Т.е., оно должно сработать для обычных EDIT(вкл. редактор COMBOBOX), RichEdit и даже Word (хотя, для последнего, возможно, что через
SendMessageW, не помню).
Ну, а для нестандартных edit'ов (которые могут быть чем угодно)
все это может быть напрасным.
--
Regards, LVT.
leonidus (2006-06-19 10:16:00) [11]Нет так не получится, не спрашивайте почему, просто не получится. Юзер должен нажать и держать горяцую клавишу а программа скопировать текст в буфер.
Юрий Зотов (2006-06-18 13:49:00) [12]> leonidus © (18.06.06 13:44) [4]
А сразу нажать Ctrl+C, вместо какой-то другой горячей клавиши - разве юзер этого не может? Ему это даже и привычнее как-то.
leonidus (2006-06-18 13:44:00) [13]Ну это понятно, но если горячая клавиша у пользователя Shift то пока он ее держит то эмитация нажатия Ctrl+C через keybd_event не приводит к успеху, вот я и спрашиваю что делать. А про горячую клавишу - это именно так нужно, т.е. юзер выделил текст и держит горячую клавишу а программа берет и копирует тест в буфер. Как это реализовать?
Leonid Troyanovsky (2006-06-18 12:01:00) [14]
> leonidus © (18.06.06 11:36) [2]
> Леонид, а что такое ^C ?
Ctrl+C
--
Regards, LVT.
leonidus (2006-06-18 11:36:00) [15]Леонид, а что такое ^C ?
Leonid Troyanovsky (2006-06-18 10:48:00) [16]
> leonidus © (17.06.06 19:11)
> нюанс. Моя программа по нажатию горячей клавиши (установлен
> глобальны хук на клаву) при чем клавиша нажимается и держится,
> должна записать в буфер обмена выделенный в любом приложении
Не очень понятно, зачем программа, горячая клавиша и т.д.
если нажатие ^C и так копирует выделенное в буфер.
--
Regards, LVT.