1

Тема: AHK: Переименование Static1, Static2 и тд

Всем привет.
Столкнулся с вопросом, есть ли возможность назначить другое имя контрола GUI элементам?
Все элементы по стандарту называются Static№ где №-номер элемента контрола.

Суть вопроса:
Есть ли возможность назначить другое имя контрола определенному объекту?

2

Re: AHK: Переименование Static1, Static2 и тд

Да, вы можете задать для контрола ассоциированную переменную через опцию v:

Gui, Add, Text, w200 vMyText, test
Gui, Show

GuiControlGet, MyText
MsgBox, % MyText

Или можно назначить переменную, в которой будет сохранён хендл контрола, через опцию hwnd:

Gui, Add, Text, w200 hwndhMyText, test
Gui, Show

GuiControlGet, text,, %hMyText%
MsgBox, % text

Второй способ удобнее тем, что контрол определяется однозначно, и в командах GuiControl/GuiControlGet не нужно указывать имя/номер GUI.

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

3 (изменено: Clannad5, 2021-05-16 17:50:14)

Re: AHK: Переименование Static1, Static2 и тд

teadrinker

Я просто делаю кнопки графическим способом, примерно выходит такой код:


  Gui, add, picture, w0 h0 x379 y145 gLabel vButtonDefault, ButtonDefault.png
  Gui, add, picture, w0 h0 x379 y148 gLabel, ButtonPressed.png

Label:
   GuiControl, hide, ButtonDefault
   While GetKeyState("lbutton", "P")
   sleep 0
   GuiControl, show, ButtonDefault
    MouseGetPos, , , WhichWindow, WhichControl
    ControlGetPos, x, y, w, h, %WhichControl%, ahk_id %WhichWindow%
	if WhichControl = static2
Msgbox, Кнопка нажата
Return

WhichControl - хранит контрол элемента, в данной примере это static2.
WindowsSpy тоже покажет static2.

Таким образом я определяю нажатие кнопки, чтобы при отжатие курсор находился непосредственно в координатах кнопки.
Поэтому я хотел изменить именно имя контрола со static2 на имя, к примеру ButtonPressed, чтобы WindowSpy тоже определял имя контрола как ButtonPressed.
Вот то, что на скрине - мне нужно изменить. Такая возможность существует или же нет?
https://i.imgur.com/qO3Ft2X.png

Или я могу как-то вашим способом заменить стандартное определение контрола?
Смысл в этой приблуде лишь в том, чтобы если человек случайно нажал на кнопку, но увёл курсор с кнопки, смог избежать нажатия кнопки.

4

Re: AHK: Переименование Static1, Static2 и тд

Такая возможность существует или же нет?

Наверно существует, но результат не будет стоить усилий. Вам придётся установить хук на некоторые winapi функции.

Или я могу как-то вашим способом заменить стандартное определение контрола?

MouseGetPos также может определять хендл контрола вместо его ClassNN, смотрите параметр flag.

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

5

Re: AHK: Переименование Static1, Static2 и тд

Clannad5
Добавить проверку при отпуске клавиши, если контрол не является кнопкой просто Return.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

6

Re: AHK: Переименование Static1, Static2 и тд

__Михаил__
Контрол является изображением.

7

Re: AHK: Переименование Static1, Static2 и тд

Он тоже имеет своё уникальное имя в программе, я так делал в своей проге.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101