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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.06.2010, 15:37   #1
MyIE
Форумчанин
 
Аватар для MyIE
 
Регистрация: 02.01.2010
Сообщений: 127
По умолчанию Посылаем нажатия клавиш в другую программу (SendKeys32.pas)

Мне нужно послать в одну програмку (WME) сочетание клавиш "Ctrl+Shift+E"
В самом *.pas файле есть пример вида:
Код:
'+(abc)'
или
'+abc'
Но у меня даже на данный синтаксис ругается програмка "Invalid KeyName"

Из самого SendKeys32.pas:
Код:
Supported modifiers:
+ = Shift
^ = Control
% = Alt
Пробовал варианты(послать сочетание "Ctrl+O" [открытие файла] ):
Код:
'^o'
'^O'
'^(o)'
'^(o)'
'^{o}' // хотя это заведомо неверны, но я решил опробовать ;)
'^{O}' // хотя это заведомо неверны, но я решил опробовать ;)
Ниодин из этих вариантов не оказался верным.
Знатоки, внимание, вопрос: как отослать сочетание "Ctrl+Shift+E", какой же нужно использовать синтаксис?
0_o
MyIE вне форума Ответить с цитированием
Старый 20.06.2010, 16:09   #2
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

Должно сработать:
Код:
var
   h2: HWND;
begin
   h2 := FindWindow(nil, 'заголовок программы'); // вместо nil можно еще указать class окна
     // узнать class можно с помощью программ, таких как Spy++, InqSoft Window Scanner и т.д.
   {Зажимаем клавишы}
   SendMessage(h2, WM_KEYDOWN, VK_CONTROL,0); // VK_CONTROL - Ctrl
   SendMessage(h2, WM_KEYDOWN, VK_SHIFT,0);
   SendMessage(h2, WM_KEYDOWN, Ord('E'),0);
   {Отпускаем клавишы}
   SendMessage(h2, WM_KEYUP, VK_CONTROL,0);
   SendMessage(h2, WM_KEYUP, VK_SHIFT,0);
   SendMessage(h2, WM_KEYUP, Ord('E'),0);
end;
W0LF вне форума Ответить с цитированием
Старый 20.06.2010, 17:52   #3
MyIE
Форумчанин
 
Аватар для MyIE
 
Регистрация: 02.01.2010
Сообщений: 127
По умолчанию

Програмке глубоко по барабану


http://www.programmersclub.ru/посылаем-нажатия-клавиш/
0_o
MyIE вне форума Ответить с цитированием
Старый 21.06.2010, 12:44   #4
MyIE
Форумчанин
 
Аватар для MyIE
 
Регистрация: 02.01.2010
Сообщений: 127
По умолчанию

Проблема решена следующим образом:
Код:
procedure TFormMain.StartWME;
var
h, h2: HWND;
begin
  h:=findwindow(nil, 'Кодировщик Windows Media');
  SendMessage(h, WM_SYSCOMMAND, SC_HOTKEY, h);
  SendMessage(h, WM_SYSCOMMAND, SC_RESTORE, h);
  h2:=findwindowex(h, 0, 'TEdit' ,nil);
  caption:=format('%d - %d', [h,h2]);
  SetForegroundWindow(h);
  Windows.SetFocus(h2);
  keybd_event(VK_CONTROL, 0, 0, 0);
  keybd_event(VK_SHIFT, 0, 0, 0);
  keybd_event(ord('E'), 0, 0, 0);
  keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
  keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
  keybd_event(ord('E'), 0, KEYEVENTF_KEYUP, 0);
sleep(250);
if (IsWindowVisible(h) and (GetWindow (h, GW_OWNER) = 0) and (GetParent(h) = 0))
then PostMessage(h, WM_SYSCOMMAND, SC_MINIMIZE, 0);
end;
0_o
MyIE вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перехват нажатия клавиш skalt12 Общие вопросы Delphi 4 17.08.2009 13:06
написать ASSEMBLER программу отображаущую скан-код нажатия и отпускания клавиш NAC35 Помощь студентам 2 16.06.2009 00:24
Перехват нажатия клавиш. Vi_russ Общие вопросы Delphi 1 02.12.2008 20:25
Как заставить программу реагтровать на нажатия клавиш? AngelOfDeath Общие вопросы Delphi 9 07.04.2008 23:58