Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.13;
Скачать: CL | DM;

Вниз

Как скопировать из любого приложения выделенный текст в буфер?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.043 c
3-1149738973
Soi
2006-06-08 07:56
2006.08.13
Экспорт данных из одной таблицы в другую


2-1153915713
WhiteCat
2006-07-26 16:08
2006.08.13
Не вносить запись в таблицу


11-1131084045
Vladimir Kladov
2005-11-04 09:00
2006.08.13
Версия 2.20


15-1153145303
Pazitron_Brain
2006-07-17 18:08
2006.08.13
Подскажите, пожалуйста, конвертер


15-1152874737
NaLom
2006-07-14 14:58
2006.08.13
Блок инета