Форум: "Основная";
Текущий архив: 2002.08.08;
Скачать: [xml.tar.bz2];
ВнизКлавиатурные комбинации в НЕАКТИВНОЕ окно... Найти похожие ветки
← →
Olorin (2002-07-24 11:06) [0]Поднимал я раз эту тему и так и не получил ответа, поиски в доках ничего не дали... может сейчас кто чего нарыл?
Нужно слать неактивному окну комбинации клавишь типа:
Ctrl+A
Ctrl+F1
Ctrl+Shift+A
Ctrl+Shift+F1
Ctrl+Alt+Shift+A
Ctrl+Alt+Shift+F1
Нарыл тут пример на ассемблере но там можно только ОДНУ неуправляющую клавишу слать... :-(
Любые идеи принимаются...
← →
Cyrill (2002-07-24 14:58) [1]Ставь hook и обрабатывай сообщения клавиатуры.
← →
Song (2002-07-24 16:00) [2]Ну дык SendMessage()
← →
Proton (2002-07-24 16:29) [3]
> Song © (24.07.02 16:00)
> Ну дык SendMessage()
+
Wm_keYdowN + wm_keyup
← →
Юрий Зотов (2002-07-24 16:33) [4]См. RegisterHotKey в API. Либо хук.
← →
Proton (2002-07-24 18:33) [5]
> Cyrill (24.07.02 14:58)
> Ставь hook и обрабатывай сообщения клавиатуры.
> Юрий Зотов © (24.07.02 16:33)
> См. RegisterHotKey в API. Либо хук.
не перехватывать а слать !!!
← →
VID (2002-07-24 22:32) [6]ну если принимаются любые идеи...
http://delphibase.endimus.com/?action=viewfunc&topic=sysiface&id=10242
← →
Юрий Зотов (2002-07-24 22:57) [7]> не перехватывать а слать !!!
Вопрос я читал.
Ну а если немного подумать? Ну хоть совсем чуть-чуть?
Клавиатурный ввод, понятное дело, всегда идет в активное окно. Следовательно, чтобы направить его в неактивное, его надо сначала перехватить.
Это может сделать либо сама система (после Вашего RegisterHotKey), либо глобальный хук (если нужен глобальный перехват). И НИЧТО НЕ МЕШАЕТ ЭТОМУ ХУКУ ПРОДУБЛИРОВАТЬ (или перенаправить) ПЕРЕХВАЧЕННЫЙ ВВОД В ЛЮБОЕ ВАШЕ ОКНО.
Так что - а если немного подумать? Ну хоть совсем чуть-чуть?
А уж потом ставить троекратные восклицания.
← →
Proton (2002-07-25 05:43) [8]
> Юрий Зотов © (24.07.02 22:57)
> > не перехватывать а слать !!!
> А уж потом ставить троекратные восклицания.
вопрос задавал не я
про сказанное вами я знаю
думаю что смысл вопроса не перенаправить а все таки слать
то есть postmessage(windowghandle,wm_keydown,...);]
думаю не стоит на меня изза знаков восклицания бочку гнать - мы ведь взрослые люди
← →
Юрий Зотов (2002-07-25 09:21) [9]> Proton
А разве не ясно, что проблема не в том, КАК слать (клавиатурные сообщения - не тайна), а в том, КОГДА слать и ОТКУДА слать?
Послать своей программе комбинацию Ctrl+A - это даже не вопрос. Вопрос в том, КАК определить, что юзер нажал этот аккорд, если в момент нажатия программа НЕАКТИВНА.
А Вы говорите "WM_KEYDOWN". Это, извините, и ежу понятно, а вот КОГДА и ОТКУДА? Вот в чем проблема-то.
← →
Набережных С. (2002-07-25 15:11) [10]
> 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;
← →
Proton (2002-07-25 17:35) [11]событие "когда" может происходить и в любой другой момент, например по завершению работы некоторого цикла, по таймеру, и т. п.
а поскольку автор вопроса на этом внимания не уточнил думаю заострять внимание на этом не стоит (мы же не будем ему объяснять как работает таймер)
думаю автор понял все что ему надо
а при необходимости уточнит вопрос
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.08.08;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c