--}}
Новая тема
Вы не можете создавать новые темы.
Т.к. вы неавторизованы на сайте. Пожалуйста назовите себя или зарегистрируйтесь.
Список тем

WIN API & vba

Серьёзная тема
240
22
С друзьями на NN.RU
В социальных сетях
Поделиться
koloboka
03.07.2017
Добрый день.
Поговорите со мной об этом)
Можно подружить vba (эксель) и апи?
Что где полезное можно почерпнуть? Гугл конечно всегда рядом, но там как то бестолково и разрозненно.
нужно сделать программку, которая нажимает кнопки в другой программке)

ps. Сделать за деньги за меня не предлагать, хочу сама)
henry
03.07.2017
www.firststeps.ru/vba/excel/r.php?17
пишут что Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal buffer As String, ByVal nSize As Long) As Long
где GetWindowsDirectoryA как вы можете предположить - то что можно вызвать через winapi.

С поправкой на версию винды excelvba.ru/articles/WinAPI

доброго вечера
PS как нажимать кнопки - вопрос отдельный. Можно например слать сообщения нажатия мышой.
koloboka
04.07.2017
спасибо, можно не так подробно)
например, открыт калькулятор, посчитать сумму.
я описываю функцию "поиск нужного окна"
затем "послать нажатие нужной кнопки"

имя нужного окна определяю через spy,
нужную кнопку там же?

описала функции, дальше вызов одной, потом другой? что то мне кажется не заработает.. завтра попробую.

ps. неактивный форум какой то стал...
Stallone
04.07.2017
Кнопку не всегда можно найти, проще посылать сообщение о нажатии мыши по координатам
koloboka
04.07.2017
но мониторы то разные, значит и координаты разные.
то есть будет решение под один конкретный ПК
Stallone
04.07.2017
SetWindowPos
koloboka
04.07.2017
если активно не то окно , в котором нужно нажимать -что будет?
пользователи такие пользователи, не будут сидеть ждать, обязательно что нибудь еще откроют, ту же почту почитать.
А кнопка она привязана к окну( мне так видится)
Stallone
05.07.2017
Если область видима, то кнопка нажмется, если нет, то ничего не будет.
Проверяйте активное окно перед нажатием и активируйте нужное или поставьте нужное окно поверх всех. Выполнять какие то действия на UI в бэкграунде не получится.
koloboka
05.07.2017
вы сейчас как теоретик или как практик говорите?)
послать закрытие неактивному окну получилось, почему не получется нажать кнопку?
Stallone
05.07.2017
Чтобы нажать кнопку, нужно её найти, найти можно по заголовку или по координатам. Если у кнопки нет заголовка (чуть реже чем всегда так) - то вы не отличите её от других кнопок никак. Если окно свернуто - у кнопки нет координат.
koloboka
05.07.2017
да, так и есть.
окошко с кнопками нашла по заголовку, дальше послала sendmessage, а кнопка не нажимается((
henry
04.07.2017
Допустим, у вам нужно сделать эксель скрипт, который "сам" считает примеры на отдельно запущенном калькуляторе, т.е. кнопочки в запущенном калькуляторе нажимаются не вами, а скриптом.
Исходя их этого, предложенная логика верна: найти окно по "названию", сделать так, чтобы там возникло сообщение нажатия кнопки.
Ну да, именно так - раз, за разом.
Теоретически посылаемые события могут перепутаться, и строго говоря, следует проверять состояние калькулятора перед посылкой следующего сообщения. Но для демки сойдёт поставить задержку в 100-500 мс перед посылкой каждого сообщения.
Как сообразить по поводу координат... Либо путём исследования выяснить конкретные координаты. Это подойдёт, потому что обычно система работает под конкретными настройками дисплея.
Либо нахождением контрола в окне - это уж загуглите как именно.
В системах тестирования юзер-интерфейсов есть подход, когда тестер сначала "учит" тестовую утилиту совершая операции и, тем самым, генерируя нужные сообщения, которые затем воспроизводятся в кейзах. Можно позаимствовать.
koloboka
04.07.2017
спасибо)
первый шаг сделан, находить и закрывать нужное приложение получилось.
следующий шаг -нажать кнопку.
но тут нарисовалась другая проблема, нет у меня spy и установить нельзя, печалька..

ps. последний абзац вашего сообщения ( про тестовую утилиту) не поняла вообще((
henry
04.07.2017
Про тестирование: запускается некоторое приложение А, умеющее перехватывать события нажатия мышкой на кнопки. При перехвате фиксируются параметры.
Например нажали левой кнопкой скажем 123 pixel по высоте и 443 pixel по горизонтали - в лог записывается операция: left mouse down, 123, 443. И так далее.
В результате получается запись последовательности событий. Теперь эту последовательность можно "проиграть" другим приложением Б, которое будет последовательно брать параметры и на основе их создавать и отправлять сообщения в калькулятор.
Про Spy: либо поискать качнуть, либо поискать аналоги, либо написать самодельный: в основе наверняка лежит тот же перехват сообщений.
koloboka
05.07.2017
шаг два.
spy я все таки нашла. а как его использовать то? Запустила нужную мне программу, вижу там те самые кнопки - 12345"ок" button и родительское окно.
посылаю команду send с параметрами ( родительское окно, 0, button, ok) -и ничего..
henry
05.07.2017
Что значит как использовать. Вы же уже используете. Не понимаю что за команда send. Если речь о SendMessage то что означают перечисленные параметры? Вроде как второй параметр не должен быть нулем...
koloboka
05.07.2017
сейчас я больше смотрю на него чем использую)
сложно объяснять письменно.
Сейчас я определяю хендл основного окна, затем иду ниже по дереву, чтобы добраться до кнопок например.
Но в spy же уже прописан какой то набор цифр перед кнопкой-что это? Это число отличается от полученного программно хендла.
koloboka
06.07.2017
да, sendmessage.
с ним разобралась.
тестировала нажатие кнопки на приложении Блокнот. Открыла, набрала буквы и нажала на крестик( закрыть). Появилось окно с тремя кнопками, сохранить, не сохранять, отмена. Я программно и хотела нажать на одну из кнопок.
Определила хендл родительского окна и посылала туда нажатие кнопки. Потом открыла глаза, посмотрела хорошо, а там еще несколько "веточек" до кнопки надо пройти.

Вобщем спасибо, что поговорили со мной) я теперь хоть чуть чуть понимаю, как это работает))
diamant
01.08.2017
если посылать в калькулятор сообщения о нажатиях клавиш (WM_CHAR или типа того), то можно им управлять, не заботясь о тамошних кнопках, которые могут быть разными в разных версиях ОС и различаться в разных режимах самого калькулятора (простой, научный, программистский)
koloboka
01.08.2017
но калькулятор должен быть активным окном?

