1 (изменено: svoboden, 2017-03-19 00:12:49)

Тема: AHK: Скрыть активное окно

Добрый день! Вопрос такой, как запустить скрытое окно в нужной программе?
Например, код:

Run, "C:\Program Files\AutoHotkey\SciTE\SciTE.exe", , ,PID ; Запускает SciTEAutoHotkey и высчитывает его PID
WinWait, ahk_pid%PID% ; Ждет PID процесса
PostMessage, 0x111, 106, %PID% ; Запускает окно "Сохранение файла"
WinWait, Сохранение файла  ; Ждет окно "Сохранение файла"
WinHide, Сохранение файла  ; Скрывает окно "Сохранение файла"

Команда "WinHide", скрывает окно только тогда, когда окно появится. Мне надо, чтобы окно запустилось сразу скрытым. Заранее спасибо!

2

Re: AHK: Скрыть активное окно

О появлении нового окна AutoHotkey заранее не знает. Скрыть окно можно быстро, но не мгновенно, поэтому получатся мелькания.

3

Re: AHK: Скрыть активное окно

Можно временно сделать активное окно поверх всех окон.

PostMessage, 0x111, 106, %PID%    ; Запускает окно "Сохранение файла"
WinSet, AlwaysOnTop, On, ahk_pid %PID%
WinWait, Сохранение файла            ; Ждет окно "Сохранение файла"
WinHide, Сохранение файла            ; Скрывает окно "Сохранение файла"
WinSet, AlwaysOnTop, Off, ahk_pid %PID%

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

SetHookShellProc() {
	DllCall("RegisterShellHookWindow", "UInt", A_ScriptHwnd)
	OnMessage(DllCall("RegisterWindowMessage", "str", "SHELLHOOK"), "ShellProc")
}
ShellProc(nCode)  {
	if ((nCode = 1) || (nCode = 2)) {
		NewWin()
	} else if ((nCode = 4) || (nCode = 32772))
		ActivateWin()
}
NewWin() {
	DetectHiddenWindows, on
	SetWinDelay, 0
	WinHide, Сохранение файла
}

4 (изменено: svoboden, 2017-10-11 23:56:04)

Re: AHK: Скрыть активное окно

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

5 (изменено: stealzy, 2016-10-23 18:33:11)

Re: AHK: Скрыть активное окно

Я ошибся, второй вариант не работает с модальными окнами.
Вот так работает у меня:

DetectHiddenWindows, on
SetWinDelay, 0
PostMessage, 0x111, 106, %PID%    ; Запускает окно "Сохранение файла"
Loop 100
{
	WinHide Сохранить как  ;WinSet Transparent, 0, Сохранить как
	Sleep 5
}

6 (изменено: svoboden, 2017-02-03 13:07:19)

Re: AHK: Скрыть активное окно

Видно, не судьба. Скрипт так же скрывает это окно, мелькая. Ладно, что-нибудь придумаю.

7

Re: AHK: Скрыть активное окно

Забыл DetectHiddenWindows и SetWinDelay. Поправил.

8 (изменено: svoboden, 2017-10-12 00:01:01)

Re: AHK: Скрыть активное окно

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

Вот мой код полностью, если интересно:
Тут я хотел по нажатию скрипта, просто создать файл ahk.

#NoEnv  ; Отключает переменное окружения, для повышения производительности скриптов.
Run, "C:\Program Files\AutoHotkey\SciTE\SciTE.exe", , ,PID ; Запускает SciTEAutoHotkey и высчитывает его PID.
WinWait, ahk_pid%PID%   ; Ждет PID процесса.
PostMessage, 0x111, 106, %PID%   ; Запускает окно "Сохранение файла".
DetectHiddenWindows, on    ; Выполняет скрипт даже тогда когда окно скрыто.
SetWinDelay, 0  ; Задает задержку после каждой оконной команды.
WinWait, Сохранение файла  ; Ждет окно "Сохранение файла".
WinHide, Сохранение файла   ; Скрывает окно "Сохранение файла".
WinSet, Transparent, 0, Сохранение файла   ; Делает окно "Сохранение файла", прозрачным.
sleep 200   ; Ставит паузу в 200 мс.        
Loop % 10  ; Повторяет 10 раз случайную букву русского языка.
{
   Random, AsCode, Asc("а"), Asc("я") ; Записывает в переменную случайные буквы русского языка.
 Name .=Chr(AsCode)
}
SendMessage, 0xC2, , &Name, Edit1, Сохранение файла  ; Посылает переменную %Name% в Edit1, окна "Сохранение файла".
SendMessage, 0xF5, 0,0, Button1, Сохранение файла ;  Нажимает 3 раза для надежности левой кнопкой мыши в Button1, окна "Сохранение файла".
SendMessage, 0xF5, 0,0, Button1, Сохранение файла           
SendMessage, 0xF5, 0,0, Button1, Сохранение файла           

9

Re: AHK: Скрыть активное окно

А почему бы просто не использовать атрибут Hide в качестве третьего аргумента для команды Run?

10

Re: AHK: Скрыть активное окно

WinSet Transparent - это лишь альтернатива для WinHide, нет смысла использовать одновременно.

просто создать файл ahk

Почему не FileAppend? Затем просто открыть в SciTE.

11 (изменено: svoboden, 2017-06-12 08:52:48)

Re: AHK: Скрыть активное окно

Мне надо было сначала создать файл, и чтобы его можно было сразу редактировать в SciTE. А про не имеет смысла, а как объяснить WinSet Transparent идет после WinWait, и окно запускается сразу прозрачным? Тут все имеет какой-то смысл.

12 (изменено: svoboden, 2017-01-18 23:49:04)

Re: AHK: Скрыть активное окно

Да не, атрибут hide, в этой программе не работает.
Даже если и работал бы, окно все равно мелькает.

13

Re: AHK: Скрыть активное окно

http://forum.script-coding.com/viewtopi … 06#p109206

14

Re: AHK: Скрыть активное окно

Что за форум еще?