Форум: "Основная";
Текущий архив: 2006.08.13;
Скачать: [xml.tar.bz2];
ВнизКак скопировать из любого приложения выделенный текст в буфер? Найти похожие ветки
← →
leonidus © (2006-06-17 19:11) [0]Проблема простая и много раз обсуждалась но у меня есть нюанс. Моя программа по нажатию горячей клавиши (установлен глобальны хук на клаву) при чем клавиша нажимается и держится, должна записать в буфер обмена выделенный в любом приложении текст (подразумеваем что окно в котором текст выделен имеет фокус ввода). Я делаю так:
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 то ничего в буфер обмена не скопируется, поэтому и код не работает. Но как же мне быть ведь условие "нажатия и не отпускания" горячей клавиши у меня обязательно?
← →
Leonid Troyanovsky © (2006-06-18 10:48) [1]
> leonidus © (17.06.06 19:11)
> нюанс. Моя программа по нажатию горячей клавиши (установлен
> глобальны хук на клаву) при чем клавиша нажимается и держится,
> должна записать в буфер обмена выделенный в любом приложении
Не очень понятно, зачем программа, горячая клавиша и т.д.
если нажатие ^C и так копирует выделенное в буфер.
--
Regards, LVT.
← →
leonidus © (2006-06-18 11:36) [2]Леонид, а что такое ^C ?
← →
Leonid Troyanovsky © (2006-06-18 12:01) [3]
> leonidus © (18.06.06 11:36) [2]
> Леонид, а что такое ^C ?
Ctrl+C
--
Regards, LVT.
← →
leonidus © (2006-06-18 13:44) [4]Ну это понятно, но если горячая клавиша у пользователя Shift то пока он ее держит то эмитация нажатия Ctrl+C через keybd_event не приводит к успеху, вот я и спрашиваю что делать. А про горячую клавишу - это именно так нужно, т.е. юзер выделил текст и держит горячую клавишу а программа берет и копирует тест в буфер. Как это реализовать?
← →
Юрий Зотов © (2006-06-18 13:49) [5]> leonidus © (18.06.06 13:44) [4]
А сразу нажать Ctrl+C, вместо какой-то другой горячей клавиши - разве юзер этого не может? Ему это даже и привычнее как-то.
← →
leonidus © (2006-06-19 10:16) [6]Нет так не получится, не спрашивайте почему, просто не получится. Юзер должен нажать и держать горяцую клавишу а программа скопировать текст в буфер.
← →
Leonid Troyanovsky © (2006-06-19 18:49) [7]
> leonidus © (19.06.06 10:16) [6]
> Юзер должен нажать и держать горяцую клавишу а программа
> скопировать текст в буфер.
Остается лишь SendMessage WM_COPY.
Т.е., оно должно сработать для обычных EDIT(вкл. редактор COMBOBOX), RichEdit и даже Word (хотя, для последнего, возможно, что через
SendMessageW, не помню).
Ну, а для нестандартных edit"ов (которые могут быть чем угодно)
все это может быть напрасным.
--
Regards, LVT.
← →
TStas © (2006-06-19 20:46) [8]Вот проблему на ровном месте выдумали. Когда мне надо было транслит к аське написать, я именно ctrl+C Ctrl+Enter аське отсылал. Все работало замечательно. Иногда, правда, аське не все обрабатывала, так она в принципе скоростью не отличаеттся
← →
Германн © (2006-06-20 02:08) [9]Имхо, в сабже явно проглядывает неверное понимание термина HotKey ("горячая клавиша")! :-(
И непонимание того, что в качестве "горячей клавиши" может выступать либо "функциональные клавиши" - F1..F12 (плюс с Shift-ом), либо какое-то сочетание иных клавиш, которое не имеет заранее заданного значения.
← →
leonidus © (2006-06-24 11:55) [10]У меня тут возникла мысль, а какое сообщение Windows посылает окну при обработке команды keybd_event? Может просто обойти эту самую keybd_event и напрямую послать нужное сообщение интересующему меня окну?
← →
HF-Trade © (2006-06-24 12:14) [11]PostMessage
SendMessage
← →
leonidus © (2006-06-24 13:07) [12]а с какими параметрами передается PostMessage и SendMessage?
← →
leonidus © (2006-06-24 13:09) [13]и еще не понятно, если по сути своей PostMessage и SendMessage выполняют одинаковые функции, то зачем их вызывать вместе?
← →
Leonid Troyanovsky © (2006-06-24 17:47) [14]
> 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 21:46) [15]В том то и дело что если посылать WM_COPY то это сработает только для Edit-контролов, а мне нужно из любых контролов копировать в буфер...
← →
leonidus © (2006-06-29 10:18) [16]люди help!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.08.13;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.039 c