с условным "калькулятором" задача решена через post/send message. дальше уперлась в нажатие сочетания кнопок, альт + p и выбор выпадающего меню. В калькуляторе это стандартное меню, с ним все получается. А в условно "моей" программе это не меню, а видимо статус бар.
И вторая проблема-есть чек боксы. В зависимости от выбранного пункта меняются окна для заполнения. Вроде галочка проставляется в нужное окно, а зависимые окна не меняются. видимо обновлять что то нужно..
diamant
02.08.2017
насчёт чекбокса - если вы шлёте сообщение о клике, то, возможно, этого недостаточно, лучше слать BM_SETCHECK

насчёт меню тоже - вместо посылания низкоуровнего сообщения нажатия клавиш, можно посылать непосредственно WM_COMMAND или WM_MENUCOMMAND, а идентификаторы пунктов выяснить с помощью Spy
koloboka
02.08.2017
не, не прокатывает, так и делаю.
точка визуально ставится, а окна не меняются.
про меню вы меня не поняли, оно выглядит как меню, а по факту как то по другому реализовано. И спу не помогает( или не умею)..
Новая тема
Вы не можете создавать новые темы.
Т.к. вы неавторизованы на сайте. Пожалуйста назовите себя или зарегистрируйтесь.
Список тем
Последние темы форумов
Открытие Бизнеса в ОАЭ. Полное сопровождение

Здравствуйте! Меня зовут Александра, и я открою для Вас Компанию в ОАЭ с полное юридическим сопровождением. Большой опыт работы в этой...

Полипропилен PP 9240. SIBEX PP Т082/IM5. ПНД FL7000. Распродажа склада

Полипропилен Бален 030, PP 9240. Т_082. ПНД FL7000. Первичное сырьё. Распродажа склада. Распродажа первичных полимеров: - Красители...
Цена: 110 руб.

Оформление резидентских виз в ОАЭ. ВНЖ Дубай

Здравствуйте! Меня зовут Александра, и я помогу оформить ВНЖ и резидентскую визу в ОАЭ. Расскажу все о переезде в ОАЭ. Выполню услугу...

Полипропилен Бален 030, ПП 250/270. Первичное сырьё Распродажа склада.

Полипропилен Бален 030, ПП 250/270. Распродажа склада. Распродажа первичных полимеров: - Красители суперконцентраты (СКП), мастербатч...
Цена: 120 руб.

Программист 1С НПП ПРО-М
от 110 000 руб.
Высшее образование, стаж работы 3-5 лет, полная занятость
Frontend-разработчик Profit Search
40000 -
50000 руб.
Стаж работы 3-5 лет, частичная занятость
Программист-разработчик Full-Stack ГК "Kolobox"
70000 -
100000 руб.
Высшее образование, стаж работы более 5 лет, полная занятость
Разработчик .net Profit Search
70000 -
100000 руб.
Неполное среднее образование, стаж работы 3-5 лет, полная занятость