26

Re: AHK: Скрытие заголовка приложения VLC Player

Надо еще окну вернуть первоначальное его отображение:

DllCall("dwmapi\DwmSetWindowAttribute", "Ptr", win, "UInt", 2, "Int*", 0, "UInt", 4)

27

Re: AHK: Скрытие заголовка приложения VLC Player

Malcev, спасибо! Установил переключение одной клавишей, но возврат окна в исходное положение не работает после попытки заключить сценарий в функцию. Укажите на ошибку, пожалуйста.


f1::
ShowControl("Ace Player", "VLC MSW video")
return

ShowControl(wintitle, ctrl)
{
SetTitleMatchMode 2
if Toggle:=!Toggle
{
   win := WinExist(wintitle)
   WinGet, ActiveControlList, ControlList
   Loop, Parse, ActiveControlList, `n
   {
      if InStr(A_LoopField, ctrl)
      {
         DllCall("dwmapi\DwmSetWindowAttribute", "Ptr", win, "UInt", 2, "Int*", 1, "UInt", 4)
         ControlGetPos, CtrlX, CtrlY, CtrlW, CtrlH, %A_LoopField%
         WinSet, Region, % CtrlX "-" CtrlY " W" CtrlW " H" CtrlH
         break
      }
}
} else {
   WinSet, Region, , % wintitle
   DllCall("dwmapi\DwmSetWindowAttribute", "Ptr", win, "UInt", 2, "Int*", 0, "UInt", 4)
}
}
Win10x64, AHK v1.1.25

28

Re: AHK: Скрытие заголовка приложения VLC Player

Объявите переменные toggle и win как статические.

Статические переменные: чтобы сохранить значение переменной между вызовами, ее можно объявить статической

http://www.script-coding.com/AutoHotkey/Functions.html

29

Re: AHK: Скрытие заголовка приложения VLC Player

Malcev, спасибо, работает! А по какому признаку в данном примере становится ясно, что переменные необходимо объявить статическими? Иными словами, как понять необходимость сохранения их значений между вызовами?

Win10x64, AHK v1.1.25

30

Re: AHK: Скрытие заголовка приложения VLC Player

У вас в коде при каждом обращении к функции проверяется if Toggle:=!Toggle.
То есть, если мы не будем сохранять текущее значение toggle, то результат всегда будет 1.

toggle := ""
Toggle:=!Toggle
msgbox % Toggle

Переменная же win высчитывается только в первом случае, хотя используется в обоих:

DllCall("dwmapi\DwmSetWindowAttribute", "Ptr", win, "UInt", 2, "Int*", 0, "UInt", 4)

31

Re: AHK: Скрытие заголовка приложения VLC Player

Подскажите, пожалуйста, как задать нужный размер и расположение на экране выделенному контролу? В данном случае, это изображение видеоряда в плеере VLC. Окну VLC задаю нужный мне размер и расположение следующей командой:

WinMove, ahk_class QWidget , , 1180, 628, 870, 490

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


ShowControl("Ace Player", "VLC MSW video")

ShowControl(wintitle, ctrl){
   static Toggle
   win := WinExist(wintitle)
   WinGet, ActiveControlList, ControlList
   if Toggle:=!Toggle
   {
      Loop, Parse, ActiveControlList, `n
      {
         if InStr(A_LoopField, ctrl)
         {
            DllCall("dwmapi\DwmSetWindowAttribute", "Ptr", win, "UInt", 2, "Int*", 1, "UInt", 4)
            ControlGetPos, CtrlX, CtrlY, CtrlW, CtrlH, %A_LoopField%
            WinSet, Region, % CtrlX "-" CtrlY " W" CtrlW " H" CtrlH
            break
         }
      }
   } else {
      WinSet, Region, , % wintitle
      DllCall("dwmapi\DwmSetWindowAttribute", "Ptr", win, "UInt", 2, "Int*", 0, "UInt", 4)
      }
}
Win10x64, AHK v1.1.25

32

Re: AHK: Скрытие заголовка приложения VLC Player

controlmove.

33

Re: AHK: Скрытие заголовка приложения VLC Player

Malcev, а как присвоить имя найденному контролу в функции (контролу, с содержанием в имени "VLC MSW video")?

Win10x64, AHK v1.1.25

34

Re: AHK: Скрытие заголовка приложения VLC Player

А вы поняли как работает скрипт из 31 поста?
Там этот момент учитывается.

35

Re: AHK: Скрытие заголовка приложения VLC Player

Malcev, я только понял, что скрипт получает список всех контролов, далее находит в них контрол с необходимым содержанием в имени. В качестве имени контрола я вижу там только %A_LoopField%, когда скрипт получает его координаты расположения в окне.

Win10x64, AHK v1.1.25

36

Re: AHK: Скрытие заголовка приложения VLC Player

Вы можете посмотреть, чему равна переменная A_LoopField с помощью msgbox.

37

Re: AHK: Скрытие заголовка приложения VLC Player

Malcev, контрол перемещается внутри окна. Мне необходимо разместить контрол на экране аналогично размещению окна.
Название контрола указывал как постоянное, хотя оно меняется. А как указать найденное в функции опытным путем имя - не знаю, т.е. не знаю, как присвоить ему постоянное значение.

#SingleInstance Force
SetTitleMatchMode 2
CoordMode, screen
1::
   ShowControl("Ace Player", "VLC MSW video")
   ControlMove, VLC MSW video 0DDE90801, 1180, 628, 870, 490
return

ShowControl(wintitle, ctrl){
   static Toggle
   win := WinExist(wintitle)
   WinGet, ActiveControlList, ControlList
   if Toggle:=!Toggle
   {
      Loop, Parse, ActiveControlList, `n
      {
         if InStr(A_LoopField, ctrl)
         {
            DllCall("dwmapi\DwmSetWindowAttribute", "Ptr", win, "UInt", 2, "Int*", 1, "UInt", 4)
            ControlGetPos, CtrlX, CtrlY, CtrlW, CtrlH, %A_LoopField%
            WinSet, Region, % CtrlX "-" CtrlY " W" CtrlW " H" CtrlH
 			MsgBox % A_LoopField 
         break
         }
      }
   } else {
      WinSet, Region, , % wintitle
      DllCall("dwmapi\DwmSetWindowAttribute", "Ptr", win, "UInt", 2, "Int*", 0, "UInt", 4)
      }
}
Win10x64, AHK v1.1.25

38

Re: AHK: Скрытие заголовка приложения VLC Player

Вставьте ControlMove в функцию.

39

Re: AHK: Скрытие заголовка приложения VLC Player

Malcev, изначально ф-ия подразумевалась для универсальности скрипта (для работы с разными окнами). Предлагаете задавать координаты для перемещения контрола в параметрах ф-ии наряду с именем окна и контрола? Т.е. вынести найденый контрол с присвоением переменной за пределы функции невозможно?

Win10x64, AHK v1.1.25

40

Re: AHK: Скрытие заголовка приложения VLC Player

msgbox % f("a")

f(var)
{
   title := "ok"
   return title
}