26

Re: AHK: Скрытие панели меню

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

Win10x64, AHK v1.1.25

27 (изменено: becauseim, 2017-02-20 00:34:57)

Re: AHK: Скрытие панели меню

Не актуально.

Win10x64, AHK v1.1.25

28

Re: AHK: Скрытие панели меню

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

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

Win10x64, AHK v1.1.25

29

Re: AHK: Скрытие панели меню

В смысле в FullScreen включать "Автоматически скрывать панель задач", а при выходе из FullScreen выключать?

По вопросам возмездной помощи пишите в личку
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.00 (Unicode 32-bit).

30

Re: AHK: Скрытие панели меню

serzh82saratov, да. Либо, если это невозможно, вообще не скрывать панель задач.

Win10x64, AHK v1.1.25

31

Re: AHK: Скрытие панели меню

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


#SingleInstance Force
#NoEnv
Global oFSM := {HideTaskBar:1}

1::FullScreenMode(1)
2::FullScreenMode()

FullScreenMode(Mode = 0) {
	Static O := [], APPBARDATA, _ := VarSetCapacity(APPBARDATA, 36, 0)
	hWnd := WinExist("A")
	WinGet, Style, Style
	If (Style & 0x00C00000 || Mode)
	{
		If oFSM.HideTaskBar
		{
			NumPut(36, APPBARDATA, 0, "UInt") ; First field is the size of the struct
			bits := DllCall("Shell32.dll\SHAppBarMessage"
				,"UInt", 4  ;	ABM_GETSTATE
				,"UInt", &APPBARDATA )
			If !(bits & 1)
			{
				NumPut(1, APPBARDATA, 32, "UInt" )
				DllCall("Shell32.dll\SHAppBarMessage"
					,"UInt", 0xA  ;	ABM_SETSTATE
					,"UInt", &APPBARDATA )
			}
		}
		WinGetNormalPos(hWnd, X, Y, W, H)
		Menu := O[hWnd].Menu ? 0 : 1
		M := O[hWnd].M = "" ? (Style & 0x01000000) : O[hWnd].M  
		If M
		{
			WinGetPos, wX, wY, wW, wH
			WinMove, , , wX, wY, wW, wH
		}
		WinSet, Style, -0x01000000			; WS_MAXIMIZE 
		WinSet, Style, -0x00C00000			; WS_CAPTION
		WinSet, Style, -0x00040000			; WS_SIZEBOX
		WinSet, Style, +0x80000000			; WS_POPUP
		WinGetClass, Class
		Top := oFSM[Class].T, !Top && Top := 0
		Bottom := oFSM[Class].B, !Bottom && Bottom := 0
		Left := oFSM[Class].L, !Left && Left := 0
		Right := oFSM[Class].R, !Right && Right := 0
		If (!Menu || (SM_CYMENU := 0))
			SysGet, SM_CYMENU, 15
		WinSet, Region, % 0 - Left "-" SM_CYMENU + Top " w" A_ScreenWidth  + Right  + Left " h" A_ScreenHeight + Bottom
		WinMove, , , 0 - Left, -(SM_CYMENU + Top), A_ScreenWidth + Left + Right, A_ScreenHeight + SM_CYMENU + Bottom + Top
		O[hWnd] := {M:M,X:X,Y:Y,W:W,H:H,Menu:Menu}
		WinSet, AlwaysOnTop, On
		WinSet, Style, +0x01000000		; WS_MAXIMIZE 
		WinSetNormalPos(hWnd, X, Y, W, H)
	}
	Else
	{
		WinSet, Region
		WinSet, Style, +0x00C00000
		WinSet, Style, +0x00040000
		If O[hWnd].M
		{
			WinGetNormalPos(hWnd, X, Y, W, H)
			WinSet, Style, -0x01000000		; WS_MAXIMIZE
			WinMaximize 
			WinSetNormalPos(hWnd, X, Y, W, H)
		} 
		Else 
			WinRestore
		WinSet, AlwaysOnTop, Off
		O[hWnd].M := "", O[hWnd].Menu := 0
		If oFSM.HideTaskBar
		{
			NumPut(36, APPBARDATA, 0, "UInt") ; First field is the size of the struct
			bits := DllCall("Shell32.dll\SHAppBarMessage"
    			,"UInt", 4  ;	ABM_GETSTATE
    			,"UInt", &APPBARDATA ) 
			If bits & 1
			{
				NumPut(0, APPBARDATA, 32, "UInt")
				DllCall("Shell32.dll\SHAppBarMessage"
					,"UInt", 0xA  ;	ABM_SETSTATE
					,"UInt", &APPBARDATA )
			}
		}
	}
}

