var key: tkeyboardstate; i: integer; begin getkeyboardstate(key); form1.Caption:=''; for i:=0 to 255 do if (key[i]=128)or(key[i]=129) then form1.Caption:=form1.Caption+inttostr(i)+' '; end;
Попробуйте вставить данный код в таймер с интервалом 1!
КАПУСТА: почитай,обсуди,отдохни! |
Привет, Гость! Войдите или зарегистрируйтесь.
Вы здесь » КАПУСТА: почитай,обсуди,отдохни! » WinApi » Быстро узнаем состояние кнопок мыши и клавиатуры!
var key: tkeyboardstate; i: integer; begin getkeyboardstate(key); form1.Caption:=''; for i:=0 to 255 do if (key[i]=128)or(key[i]=129) then form1.Caption:=form1.Caption+inttostr(i)+' '; end;
Попробуйте вставить данный код в таймер с интервалом 1!
Да, код хорош, и не без известен, но такая проблема, у меня на клавиатуре есть доп. клавиши: play, stop... И есть программа-плеер, я хочю чтобы она распознавала нажатые доп. клавиши. Когда форма находится в фокусе, то всё нормально, но только фокус прогпадает, и программа таким методом не может определить нажата клавиша или нет. А вот Winamp определяет нажатые клавиши, даже когда в трее. У меня два вывода: Либо он держит скрытую форму в фокусе постоянно, но это было бы заметно: когда я щёлкаю на любое окно, оно бы тут же теряло фокус, чего не происходит. Либо там хуки, но это уже сложней.
Поделитесь пожалуйста своими мыслямина эту тему.
Ну во первых тот код только посылает нажатие клавиш какому-нибудь объекту, а не считывает состояние клавиатуры, во-вторых, отправить нажатие клавиши любому окну можно всего лишь двумя процедурами:
SendMessage(Handle,WM_KEYDOWN,VK_DOWN,0); SendMessage(Handle,WM_KEYUP,VK_DOWN,0);
А там просто есть поиск по названию окна, и более упрощённое управление.
И кроме того у меня что то с блокнотом не получилось сконнектится handle нашёл, отправил текст, а туда пришло 4 пробела вместо строки: "This is a test", очевидно проблема кодировок, или "выпендрёж" автора, переборщил он с этим, усложнил всё.
Вы здесь » КАПУСТА: почитай,обсуди,отдохни! » WinApi » Быстро узнаем состояние кнопок мыши и клавиатуры!