Что нового

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

sterro_sasha

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

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

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

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

sterro_sasha

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

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

Код:
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

AutoIT Гуру
Сообщения
616
Репутация
205
Регистрация своей панели
Код:
#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

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


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

joiner

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