WinGetNormalPos(hwnd, ByRef x, ByRef y, ByRef w, ByRef h)  { 
    VarSetCapacity(wp, 44), NumPut(44, wp) 
    DllCall("GetWindowPlacement", "Ptr", hwnd, "Ptr", &wp) 
    x := NumGet(wp, 28, "int"), y := NumGet(wp, 32, "int") 
    w := NumGet(wp, 36, "int") - x,  h := NumGet(wp, 40, "int") - y
}

WinSetNormalPos(hwnd, x, y, w, h)  { 
	VarSetCapacity(wp, 44, 0), NumPut(44, wp, 0, "uint") 
	DllCall("GetWindowPlacement", "Ptr", hWnd, "Ptr", &wp) 
	NumPut(x, wp, 28, "int"), NumPut(y, wp, 32, "int")
	NumPut(w + x, wp, 36, "int"), NumPut(h + y, wp, 40, "int") 
	DllCall("SetWindowPlacement", "Ptr", hWnd, "Ptr", &wp)	
}  
По вопросам возмездной помощи пишите в личку
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.00 (Unicode 32-bit).

32

Re: AHK: Скрытие панели меню

serzh82saratov, работает, как и раньше. Полностью скрывает/перекрывает панел задач, а не переводит в режим автоматического скрытия по умолчанию.
http://puu.sh/ujQpS/d208cce878.png

Win10x64, AHK v1.1.25

33

Re: AHK: Скрытие панели меню

А это переключает?

#SingleInstance Force
#NoEnv

1::ToggleAutoHideTaskBar()

ToggleAutoHideTaskBar()
{
	VarSetCapacity( APPBARDATA, 36, 0 )
	NumPut(36, APPBARDATA, 0, "UInt") ; First field is the size of the struct
	bits := DllCall("Shell32.dll\SHAppBarMessage"
    			,"UInt", 4 ; ABM_GETSTATE
    			,"UInt", &APPBARDATA )  
  NumPut( (bits ^ 0x1), APPBARDATA, 32, "UInt" ) ; Toggle Autohide
  DllCall("Shell32.dll\SHAppBarMessage"
    			,"UInt", ( ABM_SETSTATE := 0xA )
    			,"UInt", &APPBARDATA )
}
return
По вопросам возмездной помощи пишите в личку
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.00 (Unicode 32-bit).

34 (изменено: becauseim, 2017-02-26 03:27:24)

Re: AHK: Скрытие панели меню

serzh82saratov, никак не реагирует.
upd.: кажется, у меня само по себе не работает автоскрытие панели даже после ручной установки режима. Попробую перезагрузиться.

Win10x64, AHK v1.1.25

35

Re: AHK: Скрытие панели меню

Тогда не знаю, у меня работает.

По вопросам возмездной помощи пишите в личку
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.00 (Unicode 32-bit).

36

Re: AHK: Скрытие панели меню

becauseim пишет:

Попробую перезагрузиться.

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

37 (изменено: becauseim, 2017-02-26 04:17:48)

Re: AHK: Скрытие панели меню

serzh82saratov, Такой вариант у меня на Win 10 работает. Попробую заменить эту ф-ию в Вашем скрипте.
Flasher, спасибо! Но для меня прелестью AHK является то, что нет необходимости устанавливать отдельные приложения для подобных действий.

1::ToggleAutoHideTaskBar()

ToggleAutoHideTaskBar()
{
VarSetCapacity(APPBARDATA, A_PtrSize=4 ? 36:48)
NumPut(DllCall("Shell32\SHAppBarMessage", "UInt", 4 ; ABM_GETSTATE
										, "Ptr", &APPBARDATA
										, "Int")
 ? 2:1, APPBARDATA, A_PtrSize=4 ? 32:40) ; 2 - ABS_ALWAYSONTOP, 1 - ABS_AUTOHIDE
 , DllCall("Shell32\SHAppBarMessage", "UInt", 10 ; ABM_SETSTATE
                                    , "Ptr", &APPBARDATA)
}
return
Win10x64, AHK v1.1.25

38 (изменено: becauseim, 2017-03-01 01:41:51)

Re: AHK: Скрытие панели меню

serzh82saratov, только сейчас обратил внимание, что в последней версии нет ф-ии ToggleAutoHideTaskBar, чтобы можно было ее заменить на версию, найденную мною выше.

Было бы удобно, если каждое из трех действий HideTitleBar(), HideMenuBar(), HideTaskBar() было заключено в отдельную функцию, чтобы можно было их вставлять в других местах, например, при открытии заданной программы, автоматически переводить его в режим отображения без заголовка, а также, свободно задавать горячие клавиши на отдельные действия.

Например:


1::
HideTitleBar(On)
return

2::
HideTitleBar(Off)
return

3::
HideTitleBar(Off)
HideMenuBar(On)
return
Win10x64, AHK v1.1.25

39

Re: AHK: Скрытие панели меню

becauseim пишет:

нет необходимости устанавливать

Портабельные приложения в установке не нуждаются. Да и размер смехотворный (1/12 только от AutoHotKeyU32.exe). Важно проверять именно в "патовых" условиях, как в приведённом примере.

40

Re: AHK: Скрытие панели меню

Flasher, что есть "патовые" условия?

Win10x64, AHK v1.1.25

41

Re: AHK: Скрытие панели меню

becauseim пишет:

upd.: кажется, у меня само по себе не работает автоскрытие панели даже после ручной установки режима.

42

Re: AHK: Скрытие панели меню

Flasher, работает. Просто я не углядел активного события одного из закрепленных приложений, в результате чего, панель не скрывалась.

Win10x64, AHK v1.1.25

43

Re: AHK: Скрытие панели меню

becauseim
Что за событие, и почему из-за него не должна скрываться панель задач?

44

Re: AHK: Скрытие панели меню

Flasher, режим автоскрытия панели задач работает таким образом, что если Вам, например, пришло сообщение в Skype, который закреплен на панели, то панель разворачивается и остается видимой, пока Вы не откроете окно приложения с активным событием.

Win10x64, AHK v1.1.25

45

Re: AHK: Скрытие панели меню

becauseim
Мне требуется, чтобы панель скрывалась до момента её вызова пользователем всегда, вне зависимости от какой-то там активности приложений, ибо не хочу специально реагировать на подобные события только лишь для скрытия панели, когда занят другими делами.

46

Re: AHK: Скрытие панели меню

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

Win10x64, AHK v1.1.25

47

Re: AHK: Скрытие панели меню

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

48

Re: AHK: Скрытие панели меню

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

Win10x64, AHK v1.1.25

49

Re: AHK: Скрытие панели меню

becauseim
Ваш выбор. Но для меня он раздражителен, особенно когда необходим всепостоянный доступ к статусной строке или строке ввода.

50

Re: AHK: Скрытие панели меню

Помогите, пожалуйста, заменить в сценарии функцию скрытия панели задач на предложенную, т.к. на Windows 10, к сожалению, не работает.

Win10x64, AHK v1.1.25