Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 7
1

Управление другим приложением!

27.01.2011, 17:34. Показов 3293. Ответов 13
Метки нет (Все метки)

Есть приложение (простенькая старенькая любимая игра без исходников).
НЕ ПУТАТЬ С БОТОВОДСТВОМ!

Задача передать в неё эмуляцию нажатия клавиш из своего приложения для дальнейшего сохранения настроек.

Есть хендл окна этого приложения, оно в графическом режиме.
Я могу двигать, менять размеры этого окна.

Проблема окно не реагирует на эмуляцию нажатия клавиш.
Пробовал так:
Delphi
1
2
3
 PostMessage(ExternHandle, WM_ACTIVATE, WA_ACTIVE,0);
  PostMessage(ExternHandle, WM_SETFOCUS, 0, 0);
  PostMessage(ExternHandle, WM_CHAR, 67, 0);
и так
Delphi
1
2
3
4
5
   SetForegroundWindow(ExternHandle);
   SetActiveWindow(ExternHandle);
   sleep(100);
   keybd_event(67,0,0,0);
   keybd_event(67,0,keyeventf_keyup,0 );
и так

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
procedure SendKeyDown(h: Hwnd; key: char);
var nKey, ScanCode, wParam: Word;
    lParam, ConvKey: longint;
begin
  ConvKey:= OemKeyScan(ord(Key));
  ScanCode:= ConvKey and $000000FF or $FF00;
  nkey:= ord(key);
  wParam:= nKey;
  lParam:= longint(ScanCode) shl 16 or 1;
  SendMessage(H, WM_KEYDOWN, nkey, lParam);
end;
 
procedure SendKeyUp(h: Hwnd; key: char);
var nKey, ScanCode, wParam: Word;
    lParam, ConvKey: longint;
begin
  ConvKey:= OemKeyScan(ord(Key));
  ScanCode:= ConvKey and $000000FF or $FF00;
  nkey:= ord(key);
  wParam:= nKey;
  lParam:= longint(ScanCode) shl 16 or 1;
  lParam:= lParam or $C0000000;
  SendMessage(H, WM_KEYUP, nkey, lParam);
end;
Помогите разобраться что не так?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.01.2011, 17:34
Ответы с готовыми решениями:

Значение, возвращаемое приложением должно быть "увидено" другим приложением
Всем привет. Подскажите пожалуйста, как после определённого события, к примеру, при нажатии на...

Работа с другим консольным приложением
у меня есть консольное приложение, которое выводит информацию на экран мне нужно написать...

Управление другим приложением
Добрый день. Не могу никак разобраться. У программы которой хочу управлять знаю все с помощью...

Управление другим приложением
Допустим, мы имеем простое оконное приложение А, которое имеет падающее меню со списком цифр от 1...

13
Эксперт С++
3943 / 1798 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
27.01.2011, 17:54 2
Shadow_2000, возможно, внутри главного окна, есть отдельный элемент, который занимается обработкой нажатий ... Попробуйте получить дочерние окна и воспользоваться функцией SendInput для посылки и исполнения нужных кодов клавиш.
0
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 7
27.01.2011, 18:10  [ТС] 3
MikeSoft,
В графическом окне нет дочерних элементов и окон.
Окно в графическом режиме и создано DirectDraw!

По вашему совету пробую так
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
procedure TForm1.Button1Click(Sender: TObject);
 var
   Inp: TInput;
   I: Integer;
 begin
 
   SetForegroundWindow(ExternHandle);
   SetActiveWindow(ExternHandle);
   sleep(100);
 
     // press
    Inp.Itype := INPUT_KEYBOARD;
     Inp.ki.wVk := Ord('C');
     Inp.ki.dwFlags := 0;
     SendInput(1, Inp, SizeOf(Inp));
 
     // release
    Inp.Itype := INPUT_KEYBOARD;
     Inp.ki.wVk := Ord('C');
     Inp.ki.dwFlags := KEYEVENTF_KEYUP;
     SendInput(1, Inp, SizeOf(Inp));
 
     Application.ProcessMessages;
     Sleep(80);
end;
и всё равно не работает
0
Эксперт С++
3943 / 1798 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
27.01.2011, 19:46 4
Заливайте сюда приложение, к которому пытаетесь обратиться.
0
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 7
27.01.2011, 19:59  [ТС] 5
MikeSoft,

вот она
0
Вложения
Тип файла: rar mame.rar (2.47 Мб, 33 просмотров)
Эксперт С++
3943 / 1798 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
27.01.2011, 20:06 6
Shadow_2000,
mame.zip: Архив повреждён или имеет неизвестный формат
Также, в самом архиве нет исполняемых файлов.
Если для запуска используется эмулятор - вылаживайте и его.
0
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 7
27.01.2011, 20:20  [ТС] 7
MikeSoft,
внутри exe файл
mame.exe с него запускается
после запуска надо выбрать игру и чуть позже нажать ok и запустится игра

Добавлено через 1 минуту
MikeSoft,
там по кнопке tab менюха можно самому кнопки управления настроить
0
Эксперт С++
3943 / 1798 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
27.01.2011, 20:34 8
Попробовал перекачать... То же самое:
Цитата Сообщение от MikeSoft Посмотреть сообщение
mame.zip: Архив повреждён или имеет неизвестный формат
0
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 7
27.01.2011, 20:39  [ТС] 9
MikeSoft,
вот еще раз
0
Вложения
Тип файла: rar proga.rar (2.47 Мб, 38 просмотров)
Эксперт С++
3943 / 1798 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
27.01.2011, 21:03 10
Shadow_2000, опять то же самое ... а чем вы сжимаете?
WinRAR 3.9 - ни в какую не хочет распаковывать.
0
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 7
27.01.2011, 21:12  [ТС] 11
ИМ И ЖМУ. МОЖЕТ НА ПОЧТУ КИНУТЬ
0
61 / 60 / 9
Регистрация: 13.01.2009
Сообщений: 322
28.01.2011, 05:35 12
Цитата Сообщение от MikeSoft Посмотреть сообщение
Shadow_2000, опять то же самое ... а чем вы сжимаете?
WinRAR 3.9 - ни в какую не хочет распаковывать.
у меня рар3.5 без проблем распаковал
0
LK
Заблокирован
28.01.2011, 06:34 13
Total Commander штатными средствами распаковал, даже не вякнул.
0
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 7
28.01.2011, 10:22  [ТС] 14
LK,
Есть мысли по моей проблеме?
В чём может быть заморочка!

Delphi
1
 PostMessage(ExternHandle, WM_CLOSE, 0, 0);
проходит аж бегом!!!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.01.2011, 10:22

управление другим приложением
Есть flash приложение в окне браузера (допустим webBrowser на форме). Так вот... програмно нажать...

Управление другим приложением из приложения
Есть игра "Stronghold Kingdoms", как полагается есть ресурсы, торговля и т.д... Возможно ли...

Управление другим приложением через ADB
Доброго времени суток! Хочу реализовать фишку включения каналов голосом в умном доме, правда...

Управление программой написанной на C# другим приложением(ями)
Прошу предоставить примеры кода или ссылки на литературу по управлению программой написанной на C#...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.