Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.084 c
4-1144918903
Sour Smile
2006-04-13 13:01
2006.08.13
Как узнать размеры разделов винчестеров?


5-1137273817
TStas
2006-01-15 00:23
2006.08.13
Непонятная ошибка в редакторе компонента


15-1152854597
tButton
2006-07-14 09:23
2006.08.13
первый


15-1152821248
Жаждущий помощи
2006-07-14 00:07
2006.08.13
Извините за наглость, но помогите с одной програмкой


15-1153300296
DillerXX
2006-07-19 13:11
2006.08.13
Помогите с информатикой





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский