Что нового

Как определить ID кнопки?

fixik

Новичок
Сообщения
29
Репутация
0
Здравствуйте.
хочу автоматизировать работу нескольких программ. с одной все идет гладко, а вот с другой по списку проблема.
дело в том, что утилиты Window Info и CV.exe не видят некоторые кнопки в меню программы.
Это блок кнопок с выпадающим меню: Файл, Сервис, Справка и т.д.
пробовал решить через имитацию кликанья мышкой, но проблема при переносе скрипта на другой компьютер - сбивается прицел из-за другого разрешения экрана на нем :smile:

вообщем хотел узнать:
1. как найти ID кнопки?
2. или как симитировать нажатие мышкой, но что бы координаты не были привязаны только к моему разрешению экрана, но могла работать на любом разрешении?
3. есть ли какое другое решение для этой проблемы?
 
Автор
F

fixik

Новичок
Сообщения
29
Репутация
0
вообще полный ноль в Window Info:



и вроде как указывает скрытые в CV:



но ID не постоянен - эти значения при новом запуске программы меняются.
 
Автор
F

fixik

Новичок
Сообщения
29
Репутация
0
неужели нет никаких вариантов?
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Попробуй разобраться на примере с Блокнотом.
Код:
Run("notepad.exe")
WinWait("[Class:Notepad]")
WinMenuSelectItem("[Class:Notepad]", "", "&Справка", "&О программе")

Пункты меню - это не кнопки.
&Справка, &О программе - со знаком &.
В Блокноте Alt нажми. Теперь понятно, что & ставится перед подчеркнутой
буквой элемента меню.
Хорошо показывает пункты меню (не всегда) InqSoft Window Scanner 1.7
 
Автор
F

fixik

Новичок
Сообщения
29
Репутация
0
вот только не работает эта комманда :(
Код:
WinMenuSelectItem("[Class:Notepad]", "", "&Справка", "&О программе")
:scratch:

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

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
fixik [?]
вот только не работает
А так:
Код:
Run('Notepad.exe')
$hWin = WinWait('[Class:Notepad]', '', 3)
If $hWin Then
	ConsoleWrite(WinMenuSelectItem($hWin, '', '&Справка', '&О программе') & @CR)
	;WinMenuSelectItem('[Class:Notepad]', '', '&Справка', '&О программе')
Else
	MsgBox(16, 'Error', 'Error')
EndIf
 
Автор
F

fixik

Новичок
Сообщения
29
Репутация
0
madmasles
а так выдало ошибку - окошко Error


Добавлено:
Сообщение автоматически объединено:

прошу прощения, что сразу не пояснил - для Блокнота это работает.
я по этому принципу подставляю названия окна нужной мне программы и кнопок меню. программа запускается, но нажатия не происходит.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
fixik,
А у Вас Notepad установлен? И, если установлен, то он русский? У меня код без проблем работает. Надо сразу об этом писать.

Посмотрите в справке функции раздела User Defined Function Reference -> GuiMenu Management, если это меню.
 
Автор
F

fixik

Новичок
Сообщения
29
Репутация
0
madmasles
смотрите мое предыдущее сообщение :-[


Добавлено:
Сообщение автоматически объединено:

madmasles [?]
User Defined Function Reference -> GuiMenu Management
madmasles, там нет такого меню. в русской справке вообще нет раздела User Defined Function Reference. а в аглицкой нет и функции GuiMenu Management...
 
Автор
F

fixik

Новичок
Сообщения
29
Репутация
0
madmasles [?]
Посмотрите в справке функции раздела User Defined Function Reference -> GuiMenu Management, если это меню.
спасибо, разобрался с этой частью:
Код:
#Include <GuiMenu.au3>
$hInst = 'Моя утилита'
$sMenuName = 'Файл'
_GUICtrlMenu_LoadMenu($hInst, $sMenuName)

по крайней мере ошибок уже нет :smile:
пните в дальнейшем направлении, пожалуйста ;D
 
Автор
F

fixik

Новичок
Сообщения
29
Репутация
0
вообщем как ни старался, какие сложные комманды не применял, ничего не срабатывало.
пока не наткнулся на коммманду Send. с ее то помощью все заработало, потому как только на F10 активируется кнопка меню Файл нужной мне программы.


P.S. прошу криво не смотреть на мои потуги - это вообще первая программа в моей жизни, я абсолютно с нуля начинаю программирование. язык Autoit показался мне в этом плане самым удобным и простым.

P.P.S спасибо всем откликнувшимся.
 

c-n1x

Новичок
Сообщения
26
Репутация
1
Кстати, что бы прицел не сбивался. В Аутоинфо выбери Options > Coord Mode> Client

А в самом коде используй такие строки:
Код:
Opt("MouseCoordMode", 2)
Opt("PixelCoordMode", 2)


Тогда у тебя будет привязка координат именно к окну программы, а не к рабочему столу.
 
Верх