1

Тема: AHK: Выбор нужного контрола

Вопрос такой: "Есть много контролов Edit1, как обратиться к необходимому?". Заранее спасибо!

2

Re: AHK: Выбор нужного контрола

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

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

3

Re: AHK: Выбор нужного контрола

В настройках программы WinRar.

4 (изменено: teadrinker, 2017-07-06 04:09:40)

Re: AHK: Выбор нужного контрола

На самом деле нет. Откройте окно настроек и запустите такой код:

WinWait, ahk_class #32770 ahk_exe WinRAR.exe
WinGet, List1, ControlList
WinGet, List2, ControlListHwnd
arr1 := StrSplit(List1, "`n", "`r")
arr2 := StrSplit(List2, "`n", "`r")

Loop % arr1.MaxIndex()
   if InStr(arr1[A_Index], "Edit")
      str .= arr1[A_Index] . A_Tab . arr2[A_Index] . "`n"

MsgBox, % str

Потом откройте по очереди все вкладки окна и снова запустите.

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

5 (изменено: svoboden, 2017-07-06 06:54:02)

Re: AHK: Выбор нужного контрола

teadrinker, как я могу узнать необходимый хэдл, не переходя к нужной вкладке? Нашел, что ID в этих контролов всегда одинаковый (определил с помощью AutoIt Window Info), может, с помощью его можно обратиться к контролу, только у меня не выходит. Мой вопрос: "Я хочу обратиться к необходимому контролу Edit1, не переходя к нужной вкладке". Такое можно сделать, например, с помощью хэдла или текста нужного буттона.

6 (изменено: teadrinker, 2017-07-06 07:33:22)

Re: AHK: Выбор нужного контрола

Так можно определить hwnd, если известен ID:

EditID := 110  ; записать определённый ID

WinExist("ahk_class #32770 ahk_exe WinRAR.exe")
WinGet, List1, ControlListHwnd
Loop, parse, List1, `n, `r
   if DllCall("GetDlgCtrlID", Ptr, A_LoopField) = EditID && hwnd := A_LoopField
      break
   
MsgBox, % "hwnd = " . hwnd

Только проблема в том, что пока вкладка, в которой контрол находится, не открыта, он и не существует, у меня, по-крайней мере, так. То есть сначала все вкладки нужно вручную прощёлкать.

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

7

Re: AHK: Выбор нужного контрола

svoboden, а зачем вам это надо?
Через командную строку нельзя решить?

8

Re: AHK: Выбор нужного контрола

+Malcev, у WinRAR богатый CLI и есть консольная версия.

9

Re: AHK: Выбор нужного контрола

А если так уж нужны настройки, то их можно импортировать из файла, либо напрямую править реестр.

10 (изменено: svoboden, 2017-07-06 20:53:30)

Re: AHK: Выбор нужного контрола

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

teadrinker, почти то, что надо, но как же так не может определить хэдл сразу, ID же вроде есть.

11

Re: AHK: Выбор нужного контрола

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

Импортирйте реестр-файл напрямую в winrar и ничего перезапускать не придётся.

12

Re: AHK: Выбор нужного контрола

svoboden пишет:

teadrinker, почти то, что надо, но как же так не может определить хэдл сразу, ID же вроде есть.

ID есть, а самого контрола ещё нету. Видимо, по соображениям экономии ресурсов создаётся только в момент обращения к соответствующей вкладке.

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

13

Re: AHK: Выбор нужного контрола

Первый раз сталкиваюсь с DlgCtrlID. Что они дают? По ClassNN находить не то же самое?

Или смысл в том что например во вкладках таба ClassNN могут повторятся, а ID внутри класса контролов - нет?

svoboden
Активируйте нужную вкладку и ищите.

Чтобы не перебирать вкладки, а выбрать нужную сразу по номеру, замените 5 в примере ниже числом на 1 меньшим нужного номера (0 выбирает первую и т.д.):


SendMessage, 0x130C, 5,, SysTabControl321, Установки ahk_class #32770 ahk_exe WinRAR.exe
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

14

Re: AHK: Выбор нужного контрола

serzh82saratov пишет:

Первый раз сталкиваюсь с DlgCtrlID. Что они дают? По ClassNN находить не то же самое?

Значения ClassNN там не постоянные, а ID всегда одинаковые.

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

15

Re: AHK: Выбор нужного контрола

Если смотреть список контролов, то да. А если посмотреть MouseGetPos, , , , ControlNN, то всегда одинаковый.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

16

Re: AHK: Выбор нужного контрола

И для каких это контролов, я вижу что у кнопок DlgCtrlID повторяются в одном окне, это только для Edit?

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

17

Re: AHK: Выбор нужного контрола

При этом id кнопок может совпадать с id Edit, тогда в твоём коде надо проверять класс.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

18

Re: AHK: Выбор нужного контрола

Я не изучал подробно. Действительно, повторяются, наверно разные только для одного класса.

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

19

Re: AHK: Выбор нужного контрола

EditID := 110  ; записать определённый ID

WinExist("ahk_class #32770 ahk_exe WinRAR.exe")
WinGet, List1, ControlListHwnd
Loop, parse, List1, `n, `r
{
   WinGetClass, WinClass, % "ahk_id" A_LoopField
   if DllCall("GetDlgCtrlID", Ptr, A_LoopField) = EditID && WinClass = "Edit" && hwnd := A_LoopField
      break
}
   
MsgBox, % "hwnd = " . hwnd
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

20

Re: AHK: Выбор нужного контрола

serzh82saratov пишет:

И для каких это контролов, я вижу что у кнопок DlgCtrlID повторяются в одном окне, это только для Edit?

В классе кнопок повторяются.
А описание какое то совсем скудное.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

21

Re: AHK: Выбор нужного контрола

Ну, надо проверять, одинаковые или разные у них родительские окна, может, от этого зависит ещё. Главное, что у одного и того же контрола постоянное ID. И, насколько я понимаю, его определяет разработчик, поэтому в принципе может хоть всем одинаковые раздать.

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

22

Re: AHK: Выбор нужного контрола

svoboden пишет:

Нашел, что ID в этих контролов всегда одинаковый (определил с помощью AutoIt Window Info)

А AutoIt Window Info показывает это ID для всех контролов подряд?

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

23 (изменено: svoboden, 2017-07-24 18:49:37)

Re: AHK: Выбор нужного контрола

Почти везде показывает, их еще можно отлавливать как сообщения "PostMessage 0x111" с помощью spy. Вообще заметил, что эти ID, что-то типа акселераторов в exe файлах.

24 (изменено: svoboden, 2017-07-24 18:49:23)

Re: AHK: Выбор нужного контрола

Вы не подскажете, так работает для всех окон настроек, например, в настройках программы uTorrent такой вариант не работает:

SendMessage, 0x130C, 5,, SysTreeView321, Настройки ahk_class #32770 ahk_exe uTorrent.exe

25 (изменено: Malcev, 2017-07-07 03:53:34)

Re: AHK: Выбор нужного контрола

А он там и не должен работать.
Сообщения разные. В винрар:
https://msdn.microsoft.com/en-us/librar … s.85).aspx
А в юторрент:
https://msdn.microsoft.com/en-us/librar … s.85).aspx