Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Копирование в буфер выделенного текста


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. Может я и не прав. Но...


Наверх

Титульная страница Поиск, карта сайта Написать письмо