1

Тема: AHK: GUI запоминает свои размеры-положение в ini

Здравствуйте.
Скажите - можно ли заставить GUI окно - запоминать положение и размеры окна - перед закрытием (в ini-файл) ?

2 (изменено: __Михаил__, 2020-08-14 00:51:18)

Re: AHK: GUI запоминает свои размеры-положение в ini

Можно.

GuiClose:
GuiEscape:
If (A_GuiWidth > 0) and (A_GuiHeight > 0)	; запрет 0 значений иначе проблемы:
{
 W = %A_GuiWidth%
 H = %A_GuiHeight%
}
Win10x64, AHK v1.1.33.09 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

3

Re: AHK: GUI запоминает свои размеры-положение в ini

Name - Титул окна GUI.

WinGetPos,X,Y,W,H, %Name% ahk_class AutoHotkeyGUI
Win10x64, AHK v1.1.33.09 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

4

Re: AHK: GUI запоминает свои размеры-положение в ini

__Михаил__, а как запустить этот скрипт?

Запускают скрипт:

WinGetPos,X,Y,W,H, %Безымянный — Блокнот% ahk_class AutoHotkeyGUI

GuiClose:
GuiEscape:
If (A_GuiWidth > 0) and (A_GuiHeight > 0)	; запрет 0 значений иначе проблемы:
{
 W = %A_GuiWidth%
 H = %A_GuiHeight%
}

Пишет ошибку:
Error at line1
The following variable name contains an illegal character

5

Re: AHK: GUI запоминает свои размеры-положение в ini

Megamen

1) Синтаксическая ошибка, не нужно ставить знаки '%'. Нужно указать титул окна как есть.
Я привёл переменную, которую можно подставить (Name).

2) Если это весь скрипт - то он не будет работать. Необходимо ещё создать окно Gui.

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

6 (изменено: Megamen, 2020-08-15 01:42:28)

Re: AHK: GUI запоминает свои размеры-положение в ini

__Михаил__,
Сделал вот так:
Создал окно Gui, убрал знаки '%'


Gui, Show, Restore w300 h200

WinGetPos,X,Y,W,H, окно.ahk, ahk_class AutoHotkeyGUI

GuiClose:
GuiEscape:
If (A_GuiWidth > 0) and (A_GuiHeight > 0)	; запрет 0 значений иначе проблемы:
{
 W = %A_GuiWidth%
 H = %A_GuiHeight%
}

Просто отображается окно - и больше ничего.

Но его невозможно мышкой растягивать и непонятно, как оно записывает размеры-координаты в ini.

7 (изменено: Alectric, 2020-08-15 13:33:06)

Re: AHK: GUI запоминает свои размеры-положение в ini

IniWrite
IniRead

GUI

Справка по GUI пишет:

Resize: позволяет изменять размер окна и разрешает кнопку максимизации в строке заголовка. Чтобы избежать разрешения кнопки максимизации, задайте +Resize -MaximizeButton.

Gui,+resize
Gui, Show,w300 h200
Win 7 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

8 (изменено: Megamen, 2020-08-16 08:24:51)

Re: AHK: GUI запоминает свои размеры-положение в ini

Alectric, я поправил скрипт.
Теперь он такой:

Gui,+resize
IniRead, OutputVar, %A_ScriptDir%\параметры.ini, ширина, W
IniRead, OutputVar, %A_ScriptDir%\параметры.ini, высота, H
Gui, Show,w300 h200

WinGetPos,X,Y,W,H, окно.ahk, ahk_class AutoHotkeyGUI

GuiClose:
GuiEscape:
If (A_GuiWidth > 0) and (A_GuiHeight > 0)	; запрет 0 значений иначе проблемы:
{
 W = %A_GuiWidth%
 H = %A_GuiHeight%
IniWrite, Это новое значение, %A_ScriptDir%\параметры.ini, ширина, W
IniWrite, Это новое значение, %A_ScriptDir%\параметры.ini, высота, H
}

Теперь окно может растягиваться, но ничего в ini - не записывает.

Post's attachments

параметры.ini 26 b, 1 downloads since 2020-08-16 

You don't have the permssions to download the attachments of this post.

9

Re: AHK: GUI запоминает свои размеры-положение в ini

Переменные и выражения

Справка пишет:

A_GuiWidth
A_GuiHeight Данные переменные при обращении к ним из подпрограммы GuiSize содержат ширину и высоту окна GUI, инициировавшего подпрограмму. Относятся они к размерам клиентской области, которая включает области заголовка, меню и рамку.

Переменные A_GuiWidth, A_GuiHeight не будут работать в любом месте скрипта, а только при использовании метки GuiSize.

GuiSize:
W:=a_guiwidth
H:=a_guiheight
return
Megamen пишет:

IniRead, OutputVar, %A_ScriptDir%\параметры.ini, ширина, W
IniRead, OutputVar, %A_ScriptDir%\параметры.ini, высота, H

