1 (изменено: umbrella, 2020-01-22 17:31:27)

Тема: AHK: Переключатель в GUI

Доброго времени суток, пытался найти в интернете решение интересующей меня задачи, но безуспешно(
Ранее много полезного находил на этом форуме и решил впервые обратиться за помощью!
Задача следующая: У меня есть несложный бот под разные разрешения экрана, и бот для каждого разрешения экрана - это отдельный файл, разумеется, с различным кодом. Есть ли возможность совместить 2 версии кода в 1 файл и сделать переключатель для выбора между ними через GUI?
Если кто хорошо разбирается, покажу в виде примерного кода как я это вижу, прошу подскажите возможно ли вообще подобное реализовать и как.
Если не знаете сами как это написать, однако знаете что это возможно, буду благодарен и за ссылку на информацию.

 
Gui, Add, Button, x292 y9 w120 h20 AAA , Выбрать разрешение
Gui, Show, w462 h100, zxcqwe
Gui, Color, 2e6b3c
return
F1::
Loop{
Код бота под разрешение 1920x1080
}

между 2мя кодами какая-то перегородка или что-то в этом роде)0)

Loop{
Код бота под разрешение 800х600
}

return
AAA:
	Ну и тут ещё 2 активные кнопки под выбор разрешения, например 1920x1080 и 800x600. 
return

P.S Да, я новичёк в ахк)) не ругайте сильно за перегородку, просто я не совсем могу представить как при помощи 1 хоткея ссылаться на ту или иную версию кода выбранную через интерфейс.

2

Re: AHK: Переключатель в GUI

Думаю переключатель не нужен, это лучше определять автоматически.

SysGet, MP, MonitorPrimary
SysGet, Mon, Monitor, %MP%
mon_Width := MonRight - MonLeft
mon_Height := MonBottom - MonTop
mon_WH = %mon_Width%x%mon_Height%


2::
	Loop{
		If mon_WH = 1920x1080
		{
			MsgBox Код бота под разрешение 1920x1080
		}
		Else If mon_WH = 800х600
		{
			MsgBox Код бота под разрешение 800х600
		}
		
	} 
	return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.32.00 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

3 (изменено: umbrella, 2020-01-22 20:18:00)

Re: AHK: Переключатель в GUI

serzh82saratov Спасибо!

А если возвращаться к переключателю, его можно реализовать только путем присваивания переменной определенного значения через кнопку в GUI, и после просто через if их разделить внутри как бы одной программы? Или же можно две независимых друг от друга программы поместить?

Интересуюсь этим потому что есть планы переключать код не только в зависимости от разрешения. + сами версии кода сходятся в названиях переменных и связок "Goto - Label".

Конечно, труда не составит просто переименовать всё, однако интересен сам вопрос, возможно 2(или более) независимых программы уместить в 1 файл и выбирать какую именно программу исполнять через GUI. Или это как раз тот случай где ahk упирается в отсутствие многопоточности?

4

Re: AHK: Переключатель в GUI

Два кода одновременно выполнятся не будут. Многопоточности добитсья можно с танцем с бубном, но это уже другая тема, которая тут где то есть.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.32.00 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

5 (изменено: umbrella, 2020-01-24 13:52:53)

Re: AHK: Переключатель в GUI

serzh82saratov
Не нужно чтобы они выполнялись одновременно, нужно просто чтобы они были внутри 1 файла, а какой именно выполнять можно было выбрать через GUI.
В принципе вариант через if неплохое решение, просто интересно есть ли другие методы.

6 (изменено: stealzy, 2020-01-24 21:31:05)

Re: AHK: Переключатель в GUI

Есть универсальный метод - реверсите алгоритм, по которому программа располагает элементы управления на экране и используете его. Изменяя размер окна программы или разрешение монитора можно понять например, что один элемент находится по смещению 100 пикселей выше и 50 пикселей левее центра экрана (A_ScreenWidth//2-50, A_ScreenHeight//2-100) или окна, а другой находится на расстоянии четверти ширины от правой границы и на 50 пикселей ниже верхней. В случае окна используются клиентские координаты.

Win7x64 up to 2018, AutoHotkey 1.1.30.00

7

Re: AHK: Переключатель в GUI


i := 1
resolutions := ["1920x1080", "800x600"]
resolution := resolutions[i]

Gui, Add, Button, w111 gButton vButton, %resolution%
Gui, Show, w200 h200
return
	
Button:
	GuiControlGet, Button  
	resolution := resolutions[i = resolutions.count() ? (i := 1) : ++i]
	GuiControl, , Button, %resolution%
	return

1::
	Loop
	{
		Gosub %resolution%
		If GetKeyState("2", "P")
			Break
	}
	return
	
1920x1080:
	MsgBox, , , код для 1920x1080, 0.2
	return
	
800x600:
	MsgBox, , , код для 800x600, 0.2
	return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.32.00 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui