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

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

setkeyboardstate [D6, XP]


Mr tray ©   (2006-05-07 15:57:00) 

Здравствуйте! Объясните мне, пожалуйста, для чего существует setkeyboardstate . Я его вызываю с разними параметрами, но чё то не улавливаю, в чем фишка. Хелп читал - не помогло.


Mr tray   (2006-05-09 16:26:00) [1]

никто не знает, почему посылка wm_keydown ничего не делает?


Mr tray   (2006-05-08 17:29:00) [2]

вроде бы нашел. посылки wm_keydown, wm_keyup (но они чего-то не работают) и wm_char (он работает). sendmessage(getfocus,wm_char,97,5) печатает 5 букв "a" в, допустим, tedit, на котором сейчас стоит фокус.


Интересующийся   (2006-05-08 02:45:00) [3]

> или я что-то не так понял?


var
a:TKeyboardState;
begin
a[65]:=$80;
setkeyboardstate(a);
end;


Данный код нетолько сам неработает, но и блокирует ввод (редактирование)в "TMemo"!

P.S.
Кроме того, как я понял из описания функции она работает толька для процесса в контексте которого она запускается.

У MS VBA есть функция позволяющая нажимать клавиши (в том чесле в чужих прогах), думаю тебе необходимо реализовать ее вариант т олько в Delphi!

Ищи инфу о том как программно клавишу нажать в своем и чужом приложении. Насчет функции VB здесь вроде инфа лежала как это сделать.


Mr tray   (2006-05-07 23:03:00) [4]

ага. ясно. спасибо всем. только, как я понял
var
 a:TKeyboardState;
begin
 a[65]:=$80;
 setkeyboardstate(a);
end;

виртуально нажиает кнопку с кодом 65, то бишь "a". у меня фокус стоит на edit1. виртуально нажимаю кнопку, но ничего не вводится. почему? или я что-то не так понял?


Интересующийся   (2006-05-07 18:07:00) [5]

> Формат записи шестнадцатеричного числа. Нужно так: $80

Верно (в нормальный вид я и забыл перевисти), 0x81 и 0x81 я из книги брал.


TUser   (2006-05-07 18:03:00) [6]

Совсем сдурел я. Замени 0x на значек $.


Интересующийся   (2006-05-07 18:02:00) [7]

>мм. что значит 0x<какое-то число> ? и что в это записи не так?

0 (ноль) x (икс) - насколько я понимаю.

Про код я сказать ничего немогу!

> Интересующийся, спасибо. А где можно достать эту самую книгу по api доктора Саймона-Франкинштейна :)?

Спроси лучше где к ней диск найти :)))))

Я через Internet заказывал (пришла без диска)!!!

Ищи в сети:
Автор: Ричард Саймон
Издательство: SAMS и DiaSoft (www.diasoft.kiev.ua)

ББК 33.112
ISBN 966-7393-74-7

Но без диска она неинтересна, там все примеры на диске, а в книге только ссылки на файлы.

P.S.
Может другую в Inete поискать?
У "Притера" гниги хорошие, может у них есть про API.


Джо   (2006-05-07 17:55:00) [8]

> [7] Mr tray   (07.05.06 17:29)
> и что в это записи не так?

Формат записи шестнадцатеричного числа. Нужно так: $80


Джо   (2006-05-07 17:53:00) [9]

> Шестнадцатиричный формат в Паскале.

В C.


TUser   (2006-05-07 17:52:00) [10]


> что значит 0x<какое-то число> ?

Шестнадцатиричный формат в Паскале.

> и что в это записи не так?

все так.


Mr tray   (2006-05-07 17:29:00) [11]

мм. что значит 0x<какое-то число> ? и что в это записи не так?
var
 a:TKeyboardState;
begin
 a[65]:=0x80;
 setkeyboardstate(a);
end;


Mr tray   (2006-05-07 17:17:00) [12]

Интересующийся, спасибо. А где можно достать эту самую книгу по api доктора Саймона-Франкинштейна :) ?


Джо   (2006-05-07 16:41:00) [13]

> [3] Mr tray   (07.05.06 16:11)
> Джо
> спасибо. но это я понял из хелпа. как я понимаю, с помощью
> этой функции можно виртуально нажать кнопку?

В общем, да. С оговорками, указанными в справке и MSDN.


Интересующийся   (2006-05-07 16:19:00) [14]

Для установки одной из клавиш-переключателей во включеное состояние применяется значение 0x81 в 256-битовом массиве. Для установки во включенное состояние непереключаемой (обычной клавиши) применяется значение 0x80. Виртуальная клавиша представляет собой индекс элемента в массиве.

В члуаи успеха возвращает Истину.

P.S.
Microsoft Windows 2000 API. Р. Саймон. DiaSoft 2001
Глава 9. ст 324

Там и пример на CD есть в котором CTRL устанавливается в нажатое состояние (у меня диска нет).


Mr tray   (2006-05-07 16:11:00) [15]

Джо
спасибо. но это я понял из хелпа. как я понимаю, с помощью этой функции можно виртуально нажать кнопку?


Джо   (2006-05-07 16:05:00) [16]

Копирует 256-байтный буфер состояния клавиатуры в таблицу состояния клавиатуры текущего потока. Этот буфер представляет собой таблицу, описывающую текущее состояние клавиш (нажата/ненажата), точнее, виртуальных клавиш. Получить его можно функцией GetKeyboardState. Не годится для установки таких "глобальных клавиш" как Caps Lock и т.п.


Интересующийся   (2006-05-07 16:04:00) [17]

> Я его вызываю с разними параметрами.....

Код в студию!


Наверх

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