1

Тема: AHK: разворачивание окна при открытии файла

У программы Illustrator уже много версий подряд есть невылеченный баг, который раздражет многих людей. При двойном щелчке на файле, ассоциированном с программой, основное окно делает restore (переходит из развёрнутого на весь экран состояния в обычное). Лечить его, похоже, в Adobe не собираются, но наверняка можно сделать костыль.
Как заставить AHK разворачивать окно обратно, если был запущен файл, открывающийся в Иллюстраторе?
Забавно ещё, что при перетаскивании файла мышкой этого бага нету, также как и при открытии через меню программы.

2

Re: AHK: разворачивание окна при открытии файла

Вы написали

При двойном щелчке на файле, ассоциированном с программой, основное окно делает restore (переходит из развёрнутого на весь экран состояния в обычное)

Тогда как кликнуть на файл  ассоциированный.
Для этого и функция может быть такая?

Win10 x64

3

Re: AHK: разворачивание окна при открытии файла

Раз есть разница при перетаскивании, посмотрите Свойства папки -> Типы файлов. Что там прописано для двойного щелчка?

4

Re: AHK: разворачивание окна при открытии файла

ypppu пишет:

Раз есть разница при перетаскивании, посмотрите Свойства папки -> Типы файлов. Что там прописано для двойного щелчка?

Полагаю, вы имеете в виду "Параметры папок". Стандартное значение, "открывать двойным, выделять одним".
Дело не в особых настройках среды, повторяю, дело в самом Иллюстраторе и его врождённом пороке.
Вот, погуглите из любопытства:
illustrator open restores window site:forums.adobe.com

5

Re: AHK: разворачивание окна при открытии файла

Я говорю не про "параметры папок". В окне проводника нажмите Сервис -> Свойства папки. Либо Панель управления -> Свойства папки. Среди зарегистрированных типов файлов найдите нужное расширение. Проверьте, какой сценарий прописан на первый пункт контекстного меню.

6

Re: AHK: разворачивание окна при открытии файла

ypppu, на разных виндах это всё по-разному выглядит. На 8-ке сейчас пошарил — наверно, только в реестре можно увидеть эту команду.

7

Re: AHK: разворачивание окна при открытии файла

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

Вероятно, здесь собака и порылась.

8

Re: AHK: разворачивание окна при открытии файла

А в чём тут подвох?

9

Re: AHK: разворачивание окна при открытии файла

chegr пишет:

<...> Как заставить AHK разворачивать окно обратно, если был запущен файл, открывающийся в Иллюстраторе?
Забавно ещё, что при перетаскивании файла мышкой этого бага нету, также как и при открытии через меню программы.

Скомпилировать ahk-скрипт, ассоциировать с ним файл, открываемый в Иллюстраторе. Скриптом запустить Иллюстратор с именем файла в качестве параметра, затем развернуть на весь экран при помощи WinMaximize

10

Re: AHK: разворачивание окна при открытии файла

YMP пишет:

А в чём тут подвох?

Возможно, отсылается "неправильное" либо ненужное оконное сообщение. Как вариант, отловить, определить "правильное" и посылать его уже с помощью AutoHotkey.

11

Re: AHK: разворачивание окна при открытии файла

А можно коммандой WinMove постоянно держать окно иллюстратора близким к максимизированному.

12

Re: AHK: разворачивание окна при открытии файла

Не могу найти достаточно "культурного" решения без мельканий. Предлагаю пользоваться обычным Ctrl+O и перетаскиванием.

13

Re: AHK: разворачивание окна при открытии файла

Вариант с отловом ненужного оконного сообщения и перебивкой его выглядит очень логично, но я пока не соображу, как это провернуть технически. Проверил, при запуске файла из explorer действительно запускается второй процесс, который потом самоликвидируется. Окно меняет размер ещё до закрытия этого процесса.
Полагаю, что культурного решения действительно не отыскать.
Вариант Malcev'а с WinMove, к сожалению, слишком костыльный Это как периодически жимкать Win+up. КПД низковат получается.
Irbis предлагает костыль поцелесообразнее. Как можно отловить имя файла, который запускается? Плюс меня её смущает, что это будет отдельный процесс. Можно ли не колдовать отдельный скрипт, а сделать интеграцию с одним, основным?
ypppu, мельтешение меня почти не смущает. У меня некоторые операции автоматизированы именно физическим беганьем по файловым меню, которые даже с отрицательным SetKeyDelay заметны на экране. Можете ли вы подсказать такой способ, отличный от варианта Irbis'а, или такой же?

