Что нового

Изменение рабочей области экрана

sterro_sasha

Новичок
Сообщения
30
Репутация
0
Здравствуйте. Сразу прошу прощение, что возможно не знаю как правильно описать свою задачу.

Прошу именно посоветовать - куда вообще смотреть, чтобы реализовать следующее. Есть панель, они прикрепляется сверху над панелью задач. Она также длинная, на ней кнопки. Мне нужно, чтобы все окна в Windows принимали область экрана, на которой расположена панель - за нерабочую. То есть также, как и с панелью задач.

Как вообще это можно сделать?

Сейчас все работает, но под панелью как полагается есть часть текущего активного окна.
 
Автор
S

sterro_sasha

Новичок
Сообщения
30
Репутация
0
Поиски безуспешны. Может такой функции вообще нет?

Однако решил вручную все делать, хотя очень не хотелось, ибо это костыль, но тем не менее вот набросок:

Код:
While 1
	$aPos = WinGetPos('[ACTIVE]')
	IF $aPos[1]+$aPos[3] > 712 Then
		WinMove('[ACTIVE]', '', $aPos[0], $aPos[1], $aPos[2],  _
			$aPos[3]-(($aPos[1]+$aPos[3])-712))
	EndIf
	Sleep(100)
WEnd
 

Tempo

Скриптер
Сообщения
529
Репутация
163
Регистрация своей панели
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPISys.au3>

#Region ;==>_SHAppBarMessage
#include <StructureConstants.au3>
Global Const $tagAPPBARDATA = "DWORD cbSize; HWND hWnd; UINT uCallbackMessage; UINT uEdge;" & $tagRECT & ";LPARAM lParam"
Global Enum $ABM_NEW, _
		$ABM_REMOVE, _
		$ABM_QUERYPOS, _
		$ABM_SETPOS, _
		$ABM_GETSTATE, _
		$ABM_GETTASKBARPOS, _
		$ABM_ACTIVATE, _
		$ABM_GETAUTOHIDEBAR, _
		$ABM_SETAUTOHIDEBAR, _
		$ABM_WINDOWPOSCHANGED, _
		$ABM_SETSTATE, _
		$ABM_GETAUTOHIDEBAREX, _
		$ABM_SETAUTOHIDEBAREX

Global Enum $ABN_STATECHANGE, _
		$ABN_POSCHANGED, _
		$ABN_FULLSCREENAPP, _
		$ABN_WINDOWARRANGE

Global Enum $ABE_LEFT, _
		$ABE_TOP, _
		$ABE_RIGHT, _
		$ABE_BOTTOM

Global Enum $ABS_AUTOHIDE = 1, _
		$ABS_ALWAYSONTOP

Func _SHAppBarMessage($iMessage, ByRef $tAPPBARDATA)
	DllStructSetData($tAPPBARDATA, "cbSize", DllStructGetSize($tAPPBARDATA))
	Local $aRet = DllCall("shell32.dll", "UINT_PTR", "SHAppBarMessage", "DWORD", $iMessage, "struct*", $tAPPBARDATA)
	If @error Then SetError(@error, @extended, 0)
	Return $aRet[0]
EndFunc   ;==>_SHAppBarMessage
#EndRegion ;==>_SHAppBarMessage

Global $g_tAPPBARDATA
_Example()

Func _Example()
	Local $tRect = _WinAPI_GetWorkArea()
	Local $iBarW = $tRect.Right - $tRect.Left, $iBarH = 100
	Local $iBarX = $tRect.Left, $iBarY = $tRect.Bottom - $iBarH

	Local $hGUI = GUICreate("Пример", $iBarW, $iBarH, $iBarX, $iBarY, $WS_POPUPWINDOW, $WS_EX_TOOLWINDOW)
	Local $idButton_Exit = GUICtrlCreateButton("Закрыть", 10, 10, $iBarW - 20, $iBarH - 20)
	$g_tAPPBARDATA = DllStructCreate($tagAPPBARDATA)
	$g_tAPPBARDATA.hWnd = $hGUI
	$g_tAPPBARDATA.uEdge = $ABE_BOTTOM
	$g_tAPPBARDATA.Left = $iBarX
	$g_tAPPBARDATA.Top = $iBarY
	$g_tAPPBARDATA.Right = $iBarX + $iBarW
	$g_tAPPBARDATA.Bottom = $iBarY + $iBarH
	_SHAppBarMessage($ABM_NEW, $g_tAPPBARDATA)
	_SHAppBarMessage($ABM_SETPOS, $g_tAPPBARDATA)
	OnAutoItExitRegister("_OnAutoItExit")
	GUISetState()

	While 1
		Switch GUIGetMsg()
			Case $GUI_EVENT_CLOSE, $idButton_Exit
				Exit
		EndSwitch
	WEnd
EndFunc   ;==>_Example

Func _OnAutoItExit()
	_SHAppBarMessage($ABM_REMOVE, $g_tAPPBARDATA)
EndFunc   ;==>_OnAutoItExit

Или изменение рабочей области
Код:
;~ AutoIt Version: 3.3.14.5
#include <WinAPISys.au3>
#include <WinAPIsysinfoConstants.au3>

Local $tRect = _WinAPI_GetWorkArea()
$tRect.Bottom -= 100
_WinAPI_SystemParametersInfo($SPI_SETWORKAREA, 0, $tRect, $SPIF_UPDATEINIFILE)
 
Автор
S

sterro_sasha

Новичок
Сообщения
30
Репутация
0
Tempo


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

joiner

Модератор
Локальный модератор
Сообщения
3 110
Репутация
519
[info border=#0000ff float=left]На форуме принято помечать тему решенной после получения ответа на свой вопрос!
Вверху или внизу темы нажмите на ссылку такого вида:
Тема не решена
[/info]
 
Верх