Здесь запись значений происходит в одну и туже переменную. И далее эти переменные нигде не используются. Их нужно подставить вместо размера создаваемого окна (w300 h200).

Megamen пишет:

IniWrite, Это новое значение, %A_ScriptDir%\параметры.ini, ширина,W
IniWrite, Это новое значение, %A_ScriptDir%\параметры.ini, высота,H

Здесь вместо "Это новое значение" нужно подставлять переменные которые содержат соответствующие размеры окна.

Чтобы проверить содержимое переменной можно использовать MsgBox.

MsgBox,%W%

Чтобы программа закрывалась при закрытии окна нужно добавить "ExitApp".

Gui,+resize
IniRead, OutputVar, %A_ScriptDir%\параметры.ini, ширина, W
IniRead, OutputVar, %A_ScriptDir%\параметры.ini, высота, H
Gui, Show,w300 h200
return

GuiSize:
W:=a_guiwidth
H:=a_guiheight
return

GuiClose:
GuiEscape:
IniWrite, Это новое значение, %A_ScriptDir%\параметры.ini, ширина,W
IniWrite, Это новое значение, %A_ScriptDir%\параметры.ini, высота,H
exitapp
Win 7 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

10

Re: AHK: GUI запоминает свои размеры-положение в ini

Alectric,  вот я написал такую вещь:


Gui,+resize
IniRead, W, %A_ScriptDir%\параметры.ini, ширина, W
IniRead, H, %A_ScriptDir%\параметры.ini, высота, H
IniRead, X, %A_ScriptDir%\параметры.ini, коордX, X
IniRead, Y, %A_ScriptDir%\параметры.ini, коордY, Y

Gui, Show,x%X% y%Y% w%W% h%H%
return


WinGetPos,X,Y,W,H, 111.ahk, ahk_class AutoHotkeyGUI

GuiSize:
W:=a_guiwidth
H:=a_guiheight
X:=a_guix
Y:=a_guiy

return

GuiClose:
GuiEscape:
IniWrite, %W%, %A_ScriptDir%\параметры.ini, ширина,W
IniWrite, %H%, %A_ScriptDir%\параметры.ini, высота,H
IniWrite, %X%, %A_ScriptDir%\параметры.ini, коордX,X
IniWrite, %Y%, %A_ScriptDir%\параметры.ini, коордY,Y
exitapp

Но не работает этот код - не хочет сохранять координаты окна в ini (все время пустые места там оставляет).

Post's attachments

параметры.ini 126 b, 1 downloads since 2020-08-16 

You don't have the permssions to download the attachments of this post.

11

Re: AHK: GUI запоминает свои размеры-положение в ini

Справка пишет:

GuiContextMenu [v1.0.36+]:
A_GuiX и A_GuiY, содержащие координаты X и Y того места в окне, где скрипт должен отобразить меню, например:

Эти две переменные не относятся к метке GuiSize.
Тогда проще использовать WinGetPos.
Также лучше использовать уникальный идентификационный номер (HWND/handle) для работы с окнами вместо его имени.

Gui,+resize
Gui,+hwndhMainWinID ; берем хендл окна в переменную hMainWinID
IniRead, W, %A_ScriptDir%\параметры.ini, ширина, W
IniRead, H, %A_ScriptDir%\параметры.ini, высота, H
IniRead, X, %A_ScriptDir%\параметры.ini, коордX, X
IniRead, Y, %A_ScriptDir%\параметры.ini, коордY, Y

Gui, Show,x%X% y%Y% w%W% h%H%
return


GuiClose:
GuiEscape:
WinGetPos,X,Y,W,H,ahk_id %hMainWinID%
IniWrite, %W%, %A_ScriptDir%\параметры.ini, ширина,W
IniWrite, %H%, %A_ScriptDir%\параметры.ini, высота,H
IniWrite, %X%, %A_ScriptDir%\параметры.ini, коордX,X
IniWrite, %Y%, %A_ScriptDir%\параметры.ini, коордY,Y
exitapp
Win 7 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

12

Re: AHK: GUI запоминает свои размеры-положение в ini

Alectric пишет:

Тогда проще использовать WinGetPos

А вот и не угадали. WinGetPos даёт внешние размеры окна, а Gui, Show устанавливает внутренние. Всё же надо приобрести привычку проверять скрипт перед тем, как постить. Вы удивитесь, но я так всегда делаю.

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

13 (изменено: Alectric, 2020-08-17 06:51:55)

Re: AHK: GUI запоминает свои размеры-положение в ini

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

Win 7 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

14

Re: AHK: GUI запоминает свои размеры-положение в ini

Alectric, спасибо - вроде все работает.

15

Re: AHK: GUI запоминает свои размеры-положение в ini

WinGetPos даёт внешние размеры окна, а Gui, Show устанавливает внутренние.

Запустил - размеры сохраняет загружает, а то что на пару пикселей сдвинулось не заметил.

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