14

Re: AHK: разворачивание окна при открытии файла

В таком случае предлагаю комбинированный вариант.

Irbis пишет:

Скомпилировать ahk-скрипт, ассоциировать с ним файл, открываемый в Иллюстраторе. Скриптом запустить Иллюстратор с именем файла в качестве параметра

При запуске скрипт проверяет, не запущен ли уже один экземпляр процесса Illustrator. Если нет - открывает файл нормально. Если уже существует один процесс Illustrator, то в его окне вызывается меню Ctrl+O, в строке "Имя файла" забивается полный путь к файлу (берётся из переменной) и нажимается Enter.

Как узнать, какой объект Проводника находится под курсором - недавно обсуждалось на форуме.

15

Re: AHK: разворачивание окна при открытии файла

А что если просто делать WinMaximize каждый раз при запуске файла? Формально это замена действия на противоположное (постоянный Maximize вместо Restore), но именно такое поведение в данном случае и нужно, потому что я всегда пользуюсь этим окном именно в развёрнутом состоянии. Осталось отследить момент, когда именно запускается файл...
А можно ещё и так — сработать, когда процесс дублируется, дождаться закрытия дубликата и уже потом развернуть. Как-то с использованием WinWaitActive?

16

Re: AHK: разворачивание окна при открытии файла

ypppu пишет:

Как узнать, какой объект Проводника находится под курсором - недавно обсуждалось на форуме.

Это только для XP работает.

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

17

Re: AHK: разворачивание окна при открытии файла

Win7x64
Сдаётся мне, что при таком раскладе только компилировать скрипт и передавать в Иллюстратор файл через него с последующим Maximize. Можно ли перехватить имя файла таким образом?

18

Re: AHK: разворачивание окна при открытии файла

По-моему, при привязке к скрипту, если открыть файл через проводник, полное имя файла будет в переменной %1%

19

Re: AHK: разворачивание окна при открытии файла

teadrinker пишет:
ypppu пишет:

Как узнать, какой объект Проводника находится под курсором - недавно обсуждалось на форуме.

Это только для XP работает.

Ой, я что-то поспешил. Этого и не понадобится, ведь имя файла передаётся скрипту с праметром %1%. Правильно
Irbis заметил.

P. S.: Чтобы не ковыряться с настройкой иконок ai-файлов, можно в скомпилированном скрипте заменить иконку.

20

Re: AHK: разворачивание окна при открытии файла

Вариант Malcev'а с WinMove, к сожалению, слишком костыльный smile Это как периодически жимкать Win+up. КПД низковат получается.

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

21

Re: AHK: разворачивание окна при открытии файла

chegr пишет:

Забавно ещё, что при перетаскивании файла мышкой этого бага нету

Irbis пишет:

Скомпилировать ahk-скрипт, ассоциировать с ним файл, открываемый в Иллюстраторе.

Может просто послать файл сообщением drag`n drop

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

22

Re: AHK: разворачивание окна при открытии файла

Malcev пишет:

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

Я часто щёлкаю по заголовку окна — сбрасываю и устанавливаю фокус в окно.
Поэтому когда окно не развёрнуто, а только выглядит им, почти каждый щелчок по заголовку сдвигает окно.
Тот режим, который вы предлагаете использовать, я долгое время использовал — вручную раздвинул границы окна так, чтобы они визуально совпадали с границами развёрнутого окна и работал. Даже нашёл специальную утилиту для точного изменения размера окна! Но микросдвижки бесят гораздо сильнее, чем постоянная необходимость разворачивать окно Поэтому я отказался от такого способа и стандартный размер окна у меня теперь очевидно меньше, чем экран. Тогда я машинально нажимаю Win+вверх и разворачиваю его. Но это всё равно раздражает. Я не прошу помочь мне найти обходной путь, уже перепробовал многое. Мне нужно именно развёрнутое окно

serzh82saratov пишет:

Может просто послать файл сообщением drag`n drop

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

