Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Alex_From_777
Программист по неволе
24 / 24 / 8
Регистрация: 22.04.2015
Сообщений: 476
Записей в блоге: 1
1

Нажать на кнопку одной программы из другой

27.02.2018, 15:02. Просмотров 386. Ответов 1

Доброго всем времени суток.
Пытаюсь справиться со следующим поручением, а именно из окна одной программы запустить другую программу 2, найти на окне второй программы кнопку и нажать на неё. С запуском разобрался, а вот с нажатием на кнопку все еще мучаюсь. Нашел один способ, который предполагает решение следующим образом:
Создать рекурсивную ф-цию
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
HWND FindBtn(HWND CurrentHwnd,char * name)
{
  HWND temp;
  temp=GetWindow(CurrentHwnd,GW_CHILD); // находим первое дочернее окно
  while (temp!=NULL) // проверяем, а есть ли оно вообще
  {
     char WindowText[1024];
     GetWindowText(temp,WindowText,1023); // получаем его название
     if (!strcmp(name,WindowText))
        return temp; // проверяем, искомая ли это кнопка, если да, то возвращаем её хэндл
     HWND result=FindBtn(temp,name); // если это была не она, то обходим её дочерние объекты
     if (result!=NULL)
        return result; // если при этом искомый объект был найден, возвращаем хэндл на него
     temp=GetWindow(temp,GW_HWNDNEXT); // иначе - проверяем следующий объект, дочерний для CurrentHwnd
  }
  return NULL; // объект не найден
}
А по какому либо событию выполнить её:
C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TForm1::StartBtnClick(TObject *Sender)
{
  String  BN = "Кнопка";
  HWND target, WindOfSearch;
  if (RB1->Checked==true) ii=1;
  if (RB2->Checked==true) ii=0;
  WindOfSearch=FindWindow(NULL,ProgName[ii].c_str());
  target=FindBtn(WindOfSearch, BN.c_str());
  SendMessage(target,WM_LBUTTONDOWN,0 ,0);
  SendMessage(target,WM_LBUTTONUP,0,0 );        
}
Но все это хорошо работает, если эта нажимаемая кнопка имеет значение свойства visible=true;
А есть ли способ решения задачи при visible=false;?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2018, 15:02
Ответы с готовыми решениями:

Программно нажать на кнопку другой программы
Нужно нажать на кнопку "Реестр" мишкой в CCleaner. Код: this->WindowState =...

Как программно нажать кнопку другой программы
таких тем нашел много но хотя не мог разобраться, если ни лень будет сделайте исходники обеих...

Программно нажать кнопку в окне другой программы
Мне нужно чтоб программа могла запустить другую программу расположенную по введенному адресу и...

Нажать кнопку в другой программе
Здравствуйте! Имеется эмулятор приставки PS2 - PCSX2 del Написал лаунчер, содержащий авто...

Как нажать кнопку, нажатием другой?
У меня такая проблема у меня имеются 2 кнопки speedbutton. При нажатии первой, вторая принимает...

1
Alex_From_777
Программист по неволе
24 / 24 / 8
Регистрация: 22.04.2015
Сообщений: 476
Записей в блоге: 1
06.03.2018, 11:40  [ТС] 2
Получается, что если кнопка не видима, то получить её дескриптор невозможно, а значит и обратиться к ней по нему то же. В итоге задача таким образом не решаема. Я правильно понимаю?
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.03.2018, 11:40

Как нажать кнопку в другой программе?
Никто не знает, как нажать кнопку в другой программе? Я знаю даже что на ней написано! ;-)

Как нажать на кнопку в другой программе
Нужно нажать на кнопка caption которой 'Отправить' Знаю hWnd чужого окна остается только...

Как программно нажать на кнопку из другой формы
Собственно есть 10 форм. Каждая из них при вводе в Edit проверяет на ошибки значения по нажатию на...


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

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

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