![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Копирование в буфер выделенного текста
leonidus © (2008-10-13 01:42:00)Господа подскажите пожалуйста, задача в следующем, моя программа постоянно находится в памяти и устанавливает хук на клавиатуру, при нажатии на горячую клавишу она должна скопировать выделенный текст в буфер обмена. Все работает хорошо если горячая клавиша это Ctrl, но мне нужно чтобы в качестве горячей клавиши могла бы выступать любая клавиша клавиатуры. Процедура копирования текста выглядит следующим образом:
procedure CopySelectionFromActiveWindow;
var
Wnd: THandle;
begin
Wnd := GetFocusedControl;
if Wnd <> 0 then
begin
ClearShiftState;
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event(Ord('C'), 0, 0, 0);
keybd_event(Ord('C'), 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
end;
end;
как видно это эмуляция нажатия Ctrl+C+C именно по этому видимо и не удается задействовать другую горячую клавишу т.к. она мешает эмуляции этой комбинации, а отправлять событие WMСopy конечно более элегантно но не со всеми окнами работает.
И еще момент, нажатие на горячую клавишу в данном случае подразумевает нажатие и удержание, а не однократное нажатие т.е. хук срабатывает, посылает программе информацию о том что клавиша нажата, программа копирует выделенное но хук продолжает отрабатывать т.к. пока приходят сообщения о том что клавиша нажата программа выполняет еще рад функций.
Как бороться с этой проблемой?
blackman (2008-10-16 20:02:00) [1]Симулировать нажатие клавиш для копии и вставки из буфера
http://articles.org.ru/cfaq/index.php?qid=198&catid=50
Германн (2008-10-14 01:54:00) [2]
> Наиль © (14.10.08 01:47) [12]
>
> Помоему в твоей программе не хватает KeyDown
>
В его программе много чего не хватает.Из [0] и [7] это видно.
Наиль (2008-10-14 01:47:00) [3]Помоему в твоей программе не хватает KeyDown
Германн (2008-10-14 01:08:00) [4]
> Eraser © (13.10.08 22:55) [10]
Он уже старался пояснить, но не любят нынче пояснять задачу, увы. Пытаются пояснить сам вопрос. Но не умеют их (вопросы) пояснять кроме как "на пальцах".
Eraser (2008-10-13 22:55:00) [5]> [7] leonidus (13.10.08 16:36)
отвечу вопросом на вопрос.
нафига?
поясни - может найдем решение получше.
leonidus (2008-10-13 22:30:00) [6]Анатолий, вам больше нечего сказать?
Anatoly Podgoretsky (2008-10-13 17:07:00) [7]> leonidus (13.10.2008 16:36:07) [7]
Не надо.
leonidus (2008-10-13 16:36:00) [8]Давайте я перефразирую проблему. Как съэмулировать нажатие Ctrl+C или Ctrl+Ins при уже нажатой любой другой клавише на клавиатуре?
leonidus (2008-10-13 16:16:00) [9]Anatoly Podgoretsky а вы с кем разговариваете?
Anatoly Podgoretsky (2008-10-13 13:42:00) [10]Писать ничео не надо, я тебе просто скажу эти волшебные горячие клавиши - Ctrl+C/Ctrl+V
Anatoly Podgoretsky (2008-10-13 13:40:00) [11]Ты чего это в Общую пишешь?
leonidus (2008-10-13 10:11:00) [12]Господа, давайте по все таки по теме, хук будет обязательно и именно такой такой какой он есть, ничего вредоносного программа из себя не представляет.
Eraser (2008-10-13 02:50:00) [13]> [0] leonidus (13.10.08 01:42)
1. см. WM_CLIPBOARDUPDATE.
2. см. RegisterHotKey.
3. хуки фтопку, тем более такие.
Германн (2008-10-13 01:51:00) [14]Очень смахивает на клавиатурного шпиона написанного троешником.
Примите и прочь!
P.S. Может я и не прав. Но...