Irbis пишет:

По-моему, при привязке к скрипту, если открыть файл через проводник, полное имя файла будет в переменной %1%

Вы можете ткнуть меня носом в ту часть мануала, где есть работающий пример такой конструкции? Или показать такой пример здесь? У меня не получается дружить с хелпом АХК Я не могу найти %1% ни поиском, ни глазами.

ypppu пишет:

P. S.: Чтобы не ковыряться с настройкой иконок ai-файлов, можно в скомпилированном скрипте заменить иконку.

Провидческий комментарий! Опять же, можете посоветовать, что именно мне искать в хелпе, чтобы сделать так?

23

Re: AHK: разворачивание окна при открытии файла

chegr пишет:

<...>Вы можете ткнуть меня носом в ту часть мануала, где есть работающий пример такой конструкции? Или показать такой пример здесь? У меня не получается дружить с хелпом АХК Я не могу найти %1% ни поиском, ни глазами.<...>

Во встроенной справке AHK раздел называется parameters passed into a script
Простой пример:

MsgBox Кол-во параметров %0%`nПервый параметр - %1%

24

Re: AHK: разворачивание окна при открытии файла

Я часто щёлкаю по заголовку окна — сбрасываю и устанавливаю фокус в окно.
Поэтому когда окно не развёрнуто, а только выглядит им, почти каждый щелчок по заголовку сдвигает окно.

Так даже при желании не сдвините.

#IfWinActive Adobe Illustrator CC
loop
{
   WinMove, Adobe Illustrator CC, , 0, 0, 1920, 1050   
}

25 (изменено: serzh82saratov, 2013-12-26 21:24:41)

Re: AHK: разворачивание окна при открытии файла

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

В чём проблема определения координат заголовка?

Тем более что сообщение отсылается в координаты относительно окна, а заголовок в окне всегда на одном месте.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

26

Re: AHK: разворачивание окна при открытии файла

Если ещё актуально...
Компилируете этот код; полученный файл (например, AI_launcher.exe) помещаете в папку с Illustrator.
Находим любой файл с расширением *.ai, выбираем "Открыть с помощью". Указываем путь к AI_launcher.exe и ставим галочку "всегда использовать эту программу".
P. S.: Возможно, потребуется немного скорректировать код под Вашу версию Illustrator.

param1 = 1
IfWinNotExist, ahk_class Illustrator9 ;Если программа ещё не запущена
    Run, "C:\Program Files\Adobe\Adobe Illustrator CS\Support Files\Contents\Windows\Illustrator.exe" %1%
Else DropFilesA(%param1%, "ahk_class Illustrator9") ;Если программа уже запущена
Return


DropFilesA( FileList, wTitle="", Ctrl="", X=0, Y=0, NCA=0 )
{
   offset := 20
   VarSetCapacity( DROPFILES, StrLen(FileList) + offset + 2)
   Loop, parse, FileList, `n, `r
   {
      StrPut(A_LoopField, &DROPFILES + offset, StrLen(A_LoopField), "CP0")
      offset += StrLen(A_LoopField) + 4
      NumPut(0, &DROPFILES + offset - 4, "UInt")   ; разделяем нулями пути
   }
   NumPut(0, &DROPFILES + offset, "UInt")   ; завершиться должно 2-мя нулями подряд
   nSize := offset + 4
   pDP:=&DROPFILES
   NumPut(20, pDP+0, "UInt")
   NumPut(X, pDP+4, "UInt")
   NumPut(Y, pDP+8, "UInt")
   NumPut(NCA, pDP+12, "UInt")
   NumPut(0, pDP+16, "UInt")
   hDrop := DllCall( "GlobalAlloc", UInt, 0x42, UInt, nSize, Ptr )
   pData := DllCall( "GlobalLock", Ptr, hDrop, Ptr )
   DllCall( "RtlMoveMemory", Ptr, pData, Ptr, pDP, UInt, nSize )
   DllCall( "GlobalUnlock", Ptr, hDrop )
   PostMessage, 0x233, hDrop, 0, %Ctrl%, %wTitle% ; WM_DROPFILES := 0x233
}