Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
70 / 47 / 5
Регистрация: 10.01.2017
Сообщений: 1,849
1

Нажать кнопку на калькуляторе с SendMessage

30.08.2020, 19:12. Показов 1183. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте,

Пытаюсь эмулировать нажатие кнопки на калькуляторе. Так как реальных кнопок класса Button в калькуляторе нет, и как подсказывали в предыдущих темах скорее всего кнопки нарисованные.
Смотрю через spy++ какие сообщения посылаются в окно калькулятора при нажатии к примеру на цифру 8:
C++
1
000201C6  S  WM_PARENTNOTIFY fwEvent:WM_LBUTTONDOWN xPos:191 yPos:493
Посылаю такое же сообщение в окно Калькулятора:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
HWND calculator_HWND = FindWindowW(NULL, L"Калькулятор");  //Получили HWND калькулятора
 
 
WPARAM my_wparam;
 
    wchar_t* wchar_wparam = (wchar_t*)&my_wparam;
    wchar_wparam[1] = 0;                                                      //в данном случае 0
    wchar_wparam[0] = WM_LBUTTONDOWN;                          //Нажатие Левой кнопки мыши
 
LPARAM my_lparam;
    wchar_t* wchar_laparam = (wchar_t*)&my_lparam;
    wchar_laparam[0] = 160;                                                    //Координата X, координаты почему то немного не совпадают, то есть 160 соответствует 191, которое уже приходит в окно калькулятора
    wchar_laparam[1] = 395;                                                    //Коордманта Y
 
 
SendMessage(Parent_HWND, WM_PARENTNOTIFY, my_wparam, my_lparam);
Но в самом калькуляторе реакции никакой.

Добавлено через 1 час 32 минуты
Точнее самое сообщение в окно приходит. После запуска кода, в spy++ видно, что приходит аналогичное сообщение, но сама цифра 8 - не нажимается.
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.08.2020, 19:12
Ответы с готовыми решениями:

Как нажать кнопку в калькуляторе на впс сервере?
Во многих темах написано как сделать эмуляцию кнопками мыши,клавиатуры,по цвету,хэндлу. Но на впс...

програмно нажать TAB через SendMessage
Как правильно передать нажатие? SendMessage(hwnd,WM_CLOSE,0,0); окно закрывает. SendMessage...

Как можно нажать программно нажать на кнопку, у которой нет id?
Как можно нажать программно нажать на кнопку, у которой нет id?? В html она прописывается так: <a...

Как описать в C++Builder 6 в калькуляторе кнопку +/-?
Как описать в C++Builder 6 в калькуляторе кнопку +/-? Спасибо! Минус ставлю, когда надо...

11
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
30.08.2020, 21:47 2
Цитата Сообщение от Optimus11 Посмотреть сообщение
Точнее самое сообщение в окно приходит. После запуска кода, в spy++ видно, что приходит аналогичное сообщение, но сама цифра 8 - не нажимается.
И показывает те же координаты, которые ты отправил?
C++
1
SendMessage(Parent_HWND, WM_PARENTNOTIFY, MAKEWPARAM(WM_LBUTTONDOWN, 0), MAKELPARAM(160, 395));
Кстати, а почемо 160-395, а не 191-493?
1
70 / 47 / 5
Регистрация: 10.01.2017
Сообщений: 1,849
30.08.2020, 21:49  [ТС] 3
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
И показывает те же координаты, которые ты отправил?
C++
1
SendMessage(Parent_HWND, WM_PARENTNOTIFY, MAKEWPARAM(WM_LBUTTONDOWN, 0), MAKELPARAM(160, 395));
Кстати, а почемо 160-395, а не 191-493?
Почему то, если я прямо указываю 191 и 492 в lparam, то в spy++ сами координаты приходят больше.
160 и 395 - я подобрал, чтобы в spy++ приходили именно 191 и 492. Не знай почему так.
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
30.08.2020, 21:52 4
А просто WM_LBUTTONDOWN не пробовал отправлять?
0
70 / 47 / 5
Регистрация: 10.01.2017
Сообщений: 1,849
30.08.2020, 21:55  [ТС] 5
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
А просто WM_LBUTTONDOWN не пробовал отправлять?
Без wparam и lparam ?
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
30.08.2020, 22:01 6
Цитата Сообщение от Optimus11 Посмотреть сообщение
Без wparam и lparam ?
https://docs.microsoft.com/en-... buttondown

Добавлено через 3 минуты
Возможно, придётся использовать SendInput
1
70 / 47 / 5
Регистрация: 10.01.2017
Сообщений: 1,849
30.08.2020, 22:05  [ТС] 7
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
https://docs.microsoft.com/en-... buttondown

Добавлено через 3 минуты
Возможно, придётся использовать SendInput
Если за место message отправлять просто WM_LBUTTONDOWN - тоже не реагирует.
SenInput да можно использовать, но он эмулирует сам курсор, что менее удобно.
Как же калькулятор все таки обрабатывает эти сообщения. Прям загадка.
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
30.08.2020, 22:23 8
Цитата Сообщение от Optimus11 Посмотреть сообщение
Как же калькулятор все таки обрабатывает эти сообщения. Прям загадка.
Это .NET, там всё по-другому работает

Добавлено через 14 минут
Кстати, а ты активируешь окно калькулятора прежде, чем отправить ему сообщение? Возможно они просто не отрабатываются на неактивном окне.
1
70 / 47 / 5
Регистрация: 10.01.2017
Сообщений: 1,849
30.08.2020, 22:30  [ТС] 9
Я пробывал и в неактивном, и в активном и поедварительно по кнопкам кликал, и все равно ноль рескции.
То есть, я запускал код с паузой, открывал справа spy, слева калькклятор, кликал по 8ке, в spy наблюдал сообщен е с wm_WM_PARENTNOTIFY , через несколько секунд срабатывал код, и прям под это сообщение в spy++ приходило абсолютно точно такое же. Но от калькулятора ноль реакции.
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
30.08.2020, 22:44 10
-----
0
70 / 47 / 5
Регистрация: 10.01.2017
Сообщений: 1,849
31.08.2020, 10:48  [ТС] 11
А не подскажите, что за код сообщений в spy++ под названием R:
Нажать кнопку на калькуляторе с SendMessage


Что то не понятно, что это за ответное сообщение для SendMessage. Ответное от кого ?
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
31.08.2020, 10:56 12
Цитата Сообщение от Optimus11 Посмотреть сообщение
А не подскажите, что за код сообщений в spy++ под названием R:
Это то что возвращает функция SentMessage
Return value
Type: LRESULT

The return value specifies the result of the message processing; it depends on the message sent.
При обработке сообщения часто требуется возвращать какое-то значение, которое использует тот, кто отправил это сообщение.
Например, обработчик WM_CREATE должен вернуть 0 или -1

Return value
Type: LRESULT

If an application processes this message, it should return zero to continue creation of the window. If the application returns –1, the window is destroyed and the CreateWindowEx or CreateWindow function returns a NULL handle.
Соответственно, spy++ отображает это значение под названием R
1
31.08.2020, 10:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.08.2020, 10:56
Помогаю со студенческими работами здесь

Как создать кнопку delete в калькуляторе 1С?
ПОМОГИТЕ! здравствуйте , требуется написать калькулятор на 1с . возникли проблемы только с кнопкой...

SendMessage на кнопку в чужой программе вызывает диалог сохранения файла и приехали
Нахожу handle нужного окна, тыкаю в нем нужные кнопки, но вот приходится тыкнуть кнопку, которая...

Как описать в C++Builder 6 в калькуляторе кнопку Вкл/Вык?
Как описать в C++Builder 6 в калькуляторе кнопку Вкл/Вык? Спасибо!

Нажать на кнопку
Приветствую Помогите плиз,как в продолжение этого кода , можно заполнить input(0) значением...

Нажать на кнопку
Здраствуйте. Как можно осуществить следующую вещь. Вот взять допустим рамблер как программно можно...

Нажать на кнопку
Здравствуйте, есть страница на которой всплывает окно с вариантами ответов html код этого окна...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru