Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 11.08.2009, 13:17   #1
helenfly
Новичок
Джуниор
 
Регистрация: 11.08.2009
Сообщений: 3
По умолчанию Эмуляция нажатия клавиши

Здравствуйте!
Нужно написать код, чтобы в Активном окне (любом) при нажатии определенной клавиши (например v) эмулировалось попеременное нажатие двух клавиш с определенным промежутком времени.

Например, держу клавишу "v" - эмулируется нажатие поочередно "g" "h",
отпускаю - эмуляция закончена.

Как это реализовать?

PS: Я в программировании чайник, а код нужен для любимой игрушки.
helenfly вне форума
Старый 11.08.2009, 13:39   #2
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Самое простое, что приходит на ум... Так это сделать так:
Код:
Procedure SetKey(Key: Integer);
Begin
Keybd_Event(Key, 0, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0);
Keybd_Event(Key, 0, KEYEVENTF_EXTENDEDKEY,0);
Keybd_Event(Key, 0, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0);
End;

Procedure TForm1.Timer1Timer(Sender: TObject);
Begin
If GetKeyState(86) < 0 Then
Begin
SetKey(8);
SetKey(71);
Sleep(100);
SetKey(72);
End;
End;
Но при зажимании клавиши будет проскакивать "v", а при обычном нажатии будет всё нормально.
Всегда рад помочь!
Terran вне форума
Старый 11.08.2009, 14:10   #3
helenfly
Новичок
Джуниор
 
Регистрация: 11.08.2009
Сообщений: 3
По умолчанию

Но этот код применим только к форме TForm1, а как сделать чтобы работало в другом приложении (текущем)?
helenfly вне форума
Старый 11.08.2009, 15:06   #4
uberchel
Участник клуба
 
Аватар для uberchel
 
Регистрация: 19.01.2009
Сообщений: 1,453
По умолчанию

А уж долго зарегистрировать горячию клавишу?

Код:
private
procedure WMHotKey(var Message: TMessage); message WM_HOTKEY;
Код:
Procedure SetKey(Key: Integer);
Begin
Keybd_Event(Key, 0, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0);
Keybd_Event(Key, 0, KEYEVENTF_EXTENDEDKEY,0);
Keybd_Event(Key, 0, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0);
End;

Procedure TForm1.Timer1Timer(Sender: TObject);
Begin
If GetKeyState(86) < 0 Then
Begin
SetKey(8);
SetKey(71);
Sleep(100);
SetKey(72);
End;
End;
Код:
procedure Tform1.WMHotKey(var Message: TMessage);
begin
Timer1.Enabled: =True;
end;
Код:
procedure TForm1.FormActivate(Sender: TObject);
begin
RegisterHotKey(Handle, 86,86);
end;

procedure TForm1.FormDestroy(Sender: TObject);

begin
UnregisterHotKey(Handle, 86)
end;
uberchel вне форума
Старый 11.08.2009, 20:12   #5
helenfly
Новичок
Джуниор
 
Регистрация: 11.08.2009
Сообщений: 3
По умолчанию

Всем спасибо! Программку состряпала, теперь буду ее шлифовать.

Еще вопросы:
Как свернуть программу в трей?
Как привязать ее к определенному процессу? (программе)

Где можно посмотреть про это?
helenfly вне форума
Старый 12.08.2009, 14:20   #6
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Цитата:
Как свернуть программу в трей?
Самый простой вариант - это использовать компонент CoolTrayIcon.
Цитата:
Как привязать ее к определенному процессу? (программе)
Немного уточните, что именно вы подразумеваете под привязыванием программы?
Всегда рад помочь!
Terran вне форума
Старый 01.12.2009, 11:28   #7
Marinesku
Пользователь
 
Регистрация: 01.12.2009
Сообщений: 13
По умолчанию

Здравствуйте. У меня вопрос:
вот код эмуляции буквы:
keybd_event(ord('E'), MapVirtualKey(ord('E'), 0), 0, 0);
keybd_event(ord('E'), 0, KEYEVENTF_KEYUP, 0);
вот для других кнопок:
keybd_event(VK_TAB, MapVirtualKey(VK_TAB, 0), 0, 0);
keybd_event(VK_TAB, 0, KEYEVENTF_KEYUP, 0);
и кроме tab так можно нажимать и другие кнопки.
А как же эмулировать ТОЧКУ. Или тире, запятую... Но главное сейчас - это точка. Вот мне нужно поставить точку, например, в блокноте, или в адресной строку браузера.
Marinesku вне форума
Старый 01.12.2009, 11:30   #8
Marinesku
Пользователь
 
Регистрация: 01.12.2009
Сообщений: 13
По умолчанию

Думал через del на дополнительной клавиатуре, тот что справа (он тоже точку рисует), дык и его незнаю как эмулировать. Только обычный del работает. Может хоть его код напишите.
Marinesku вне форума
Старый 01.12.2009, 11:51   #9
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

имхо, лучше ищите хэндл блокнота и работайте через sendmessage или postmessage:
Код:
SendMessage(h, $0102, ord('.'), 0)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума
Старый 01.12.2009, 12:09   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Одна тема - один автор.
I'm learning to live...
Stilet вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Эмуляция клавиши и БД Патрон БД в Delphi 7 20.11.2008 22:26
Эмуляция нажатия нескольких клавиш -=Shad0www Общие вопросы Delphi 3 12.05.2008 08:13
Эмуляция нажатия кнопки F3 Dimixis Помощь студентам 4 17.06.2007 23:42
Эмуляция нажатия клавиши при отметке Checkbox delphi_beginner Win Api 3 02.06.2007 10:07
Эмуляция нажатия клавиши...... Zoidberg Win Api 4 11.01.2007 18:44