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

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

Клавиатурные комбинации в НЕАКТИВНОЕ окно...


Olorin ©   (2002-07-24 11:06:00) 

Поднимал я раз эту тему и так и не получил ответа, поиски в доках ничего не дали... может сейчас кто чего нарыл?
Нужно слать неактивному окну комбинации клавишь типа:
Ctrl+A
Ctrl+F1
Ctrl+Shift+A
Ctrl+Shift+F1
Ctrl+Alt+Shift+A
Ctrl+Alt+Shift+F1
Нарыл тут пример на ассемблере но там можно только ОДНУ неуправляющую клавишу слать... :-(
Любые идеи принимаются...


Proton   (2002-07-25 17:35:00) [1]

событие "когда" может происходить и в любой другой момент, например по завершению работы некоторого цикла, по таймеру, и т. п.
а поскольку автор вопроса на этом внимания не уточнил думаю заострять внимание на этом не стоит (мы же не будем ему объяснять как работает таймер)
думаю автор понял все что ему надо
а при необходимости уточнит вопрос


Набережных С.   (2002-07-25 15:11:00) [2]


> Olorin ©

Попробуй так:

procedure TForm2.Button1Click(Sender: TObject);
var
KS:TKeyboardState;
begin
GetKeyboardState(KS);
KS[VK_CONTROL]:=KS[VK_CONTROL] or $80;
SetKeyboardState(KS);
SendMessage(Form1.Handle,WM_KEYDOWN,Ord("A"),0);
SendMessage(Form1.Handle,WM_KEYUP,Ord("A"),0);
KS[VK_CONTROL]:=KS[VK_CONTROL] and $7F;
SetKeyboardState(KS);
end;


Юрий Зотов   (2002-07-25 09:21:00) [3]

> Proton

А разве не ясно, что проблема не в том, КАКслать (клавиатурные сообщения - не тайна), а в том, КОГДАслать и ОТКУДАслать?

Послать своей программе комбинацию Ctrl+A - это даже не вопрос. Вопрос в том, КАКопределить, что юзер нажал этот аккорд, если в момент нажатия программа НЕАКТИВНА.

А Вы говорите "WM_KEYDOWN". Это, извините, и ежу понятно, а вот КОГДАи ОТКУДА? Вот в чем проблема-то.


Proton   (2002-07-25 05:43:00) [4]


> Юрий Зотов © (24.07.02 22:57)
> > не перехватывать а слать !!!
> А уж потом ставить троекратные восклицания.

вопрос задавал не я
про сказанное вами я знаю
думаю что смысл вопроса не перенаправить а все таки слать
то есть postmessage(windowghandle,wm_keydown,...);]
думаю не стоит на меня изза знаков восклицания бочку гнать - мы ведь взрослые люди


Юрий Зотов   (2002-07-24 22:57:00) [5]

> не перехватывать а слать !!!

Вопрос я читал.

Ну а если немного подумать? Ну хоть совсем чуть-чуть?

Клавиатурный ввод, понятное дело, всегда идет в активное окно. Следовательно, чтобы направить его в неактивное, его надо сначала перехватить.

Это может сделать либо сама система (после Вашего RegisterHotKey), либо глобальный хук (если нужен глобальный перехват). И НИЧТО НЕ МЕШАЕТ ЭТОМУ ХУКУ ПРОДУБЛИРОВАТЬ (или перенаправить) ПЕРЕХВАЧЕННЫЙ ВВОД В ЛЮБОЕ ВАШЕ ОКНО.

Так что - а если немного подумать? Ну хоть совсем чуть-чуть?

А уж потом ставить троекратные восклицания.


VID   (2002-07-24 22:32:00) [6]

ну если принимаются любые идеи...
http://delphibase.endimus.com/?action=viewfunc&topic=sysiface&id=10242


Proton   (2002-07-24 18:33:00) [7]


> Cyrill (24.07.02 14:58)
> Ставь hook и обрабатывай сообщения клавиатуры.


> Юрий Зотов © (24.07.02 16:33)
> См. RegisterHotKey в API. Либо хук.

не перехватывать а слать !!!


Юрий Зотов   (2002-07-24 16:33:00) [8]

См. RegisterHotKey в API. Либо хук.


Proton   (2002-07-24 16:29:00) [9]


> Song © (24.07.02 16:00)
> Ну дык SendMessage()

+
Wm_keYdowN + wm_keyup


Song   (2002-07-24 16:00:00) [10]

Ну дык SendMessage()


Cyrill   (2002-07-24 14:58:00) [11]

Ставь hook и обрабатывай сообщения клавиатуры.


Наверх

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