Проблема со сворачиванием/разворачиванием окна

Помощь в написании скриптов
marusa122
Posts: 135
Joined: 22 Mar 2023, 07:48

Проблема со сворачиванием/разворачиванием окна

Post by marusa122 » 27 Aug 2023, 06:48

Добрый день. Есть два скрипта Autohotkey. Первый при нажатии на кнопку в браузере запускает программу, показывает ее на секунду и сворачивает окно программы. Второй - разворачивает ранее свернутое первым скриптом окно этой программы, нажимает кнопку в этом окне и снова ее сворачивает.
Проблема - скрипты работают через раз. Если программа запускается впервые после включения ПК - первый скрипт ее открывает, свертывает и снова развертывает (хотя должен только свернуть). А второй скрипт нажимает нужную кнопку, не разворачивая окно программы (хотя должен сначала ее развернуть, а потом нажимать кнопку в окне программы). Как исправить скрипты так, чтобы они работали стабильно при любом взаимодействии с программой - как при первом после включения ПК запуске, так и при повторном запуске?
Первый скрипт:

Code: Select all

Esc:
{
	appWinName := "ahk_exe program1.exe"
 
		Click, 111, 111
		Sleep, 500
		Send +{Tab}
		Send {Enter}
		Sleep, 500
 	WinWait, %appWinName%
		WinActivate, %appWinName%
		WinRestore, %appWinName%
		Sleep, 100
		WinMinimize, %appWinName%
		Return
}
Второй скрипт:

Code: Select all

Tab:
{
	appWinName := "ahk_exe program1.exe"
 
		IfWinNotExist, %appWinName%
		
		{
			MsgBox, 16, %ProgramName%, Окно Program1 не найдено!, 3
			Return
		}
 
		WinActivate, %appWinName%
		WinRestore, %appWinName%
		Sleep, 100
		ControlClick, Button21, %appWinName%
		WinMinimize, %appWinName%
		Return
}

mcl
Posts: 361
Joined: 04 May 2018, 16:35

Re: Проблема со сворачиванием/разворачиванием окна

Post by mcl » 28 Aug 2023, 18:23

marusa122 wrote: Добрый день. Есть два скрипта Autohotkey.
Проблему воспроизвести не удалось, так что посоветую общие моменты пальцем в небо:

1. Из документации к WinActivate: „If the window is minimized and inactive, it is automatically restored prior to being activated.“ То есть, WinRestore после WinActivate вызывать необязательно (а то и нежелательно, если целевое окно до сворачивания было максимизировано).

2. В документации к WinMinimize предлагают альтернативу: „If a particular type of window does not respond correctly to WinMinimize, try using the following instead: [PostMessage...]“.

3. Маловероятно, но стоит попробовать включить обнаружение скрытых окон: DetectHiddenWindows, On

Под скриптами вы имеете в виду вышеописанные блоки кода из одного файла, или эти блоки кода находятся в разных файлах и запускаются порознь? В первых строках одно двоеточие, так что это простые метки, а не горячие клавиши — это только здесь, или так и надо? Просто метки, в отличие от горячих клавиш, могут выполняться при запуске ahk-файла — код выполнится до строки с WinWait и будет ждать появления искомого окна, а потом наломает дров не спросясь.

Post Reply

Return to “Помощь”