Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как отправить значение о нажатии 2х клавиш в программу

41K
24 мая 2009 года
Niaka
11 / / 03.02.2009
Нужно отправить в другую программу одновременное нажатие клавиш
шифт и 1
[COLOR="Navy"] // Имитация нажатия шифт+1[/COLOR]

PostMessage(hwnd,WM_KEYDOWN, VK_SHIFT ,0);
PostMessage(hwnd,WM_KEYDOWN, 0x31 ,0);
PostMessage(hwnd,WM_KEYUP, VK_SHIFT ,0);
PostMessage(hwnd,WM_KEYUP, 0x31 ,0);

//--------------------------------------------------//

Пробую так но у меня ничего не получается, клавиши нажимаются в другой программе по отдельности

помогите кто знает
вот
535
25 мая 2009 года
Нездешний
537 / / 17.01.2008
Две последние строки местами поменяй у себя.

Можешь также использовать keybd_event:
 
Код:
keybd_event(VK_SHIFT, 0, 0, 0);
keybd_event('1', 0, 0, 0);
keybd_event('1', 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
7.4K
25 мая 2009 года
T...H
159 / / 28.12.2008
BYTE keys[256];
GetKeyboardState(keys);
keys[17] = 128;
SetKeyboardState(keys);
keybd_event(49, 0, 0, 0);
41K
26 мая 2009 года
Niaka
11 / / 03.02.2009
насколько знаю
[COLOR="Blue"]keybd_event(); [/COLOR]
сообщения о нажатии в другие приложения не отправляет, а может отправить только в текущее (в то приложение окно которого активно на момент выполнения команды, а мне надо чтобы сообщение о нажатии дошло в любом случае, даже если окно не активно)
7
26 мая 2009 года
@pixo $oft
3.4K / / 20.09.2006
Немного не в тему,но хотелось бы узнать по поводу такой строчки в MSDN:[QUOTE=MSDN]The keyboard driver's interrupt handler calls the keybd_event function[/QUOTE]Это что ж получается:что драйвер вызывает процедуру пользовательского уровня?Или,может,мы пользуемся глубоко ядерной процедурой,которую могут вызывать только драйвера?
Поясните пожалуйста

По теме:там же,в MSDN,ничего не написано,что keybd_event работает только для активного окна
535
27 мая 2009 года
Нездешний
537 / / 17.01.2008
2 Niaka [COLOR="Red"]Две последние строки местами поменяй у себя.[/COLOR]
41K
27 мая 2009 года
Niaka
11 / / 03.02.2009
Цитата: @pixo $oft

По теме:там же,в MSDN,ничего не написано,что keybd_event работает только для активного окна



работаю в C++Builder 2007, у меня keybd_event работает только для активного на данный момент окна

41K
27 мая 2009 года
Niaka
11 / / 03.02.2009
Цитата: Нездешний
2 Niaka [COLOR="Red"]Две последние строки местами поменяй у себя.[/COLOR]



поменял, написал так

// Имитация нажатия шифт+1

PostMessage(hwnd,WM_KEYDOWN, VK_SHIFT ,0);
PostMessage(hwnd,WM_KEYDOWN, 0x31 ,0);
PostMessage(hwnd,WM_KEYUP, 0x31 ,0);
PostMessage(hwnd,WM_KEYUP, VK_SHIFT ,0);

//--------------------------------//

всё равно не работает

535
28 мая 2009 года
Нездешний
537 / / 17.01.2008
[QUOTE="Niaka"]всё равно не работает[/QUOTE]
1. Скорее всего, не туда шлете. Ищите дочерние окна.
2. Попробуйте WM_CHAR. Проходит?
3. Либо все таки используйте keybd_event
 
Код:
HWND hwndForeground = GetForegroundWindow();
SetForegroundWindow(hwndTarget);
keybd_event ...
SetForegroundWindow(hwndForeground);
14
28 мая 2009 года
Phodopus
3.3K / / 19.06.2008
Цитата: @pixo $oft
Немного не в тему,но хотелось бы узнать по поводу такой строчки в MSDN:Это что ж получается:что драйвер вызывает процедуру пользовательского уровня?Или,может,мы пользуемся глубоко ядерной процедурой,которую могут вызывать только драйвера?
Поясните пожалуйста


эта строчка просто говорит о том что и обычная клавиатура, грубо говоря, вызывает эту функцию. но так было раньше и они немного лукавят. совсем чуть-чуть :)

41K
06 июня 2009 года
Niaka
11 / / 03.02.2009
Цитата: Нездешний
1. Скорее всего, не туда шлете. Ищите дочерние окна.
2. Попробуйте WM_CHAR. Проходит?
3. Либо все таки используйте keybd_event
 
Код:
HWND hwndForeground = GetForegroundWindow();
SetForegroundWindow(hwndTarget);
keybd_event ...
SetForegroundWindow(hwndForeground);




Шлю туда куда нужно, просто у меня там нажимается сначала шифт, а потом нажимается 1, а мне надо чтобы они нажимались как комбинация клавиш шифт +1, а не по отдельности

288
08 июня 2009 года
nikitozz
1.2K / / 09.03.2007
Цитата: Niaka
Шлю туда куда нужно, просто у меня там нажимается сначала шифт, а потом нажимается 1, а мне надо чтобы они нажимались как комбинация клавиш шифт +1, а не по отдельности



Вопрос, а зачем вам это нужно? Сделать это простым PostMessage'м не удастся, а keybd_event доставит данные о нажатии лишь активному окну. Может стоит использовать WM_CHAR, если это конечно возможно?

14
09 июня 2009 года
Phodopus
3.3K / / 19.06.2008
Цитата: Niaka
Шлю туда куда нужно, просто у меня там нажимается сначала шифт, а потом нажимается 1, а мне надо чтобы они нажимались как комбинация клавиш шифт +1, а не по отдельности


А Shift+1 это по-твоему что? Отдельная клавиша на клавиатуре?

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог