Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.87
Getter
2 / 2 / 0
Регистрация: 09.09.2010
Сообщений: 221
#1

Управление калькулятором из другой программы - C++

19.04.2011, 22:30. Просмотров 4006. Ответов 13
Метки нет (Все метки)

Здравствуйте, пишу на VC++ 2008, подскажите примерами, как управлять калькулятором из другой программы? Например сложить два числа и естественно получить результат.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2011, 22:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Управление калькулятором из другой программы (C++):

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

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

Открытие файла другой программы из программы.Косяк. - C++
Итак, есть в программе такой кусок: system("E:\\KMPlayer\\KMPlayer.exe E:\\WINDOWS\\New_year.mp3"); Косяк в том, что пока песня не дойдёт...

Управление значком программы в панели пуск - C++
Здравствуйте, подскажите как можно сделать управление программой с помощью значка в панели пуск. Например, простейшее, при клике по значку...

Подскажите с Калькулятором... - C++
Ребят подскажите не могу понять в чем ошибка, нужно чтоб он решал в восьмеричной с/с, но не хочет решать кому не сложно может объяснить что...

проблема с калькулятором матриц - C++
Задание. Вычислить матрицу С=A+B*B(транспонированную). если А(3х3),В(2х3). и заданы этими числами: (101) A(020) (003) (12)...

13
IrineK
Заблокирован
19.04.2011, 22:57 #2
C++
1
system("calc");
0
Getter
2 / 2 / 0
Регистрация: 09.09.2010
Сообщений: 221
19.04.2011, 23:37  [ТС] #3
Я спросил не как запустить, а как именно управлять им из своей проги
0
schdub
2952 / 1297 / 239
Регистрация: 19.01.2009
Сообщений: 3,409
Завершенные тесты: 1
20.04.2011, 00:33 #4
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include <windows.h>
#include <winuser.h>
#include <cassert>
 
// в данной строке должно быть то, что написано в заголовке
// главного окна Калькулятора, у меня это "Клалькулятор Плюс"
#define CALC_TITLE "Калькулятор Плюс"
// полный путь к исполнимому файлу Калькулятора в Вашей системе
#define CALC_PATH  "C:\\WINDOWS\\system32\\calc.exe"
 
class CalcClicker
{
private:
    HWND _hwnd;               // ид главного окна калькулятора
    HWND _hBtn2;              // хендл кнопки 2
    HWND _hBtn8;              // ... 8
    HWND _hBtnMulOp;          // ... *
    HWND _hBtnEqOp;           // ... =
 
    // в данную функцию направляеются все хендлы дочерних
    // окон при опросе главного окна Калькулятора. Здесь
    // происходит фильтрация идентификатов необходимых
    // нам кнопок. Реализация: см. ниже класса.
    friend static BOOL CALLBACK enumChildWindows(HWND hwnd, LPARAM lParam);
 
public:
    CalcClicker()
        : _hwnd(0)
        , _hBtn2(0)
        , _hBtn8(0)
        , _hBtnMulOp(0)
        , _hBtnEqOp(0)
    {
        // для начала ищем окно 
        _hwnd = FindWindow(NULL, CALC_TITLE);
        if (!_hwnd)
        {
            // не удалось найти, пробуем запустить калькулятор
            // и опять пробуем искать главное окно программы
            WinExec(CALC_PATH, SW_NORMAL);
            _hwnd = FindWindow(NULL, CALC_TITLE);
            if (!_hwnd)
                // даже после попытки запуска не было обнаружено окно :(
                return;
        }
        // делаем найденное окно 
        SetForegroundWindow(_hwnd);
        // пускаем процесс опроса всех дочерних окон родительского окна калькулятора
        EnumChildWindows(_hwnd, enumChildWindows, reinterpret_cast<LPARAM>(this));
    };
 
    void do2Mul8()
    {
        // проверяем было ли найдено главное окно калькулятора
        assert(_hwnd);
        // проверяем, ищентификаторы всех ли кнопкок мы нашли
        assert(_hBtn2 && _hBtn8 && _hBtnMulOp && _hBtnEqOp);
    
        // жмем кнопку 2
        SendMessage(_hBtn2, BM_CLICK, 0, 0);
        Sleep(1000);
 
        // жмем кнопку *    
        SendMessage(_hBtnMulOp, BM_CLICK, 0, 0);
        Sleep(1000);
 
        // жмем 8-ку
        SendMessage(_hBtn8, BM_CLICK, 0, 0);
        Sleep(1000);
 
        // жмем равно
        SendMessage(_hBtnEqOp, BM_CLICK, 0, 0);
    };
};
 
// ///////////////////////////////////////////////////////////////////////// //
 
static BOOL CALLBACK enumChildWindows(HWND hwnd, LPARAM lParam)
{
    // описание функции: см. в CalcClicker
    CalcClicker* p = reinterpret_cast<CalcClicker*>(lParam);
 
    // берем текст дочернего окна
    char wndCaption[256];
    GetWindowText(hwnd, wndCaption, sizeof(wndCaption));
 
    if (!strcmp(wndCaption, "2"))
        p->_hBtn2 = hwnd;
    else if (!strcmp(wndCaption, "8"))
        p->_hBtn8 = hwnd;
    else if (!strcmp(wndCaption, "*"))
        p->_hBtnMulOp = hwnd;
    else if (!strcmp(wndCaption, "="))
        p->_hBtnEqOp = hwnd;
 
    return TRUE;
}
 
// ///////////////////////////////////////////////////////////////////////// //
 
int main (int argc, char ** argv)
{
    CalcClicker cc;
    cc.do2Mul8();
 
    return 0;
}
2
ValeryS
Модератор
6651 / 5060 / 470
Регистрация: 14.02.2011
Сообщений: 16,918
20.04.2011, 00:53 #5
на всякий случай нужно изучить что такое Виндос,зачем нужны месаги и что такое окна
даже я(и думаю никто) не подскажет тебе как обратится к неактивному(незапушеному)процессу

Добавлено через 4 минуты
Цитата Сообщение от schdub Посмотреть сообщение
// для начала ищем окно
_hwnd = FindWindow(NULL, CALC_TITLE);
if (!_hwnd)
{
// не удалось найти, пробуем запустить калькулятор
// и опять пробуем искать главное окно программы
WinExec(CALC_PATH, SW_NORMAL);
нет его не запушено......
и лежит не там ..........
чаго делать будем???????????

Добавлено через 6 минут
schdub,
а завтра заказчик скажет
не хочу 2*8
а хочу 256/16
всю программу неределывать будем????
0
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,470
20.04.2011, 21:15 #6
Круто
0
Getter
2 / 2 / 0
Регистрация: 09.09.2010
Сообщений: 221
21.04.2011, 20:33  [ТС] #7
C++
1
2
3
4
5
6
7
8
9
10
11
HWND H= FindWindowA(NULL, "Калькулятор");
HWND E= FindWindowExA(H, 0, "Edit", 0);
 
SendMessage(E, WM_SETTEXT, 0, (LPARAM)"2");
PostMessage(H, WM_KEYUP, 0x6B, 0);
SendMessage(E, WM_SETTEXT, 0, (LPARAM)"2");
PostMessage(H, WM_KEYUP, 0xBB, 0);
 
char* m;
GetWindowTextW(E, (LPWSTR)m, sizeof(m));
Console::WriteLine(m);
Что не так?
зы. должно сделать 2+2
0
PB
Просто прогер
1281 / 1068 / 11
Регистрация: 13.03.2009
Сообщений: 2,502
21.04.2011, 20:52 #8
Цитата Сообщение от Getter Посмотреть сообщение
Что не так?
зы. должно сделать 2+2
Да не в тестовое поле вводи данные, а клацай по экранным кнопкам с числами и знаками.
0
Getter
2 / 2 / 0
Регистрация: 09.09.2010
Сообщений: 221
21.04.2011, 23:02  [ТС] #9
А если число большое очень? И почему он не считывает из текстового поля данные, а возвращает только тру или фолс?
0
PB
21.04.2011, 23:54
  #10

Не по теме:

Цитата Сообщение от Getter Посмотреть сообщение
И почему он не считывает из текстового поля данные
Напиши дядюшке Билли и спроси у него.

0
schdub
12.06.2011, 15:41
  #11

Не по теме:

Цитата Сообщение от ValeryS Посмотреть сообщение
schdub,
нет его не запушено......
и лежит не там ..........
чаго делать будем???????????
...
а завтра заказчик скажет
не хочу 2*8
а хочу 256/16
всю программу неределывать будем????
ValeryS, . Вы комментарии почитайте для начала. Это всего лишь пример техники поиска окон и взаимодействия с контролами стороннего приложения.

0
hummer_4x4
0 / 0 / 0
Регистрация: 24.08.2011
Сообщений: 94
24.08.2011, 23:09 #12
Управление калькулятором из другой программы
Подскажите что не так
0
schdub
2952 / 1297 / 239
Регистрация: 19.01.2009
Сообщений: 3,409
Завершенные тесты: 1
25.08.2011, 22:37 #13
hummer_4x4,
если ассертит в этом месте, то значит, что не были получены хендлы кнопок _hBtn2, _hBtn8, _hBtnMulOp, _hBtnEqOp (какой-то из них, а может все сразу) - разбирайтесь с функцией enumChildWindows(), там происходит их инициализация.

Данный код работает у меня под XP.
0
Falk35000
0 / 0 / 0
Регистрация: 03.01.2016
Сообщений: 1
03.01.2016, 17:40 #14
народ нужна помощь в написании управляюще проги, как узнать ид поля под заполнения в которое необходимо вводить значение и кнопок в программе, заранее спасибо
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.01.2016, 17:40
Привет! Вот еще темы с ответами:

Помогите с функцией-калькулятором. - C++
Господа программисты! Требуется срочная помощь:необходима функция-калькулятор,на вход которой подается числовая строка(-1+2-(...)*.../)а на...

Получение вывода другой программы - C++
Требуется запустить консольное приложение и получить текст, который оно вывело в stdout и stderr. Скажите, пожалуйста, как это можно...

Получить данные из другой программы. - C++
Каким образом можно получить данные из другой программы? Другая программа: вывод реализован в свой класс, вроде не стандартный. gettext...

запуск одной программы из другой - C++
Здравствуйте для начала :) Задача казалась весьма простой, мне нужно запустить одну программу используя программку которую сам написал....


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

Или воспользуйтесь поиском по форуму:
14
Yandex
Объявления
03.01.2016, 17:40
Ответ Создать тему
Опции темы

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