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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2012, 18:12   #1
~Dry)|(6aH~
Новичок
Джуниор
 
Регистрация: 05.09.2011
Сообщений: 2
Вопрос Эмуляция нажатия комбинации Ctrl+...

Попытался управлять уже готовым браузером. Нужно было просто переключаться между вкладками или создавать новую. Отследил, какие сообщения отправляются через Spy++, создал идентичные:
Код:
PostMessage(h,WM_KEYDOWN, VK_CONTROL, (0x1D<<16)|(1) );
PostMessage(h,WM_KEYDOWN, VK_TAB, (0x0F<<16)|(1) );
Не работают, решил добавить KeyUp:
Код:
PostMessage(h,WM_KEYDOWN, VK_CONTROL, (0x1D<<16)|(1) );
PostMessage(h,WM_KEYDOWN, VK_TAB, (0x0F<<16)|(1) );
PostMessage(h,WM_KEYUP, VK_CONTROL, (0x0F<<16)|(1)|(1<<30)|(1<<31));
PostMessage(h,WM_KEYUP, VK_TAB, (0x1D<<16)|(1)|(1<<30)|(1<<31));
Тоже никакого эффекта, пришлось эмулировать нажатие кнопки мышки(оч. бредовый вариант, т.к. при изменении размеров экрана может не сработать).
Но вот мне надо в адресную строку ввести адрес с буффера обмена:
Отлавливаю опять таки все сообщения для окна через Spy++, подгоняю по аналогии свои:
Код:
PostMessage(EditHandle,WM_KEYDOWN, VK_CONTROL, (0x1D<<16)|(1) );
PostMessage(EditHandle,WM_KEYDOWN, 'V', (0x2F<<16)|(1) );
PostMessage(EditHandle,WM_KEYUP, 'V', (0x2F<<16)|(1)|(1<<30)|(1<<31));
PostMessage(EditHandle,WM_KEYUP, VK_CONTROL, (0x1D<<16)|(1)|(1<<30)|(1<<31));
Перепробывал разные варианты, и без KeyUp и даже использовал
keybd_event:
Код:
keybd_event (VK_CONTROL, 0, 0, 0);
PostMessage(EditHandle,WM_KEYDOWN, 'V', (0x2F<<16)|(1) );
PostMessage(EditHandle,WM_KEYUP, 'V', (0x2F<<16)|(1)|(1<<30)|(1<<31));
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
В итоге в текстовое поле вводиться "v" и ничего больше, Ctrl вообще как будто не работает, в чём может быть проблемма? Уже весь гугл облазил, так и не смог найти решения.
ПС: про WM_PASTE знаю, просто не могу понять почему Ctrl не работает(

Последний раз редактировалось ~Dry)|(6aH~; 16.02.2012 в 18:23.
~Dry)|(6aH~ вне форума Ответить с цитированием
Старый 22.02.2012, 20:56   #2
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,152
По умолчанию

Тупо через Timer срабатывает Cntrl-O
Код:
procedure TForm1.Timer2Timer(Sender: TObject);
begin
 keybd_event(VK_CONTROL,0,0,0);
  keybd_event(79,0,0,0);
  keybd_event(79,0,KEYEVENTF_KEYUP,0);
  keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
end;
Smogg вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Имитация нажатия комбинации клавиш! stalsoft C# (си шарп) 2 24.06.2011 00:13
Перехват нажатия ctrl+break Dima DDM Общие вопросы Delphi 5 13.12.2010 18:42
Эмуляция нажатия CTRL-V в чужом окне ]Wowan[ Общие вопросы Delphi 0 25.04.2009 18:42
Имитация нажатия комбинации клавиш Zeraim Win Api 15 05.05.2008 20:35
Перехват нажатия Ctrl Lonix Win Api 3 13.09.2007 18:20