1 (изменено: stuermer, 2023-07-03 20:25:40)

Тема: AHK: Элементы управления диалога

Есть такая программа-напоминалка: http://drive-software.com/atomicalarmclock.html
При нажатии на "напомнить позже" выходит меню в выбором времени. См. скриншот. Нужно сделать, чтобы при нажатии на "напомнить позже" выполнялся скрипт, который сам выберет время 10 мин и нажмет ОК. Причем окно напоминания может находиться в любом месте экрана, т.е. координаты не постоянные.

На "напомнить позже" нет элемента управления (контрола). На кнопке ОК он есть. В скрытом меню WinSpy находит еще 2 контрола, для двух пунктов меню - "3 мин" и "22:00". Но они оба не подходят. См. скриншот. Чтобы выбрать 10 мин можно нажать "1" когда меню открыто.

Как это сделать?

Заготовка:

; AAClock alarm
#IfWinActive ahk_class TfrmOnAlarm
	
	~LButton Up:: ; left mouse button clicked
	if instr(ControlType, "TMemo") ; нажатие в центре окна

		Send {1} ; = select 10 min
		ControlClick, TButton1, A ; press OK
	Return

#IfWinActive

1 - до нажатия на "напомнить позже"
https://i.imgur.com/yXn8Eey.png
2 - после нажатия на "напомнить позже"
https://i.imgur.com/k79CIce.png
3 - WinSpy
https://i.imgur.com/dotWhBR.jpg

2

Re: AHK: Элементы управления диалога

Попробуйте так:

~LButton::
    if accObj := AccObjectFromPoint(childId) {
        ToolTip % "name: "  . accObj.accName(childId) . "`n"
                . "value: " . accObj.accValue(childId)
    }
    Return

AccObjectFromPoint(ByRef childId = "", x = "", y = "") {
    static VT_DISPATCH := 9, F_OWNVALUE := 1, h := DllCall("LoadLibrary", "Str", "oleacc", "Ptr")
    AccObject := 0
    (x = "" || y = "") ? DllCall("GetCursorPos", "Int64P", pt) : pt := x & 0xFFFFFFFF | y << 32
    VarSetCapacity(varChild, 8 + A_PtrSize*2, 0)
    if DllCall("oleacc\AccessibleObjectFromPoint", "Int64", pt, "PtrP", pAcc, "Ptr", &varChild) = 0
        childId := NumGet(varChild, 8, "UInt"), AccObject := ComObject(VT_DISPATCH, pAcc, F_OWNVALUE)
    Return AccObject
}

Или name, или value может быть "Напомнить позже". Если нет — значит не повезло.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: Элементы управления диалога

Всплыв. подсказка показывает:

name: frmOnAlarm
value:

4

Re: AHK: Элементы управления диалога

Проверьте, появляется ли в других местах frmOnAlarm. Если нет, то можно на это ориентироваться.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5 (изменено: stuermer, 2023-07-04 16:24:47)

Re: AHK: Элементы управления диалога

На карандашике показывает то же самое, поэтому нельзя различить, что нажато.
То же самое делает WinSpy (не путать с Window Spy). Он и контролы подсвечивает.
https://kumisystems.dl.sourceforge.net/ … y-1.0.3.7z

Упрощаем задачу: Нажимаем мышью по постоянным координатам, т.е. окно нельзя перемещать. Как проверить, что меню открылось, чтобы не подбирать Sleep?

6 (изменено: serzh82saratov, 2023-07-04 16:30:02)

Re: AHK: Элементы управления диалога

stuermer пишет:

т.е. окно нельзя перемещать

В ахкспай,  control click можно проверить по координатам, они относительны окну, и не важно где оно на экране.

stuermer пишет:

что меню открылось, чтобы не подбирать Sleep

Винвайт.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

7

Re: AHK: Элементы управления диалога

1- не знал, что относительные координаты, попробую спасибо.
2- это подменю не имеет своих ahk атрибутов. По цвету можно попробовать, если не белый, то открылось.

8

Re: AHK: Элементы управления диалога

stuermer пишет:

это подменю не имеет своих ahk атрибутов

Сомневаюсь что это так.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

9 (изменено: stuermer, 2023-07-05 14:10:05)

Re: AHK: Элементы управления диалога

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

frmOnAlarm
ahk_class TfrmOnAlarm
ahk_exe AtomicAlarmClock.exe
ahk_pid 5432

Это атрибуты parent окна.

10

Re: AHK: Элементы управления диалога

HWND у него другой.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

11

Re: AHK: Элементы управления диалога

Скиньте два скрина ахкспай, parent и меню.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

12 (изменено: stuermer, 2023-07-05 17:54:20)

Re: AHK: Элементы управления диалога

Если следить за мышью и открыть меню:
https://i.imgur.com/wkU7pSY.jpg

Parent:
https://i.imgur.com/qOcULH1.jpg

13

Re: AHK: Элементы управления диалога

Это не ахкспай.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

14

Re: AHK: Элементы управления диалога

stuermer пишет:

ahk_class TfrmOnAlarm

Вы не видите что ahk_class разный?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

15

Re: AHK: Элементы управления диалога

Я думал вы имеете ввиду Window Spy от AHK. А что такое ahkspy? Гуглом не нашел, можно ссылку?

Вижу, что ahk_class разный, так как написать проверку, что меню открыто?

Меню открывать все равно только мышью по координатам? У менЮ ведь нету Window Title.

16

Re: AHK: Элементы управления диалога

stuermer пишет:

Гуглом не нашел, можно ссылку?

Странный у вас гугл. Ссылка у меня в подписи.

https://i.imgur.com/CG95QNl.png

stuermer пишет:

У менЮ ведь нету Window Title

Представим что есть, как бы выглядел ваш код?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

17

Re: AHK: Элементы управления диалога

1 - если искать с пробелом "ahk spy", то не находит, попробуйте.
2 -

WinWaitActive, WinTitle,, 2

18

Re: AHK: Элементы управления диалога

stuermer пишет:

ahkspy? Гуглом не нашел

Тут нет пробела.

stuermer пишет:

WinWaitActive, WinTitle,, 2

Почитайте про WinTitle. И WinWaitActive скорее всего не подходит в данном случае.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

19 (изменено: stuermer, 2023-07-06 15:34:50)

Re: AHK: Элементы управления диалога

serzh82saratov
Уже нашел, просто написал почему не находило.
Попробую позже.

20 (изменено: stuermer, 2023-07-06 19:04:01)

Re: AHK: Элементы управления диалога

После нажатия на кнопку "напомнить позже", меню открылось:

https://i.imgur.com/g9e1d8m.jpg

Parent Window:

https://i.imgur.com/y11XZSY.jpg

21 (изменено: stuermer, 2023-07-06 19:18:34)

Re: AHK: Элементы управления диалога

При активном окне напоминания есть 2 варианта:
1 - нажатие ОК, это работает.
2 - нажатие на пункт меню и открытие меню.

т.е. по одному событию надо различить на что нажато было.

; AAClock alarm
#IfWinActive ahk_class TfrmOnAlarm
	~LButton Up::  
	MouseGetPos, , , , ControlType
	if instr(ControlType, "TButton1")  ; нажатие ОК
		Send {Alt Down}{Tab}{Alt Up}
	
	if (нажатие на пункт меню и меню открылось.)
		
		Send {1} ; = select 10 min
		ControlClick, TButton1, A ; press OK
	Return
#IfWinActive

22 (изменено: stuermer, 2023-07-06 19:45:56)

Re: AHK: Элементы управления диалога

Заработало:

	~LButton Up:: 
	MouseGetPos, , , , ControlType
	if instr(ControlType, "TButton1")
		{
			Send {Alt Down}{Tab}{Alt Up}
			Return
		}
	
	Else 
		{
			WinWaitActive, ahk_id 0x1d1594
			Send {1} ; = select 10 min
			; ControlClick, TButton1, A ; press OK
			Return
		}

23

Re: AHK: Элементы управления диалога

Не работает, ahk_id каждый раз разный.

24 (изменено: stuermer, 2023-07-06 21:48:31)

Re: AHK: Элементы управления диалога

Вот есть специальная библиотека для работы с GUI меню. Может кто-то пробовал?
https://www.autohotkey.com/boards/viewt … p;t=104999

Тогда можно 3 кнопочки нарисовать на окне напоминалки при каждом появлении окна: +10 мин, +30 мин и +1 ч.
И соответственно при нажатии на каждую автоматически открывать меню, выбирать нужный пункт и жать ОК.

25

Re: AHK: Элементы управления диалога

WinMenuSelectItem не работает:

	If instr(ControlType, "TMemo") ; клик в центре
		{
			WinMenuSelectItem, A,, 1&
			; Send {1} ; = select 10 min
			; ControlClick, TButton1, A ; press OK
			Return
		}