Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
7 / 6 / 1
Регистрация: 03.07.2019
Сообщений: 123
1

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

21.01.2020, 18:30. Показов 975. Ответов 6
Метки c++ (Все метки)

Доброго времени суток!
У меня возник вопрос: можно ли средствами c++(или с помощью сторонних библиотек) управлять другой программой? Допустим, чтобы программа вводила в другом приложении слово "привет!" и нажимала enter. Или в браузере каждые 10 секунд нажимала f5. Короче, можно ли сделать так, чтобы программа на c++ нажимала клавиши?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.01.2020, 18:30
Ответы с готовыми решениями:

Создать управление программой
Нужно было сделать программу, чтобы она управлялась через switch-case Вот что получилось:...

Голосовое управление программой
Здравствуйте, я еще неопытный программист, но хочу попробовать сделать программу с голосовым...

Взаимодействие с другой программой
Всем добрый вечер! Подскажите пожалуйста как реализуется взаимодействие с другой программой!...

Программа управляющая другой программой....
Здраствуйте многоуважаемые форумчане, помогите мне пожалуйста одолеть такую программу: Есть...

__________________

Записывайтесь на профессиональные курсы C++ разработчиков
6
случайный прохожий
1503 / 1000 / 373
Регистрация: 20.07.2013
Сообщений: 2,902
22.01.2020, 03:49 2
Можно. Я использовал билдер.

Имитация нажатия клавиш: Отследить, активна программа или нет или Перехват и имитация нажатия клавиши клавиатуры в чужом приложении
Отправка текста: Программа-биндер, передача информации в чужой процесс

Еще (вставка текста):
C++
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
unsigned int HotKey;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  HotKey = GlobalAddAtom(L"HotKey");
  RegisterHotKey(NULL, HotKey, MOD_CONTROL, int('V'));
}
//---------------------------------------------------------------------------
HWND NextWindowElement(HWND h, LPCTSTR fasdClass, LPCTSTR fasdWindow, int level)
{
  HWND h2 = NULL;
  for(int i = 0; i < level; i++)
    h2 = FindWindowEx(h, h2, fasdClass, fasdWindow);
  return h2;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  bool is_chat_found = 0;
  HWND hWnd = GetForegroundWindow(), hWnd2, hWnd3, hWnd4;
 
  if (hWnd == FindWindow(L"PokerStarsTableFrameClass", NULL))
  {
    hWnd2 = NextWindowElement(hWnd, L"PokerStarsTablePanelWnd", NULL, 1);
    hWnd3 = NextWindowElement(hWnd2, L"WinInplaceDialogEngineClass", NULL, 1);
    hWnd4 = NextWindowElement(hWnd3, L"PokerStarsChatEditorClass", NULL, 1);
    is_chat_found = 1;
  }
  else if (hWnd == FindWindow(L"PokerStarsTableHelperFrameClass", NULL))
  {
    hWnd2 = NextWindowElement(hWnd, L"PokerStarsTableHelperControlClass", NULL, 1);
    hWnd3 = NextWindowElement(hWnd2, L"PokerStarsTableHelperPaneClass", NULL, 1);
    hWnd4 = NextWindowElement(hWnd3, L"PokerStarsChatEditorClass", NULL, 1);
    is_chat_found = 1;
  }
 
  if (is_chat_found && Clipboard()->HasFormat(CF_TEXT))
  {
    wchar_t *text = String(Clipboard()->AsText).c_str();
    SendMessage(hWnd4, WM_SETTEXT, 0, (LPARAM)text);
    SendMessage(hWnd4, WM_KEYDOWN, VK_END, 0);
  }
 
  // вставка картинки не работает
  if(is_chat_found && Clipboard()->HasFormat(CF_BITMAP))
  {
    HANDLE ghBmp = HANDLE(Clipboard()->GetAsHandle(CF_BITMAP));
    SendMessage(hWnd4, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)ghBmp);
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
  UnregisterHotKey(NULL, HotKey);
  GlobalDeleteAtom(HotKey);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ApplicationEvents1Message(tagMSG &Msg, bool &Handled)
{
  if (Msg.message == WM_HOTKEY)
    if (Msg.wParam == HotKey)
      Button1->Click();
}
//---------------------------------------------------------------------------
1
Миниатюры
Управление другой программой  
43 / 39 / 5
Регистрация: 16.09.2019
Сообщений: 285
22.01.2020, 08:27 3
Цитата Сообщение от kuso4ek Посмотреть сообщение
Короче, можно ли сделать так, чтобы программа на c++ нажимала клавиши?
Кликеров полно же в нете? -значит можно...
0
7 / 6 / 1
Регистрация: 03.07.2019
Сообщений: 123
22.01.2020, 21:50  [ТС] 4
gunslinger, спасибо, буду разбираться.
0
43 / 39 / 5
Регистрация: 16.09.2019
Сообщений: 285
22.01.2020, 22:28 5
Цитата Сообщение от kuso4ek Посмотреть сообщение
Короче, можно ли сделать так, чтобы программа на c++ нажимала клавиши?
Если это конечная цель, а не промежуточная - то, говорят, вот это самое оно - AutoIt
0
Эксперт C
25582 / 15955 / 3414
Регистрация: 24.12.2010
Сообщений: 34,898
22.01.2020, 23:38 6
Вообще-то все можно сделать через посылку сообщений (SendMessage). Если ты знаешь HWND окна управляемой программы, то флаг тебе в руки!
0
случайный прохожий
1503 / 1000 / 373
Регистрация: 20.07.2013
Сообщений: 2,902
24.01.2020, 20:04 7
Байт, в моих примерах это и используется.
Забыл только сказать, что "хэндлы" HWND можно узнать, используя программы вроде Win Spy или Spy++, либо подобные. В том же AutoIt есть утилита Window Info c аналогичным всяким win spy-ям функционалом (чем-то она удобнее - например, показывает порядковый номер контрола, если их несколько одного типа-класса). А Spy++ от Microsoft хоть и (вроде как) старый, но через него можно также отследить, какие виндовые сообщения (Message) и как передаются при взаимодействии с оконными элементами. И "продублировать" их в своем приложении.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.01.2020, 20:04

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

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

Управление калькулятором из другой программы
Здравствуйте, пишу на VC++ 2008, подскажите примерами, как управлять калькулятором из другой...

Управление окнами другой программы
Доброго времени суток... Я сам не профи по Си++, но в СИ разбираюсь хорошо. А вопрос у меня...

Записать программой #1 и прочитать программой #2
Всем привет! Столкнулся с проблемой: Программа #1 пишет в бинарник инфу, программа #2 читает этот...


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

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

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