16

Re: AHK: GUI запоминает свои размеры-положение в ini

Gui,+resize
Gui,+hwndhMainWinID ; берем хендл окна в переменную hMainWinID
IniRead, W, %A_ScriptDir%\параметры.ini, ширина, W
IniRead, H, %A_ScriptDir%\параметры.ini, высота, H
IniRead, X, %A_ScriptDir%\параметры.ini, коордX, X
IniRead, Y, %A_ScriptDir%\параметры.ini, коордY, Y

Gui, Show,x%X% y%Y% w%W% h%H%
return

guisize:
W:=a_guiwidth
H:=a_guiheight
return

GuiClose:
GuiEscape:
WinGetPos,X,Y,,,ahk_id %hMainWinID%
IniWrite, %W%, %A_ScriptDir%\параметры.ini, ширина,W
IniWrite, %H%, %A_ScriptDir%\параметры.ini, высота,H
IniWrite, %X%, %A_ScriptDir%\параметры.ini, коордX,X
IniWrite, %Y%, %A_ScriptDir%\параметры.ini, коордY,Y
exitapp

Win 7 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

17

Re: AHK: GUI запоминает свои размеры-положение в ini

А так не сработает, если выйти из скрипта через трей-меню.

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

18

Re: AHK: GUI запоминает свои размеры-положение в ini

OnExit.

Win 7 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

19 (изменено: Megamen, 2020-08-20 06:23:13)

Re: AHK: GUI запоминает свои размеры-положение в ini

Alectric, ясно.
А как сразу - без дополнительных корректировок в виде

guisize:
W:=a_guiwidth
H:=a_guiheight
return

надежно без смещения установить размеры и координаты gui (одной командой при открытии) ?

20

Re: AHK: GUI запоминает свои размеры-положение в ini

Или можно "guisize:"  каким-то другим способом ввести - без знака ":" (не циклом, а простой командой) ?

Например guisize, W:=a_guiwidth, H:=a_guiheight

21

Re: AHK: GUI запоминает свои размеры-положение в ini

Gui,+resize
Gui,+hwndhMainWinID ; берем хендл окна в переменную hMainWinID
IniRead, W, %A_ScriptDir%\параметры.ini, ширина, W
IniRead, H, %A_ScriptDir%\параметры.ini, высота, H
IniRead, X, %A_ScriptDir%\параметры.ini, коордX, X
IniRead, Y, %A_ScriptDir%\параметры.ini, коордY, Y

Gui, Show
winmove,ahk_id %hMainWinID%,,x,y,w,h
return


GuiClose:
GuiEscape:
WinGetPos,X,Y,W,H,ahk_id %hMainWinID%
IniWrite, %W%, %A_ScriptDir%\параметры.ini, ширина,W
IniWrite, %H%, %A_ScriptDir%\параметры.ini, высота,H
IniWrite, %X%, %A_ScriptDir%\параметры.ini, коордX,X
IniWrite, %Y%, %A_ScriptDir%\параметры.ini, коордY,Y
exitapp
Win 7 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

22

Re: AHK: GUI запоминает свои размеры-положение в ini

А зачем именно хэндл нужно брать в переменную ?
Можно использовать title, вместо хэндла ?

23 (изменено: Megamen, 2020-08-20 07:10:55)

Re: AHK: GUI запоминает свои размеры-положение в ini

Alectric, напишите свой адрес электронной почты.
Хочу спросить о другом скрипте.

24 (изменено: Alectric, 2020-08-20 16:51:57)

Re: AHK: GUI запоминает свои размеры-положение в ini

Megamen пишет:

зачем именно хэндл

Затем что это:

Alectric пишет:

уникальный идентификационный номер (HWND/handle)

100% скрипт не перепутает окно с другим, если title совпадет, или если ты несколько таких же окон создашь, запустишь один и тот-же скрипт несколько раз.

Megamen пишет:

Можно использовать title, вместо хэндла ?

Можно.

Megamen пишет:

Хочу спросить о другом скрипте.

Спрашивай на форуме. Знаешь, как бывает: сегодня у меня есть настроение помочь, а завтра нет.

Win 7 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

25

Re: AHK: GUI запоминает свои размеры-положение в ini

Alectric пишет:

Хочу спросить о другом скрипте.
Спрашивай на форуме.

Я денег заплачу.

26 (изменено: Alectric, 2020-08-21 17:26:09)

Re: AHK: GUI запоминает свои размеры-положение в ini

Megamen пишет:

Я денег заплачу.

Мне зарплаты хватает. Возможно тут есть кто-то кому не хватает, пиши им.

Win 7 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

27

Re: AHK: GUI запоминает свои размеры-положение в ini

Megamen, если хотите заказать скрипт за плату, у нас есть Коммерческий раздел. Если хотите обратиться к кому-либо лично, есть чат (кнопка вверху справа).

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