Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
6-24140
CrazyTemo
2002-05-22 17:53
2002.08.08
socket


1-24112
V.Turecky
2002-07-26 19:11
2002.08.08
Запуск программ своими силами...


1-24001
Helg
2002-07-28 09:39
2002.08.08
Как перехватывать обработчики ошибок?


3-23896
Filat
2002-07-16 17:38
2002.08.08
Как создать таблицу в нужной мне директории?


7-24251
newbie1
2002-05-22 16:50
2002.08.08
системный трей





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский