51 (изменено: serzh82saratov, 2017-03-04 00:19:38)

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


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

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

FullScreenMode(Mode = 0) {
	Static O := []
	hWnd := WinExist("A")
	WinGet, Style, Style
	If (Style & 0x00C00000 || Mode)
	{
		If oFSM.HideTaskBar && !GetStateHideTaskBar()
			HideTaskBar(1)
		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 && GetStateHideTaskBar()
			HideTaskBar(0)
	}
}

HideTaskBar(Hide) {
	VarSetCapacity(APPBARDATA, A_PtrSize = 4 ? 36 : 48)										
	NumPut(Hide ? 1 : 2, APPBARDATA, A_PtrSize = 4 ? 32 : 40) ; 2 - ABS_ALWAYSONTOP, 1 - ABS_AUTOHIDE
	DllCall("Shell32\SHAppBarMessage", "UInt", 10 ; ABM_SETSTATE
									, "Ptr", &APPBARDATA)
}

GetStateHideTaskBar() {
	VarSetCapacity(APPBARDATA, A_PtrSize = 4 ? 36 : 48)
	Return DllCall("Shell32\SHAppBarMessage", "UInt", 4 ; ABM_GETSTATE
										, "Ptr", &APPBARDATA
										, "Int")
}

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.25.02 (Unicode 32-bit).

52 (изменено: becauseim, 2017-03-04 04:14:19)

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

serzh82saratov, спасибо! Но панель не разворачивается при наведении.

Win10x64, AHK v1.1.25

53

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

Так понимаю что в FullScreen так и положено, проверял без скрипта на паре приложений.
Вам тогда надо не FullScreen, а его имитацию пробовать.

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

54

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

serzh82saratov, не знаю, нужен ли мне Fullscreen, мне нужно скрытие панели заголовка, меню и задач. Скрытие последнего условно (перевод в режим "Автоматического скрытия" средствами Windows).

Win10x64, AHK v1.1.25

55

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

Помогите, пожалуйста, разделить каждое действие на отдельную ф-ию в данном примере. Хотел бы заменить отдельную ф-ию.

Win10x64, AHK v1.1.25

56

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

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

Win10x64, AHK v1.1.25