1

Тема: AHK: Скрыть/Вернуть Панель задач (Hide/Unhide taskbar)

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

У меня не заработали следующие вещи

1) После возвращения панели задач сбрасываются ее прежние размеры .
2) Горячая клавиша почему-то не работает .

#NoEnv
#NoTrayIcon
#SingleInstance force
DetectHiddenWindows, Off   ;for IfWinExist

VarSetCapacity( APPBARDATA, 36, 0 )
;------------------------------------------------------------
; Fetch current hidden/showing status

IfWinNotExist, ahk_class Shell_TrayWnd
  TaskbarAndStartToggleState = 0     ;Currently hidden (not showing)
Else
  TaskbarAndStartToggleState = 1     ;Currently non-hidden (showing)
;------------------------------------------------------------
Gosub +space   ;Toggle the taskbar/SM state
;------------------------------------------------------------
Exit
;------------------------------------------------------------
+space::
 TaskbarAndStartToggleState := Func(TaskbarAndStartToggleState)
Return

Func(TaskbarAndStartToggleState)
{
   Global APPBARDATA

   If TaskbarAndStartToggleState = 0
   {
      NumPut( (ABS_ALWAYSONTOP := 0x2), APPBARDATA, 32, "UInt" )           ;Enable "Always on top" (& disable auto-hide)
      DllCall( "Shell32.dll\SHAppBarMessage", "UInt", ( ABM_SETSTATE := 0xA ), "UInt", &APPBARDATA )

      WinShow ahk_class Shell_TrayWnd
      Return 1            ;Now showing
   }
   
   If TaskbarAndStartToggleState = 1
   {
      NumPut( ( ABS_AUTOHIDE := 0x1 ), APPBARDATA, 32, "UInt" )            ;Disable "Always on top" (& enable auto-hide to hide Start button)
      DllCall( "Shell32.dll\SHAppBarMessage", "UInt", ( ABM_SETSTATE := 0xA ), "UInt", &APPBARDATA )

      WinHide ahk_class Shell_TrayWnd
      ;WinHide ahk_class Shell_TrayWnd   ;don't need this 2nd one?
      Return 0            ;Now hidden
   }
}

2

Re: AHK: Скрыть/Вернуть Панель задач (Hide/Unhide taskbar)

F12::

If h=1
{
WinShow, ahk_class Shell_TrayWnd
h:=0
}

Else
{
WinHide, ahk_class Shell_TrayWnd
h:=1
}
return

3

Re: AHK: Скрыть/Вернуть Панель задач (Hide/Unhide taskbar)

Не то ...

После скрытия таскбара на его месте остается прозрачная дыра ,
которую другие окна не используют

А в моем примере панель задвигается и окна сразу же растягиваются на весь экран ...

Кстати у меня Seven-64 ...

4 (изменено: ypppu, 2010-10-19 20:02:40)

Re: AHK: Скрыть/Вернуть Панель задач (Hide/Unhide taskbar)

В первом примере всё работает правильно, если панель задач не закреплена,  или её высота рана 1 строке. Если более 1 строки и панель закреплена, всплывает недоработка. Панель восстанавливается на одну строку меньше, чем пряталась.

Попробуйте вручную выдвинуть панель на 4 строки, затем закрепить её. Теперь в свойствах несколько раз поочерёдно ставьте-убирайте галочку "Автоматически скрывать панель задач" и нажимайте "Применить". При этом у меня с каждым циклом "съедается"  по одной строке из панели.

5

Re: AHK: Скрыть/Вернуть Панель задач (Hide/Unhide taskbar)

А что за горячая клавиша не работает? Shift+Пробел?

6 (изменено: Shtorm, 2010-10-19 21:09:04)

Re: AHK: Скрыть/Вернуть Панель задач (Hide/Unhide taskbar)

ypppu пишет:

А что за горячая клавиша не работает? Shift+Пробел?

Да . У меня почему-то не компилируются скрипты если ставлю обычные буквы

Шаманство с галкой не помогает . У меня кстати панель слева шириной см 3 . Всегда возвращает около 1 см ширины.
Независимо закреплена или нет .
Тут видно надо специально сохранять позицию панели с последующим восстановлением.

Кстати несмотря на простоту проблемы после 2 дней поисков в интернете ничего не нашел
такого чтобы работало как надо ...

7

Re: AHK: Скрыть/Вернуть Панель задач (Hide/Unhide taskbar)

Да это не шаманство, просто хотел продемонстрировать, в чём "баг".

У меня почему-то не компилируются скрипты если ставлю обычные буквы

Что значит обычные буквы?

8

Re: AHK: Скрыть/Вернуть Панель задач (Hide/Unhide taskbar)

латинские ( q,w и тд ) но это в принципе менее важная проблема чем с размерами .
Если размеры скакать будут то и от переключения клавишами никакого удовольствия не получишь ...

9

Re: AHK: Скрыть/Вернуть Панель задач (Hide/Unhide taskbar)

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

10

Re: AHK: Скрыть/Вернуть Панель задач (Hide/Unhide taskbar)

Судя по интернету это задача есть высшая математика
В теории надо из реестра тащить ширину панели , а потом ее обновлять ...

11

Re: AHK: Скрыть/Вернуть Панель задач (Hide/Unhide taskbar)

А потом кто-нибудь в текущем сеансе изменит ширину/местоположение панели, и скрипт опять обломается .

12

Re: AHK: Скрыть/Вернуть Панель задач (Hide/Unhide taskbar)

Тогда давайте на систему не дышать , а то вдруг загнется если ею пользоваться

13 (изменено: teadrinker, 2010-10-22 07:38:09)

Re: AHK: Скрыть/Вернуть Панель задач (Hide/Unhide taskbar)

А если просто вот так попробовать:

   ABM_SETSTATE := 0xA, ABS_AUTOHIDE := 0x1, ABS_ALWAYSONTOP := 0x2
   VarSetCapacity(APPBARDATA, 36)
   NumPut(36, APPBARDATA), NumPut(WinExist("ahk_class Shell_TrayWnd"), APPBARDATA, 4)
   Return

F12::
   NumPut((Show := !Show) ? ABS_AUTOHIDE : ABS_ALWAYSONTOP, APPBARDATA, 32)
   DllCall("Shell32.dll\SHAppBarMessage", UInt, ABM_SETSTATE, UInt, &APPBARDATA)
   Return
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

14

Re: AHK: Скрыть/Вернуть Панель задач (Hide/Unhide taskbar)

Так значки на рабочем столе дёргаются, и ширина панели съедается.
Если попробовать копнуть с другой стороны. Допустим, панель автоматически скрывается. При наведении курсора она вылезает и торчит, пока не отодвинуть курсор. Возможно ли "заставить панель думать, что курсор всё время над ней"? Тогда всё пойдёт как по маслу.

15

Re: AHK: Скрыть/Вернуть Панель задач (Hide/Unhide taskbar)

ypppu, насколько я понял задачу, нужно было, чтобы по горячей клавише скрывалась/появлялась панель задач, и при скрытии имеющиеся максимизированные окна занимали освободившееся место. Ну так это и происходит: окно рабочего стола растягивается на полный экран. Когда панель появляется, ей возвращается статус "поверх других окон", и остальные окна сдвигаются, освобождая ей место. В принципе, панель задач можно показать, не возвращая этого статуса, в зависимости от того, что нужно.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

16 (изменено: Shtorm, 2010-10-22 14:43:13)

Re: AHK: Скрыть/Вернуть Панель задач (Hide/Unhide taskbar)

Спасибо ребята , я на Delphi написал прогу
она меняет при каждом запуске статус автосокрытия панели задач на обратный
( ширина остается прежней )
Скрипт у teadrinker увидел только сегодня ...

17 (изменено: Shtorm, 2010-10-22 14:38:39)

Re: AHK: Скрыть/Вернуть Панель задач (Hide/Unhide taskbar)

кстати работает также как у teadrinker ,
только на Delphi букв побольше вышло
зато exe 44.5 против 202.3 кб
Единственное что осталось для полного счастья ,
это менять координаты иконок динамически на ширину сдвига панели.
У меня стоит Deskspace - он сам держит значки на фиксированном месте ,
поэтому сначала не заметил такого эффекта ...

18

Re: AHK: Скрыть/Вернуть Панель задач (Hide/Unhide taskbar)

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

Преследуется эта идея в целях увеличения рабочего пространства на дисплеях ноутбуков с небольшой диагональю. Найти такое решение на форуме не удалось.

Буду признателен уважаемым разработчикам, которые помогут реализовать такой скрипт. Думаю, он будет полезен не мне одному.

19

Re: AHK: Скрыть/Вернуть Панель задач (Hide/Unhide taskbar)

На семёрке так работает:

F12:: HideShowTaskbar(hide := !hide)
   
HideShowTaskbar(action)
{
   static ABM_SETSTATE := 0xA, ABS_AUTOHIDE := 0x1, ABS_ALWAYSONTOP := 0x2
   
   VarSetCapacity(APPBARDATA, size := 2*A_PtrSize + 2*4 + 16 + A_PtrSize, 0)
   NumPut(size, APPBARDATA), NumPut(WinExist("ahk_class Shell_TrayWnd"), APPBARDATA, A_PtrSize)
   NumPut(action ? ABS_AUTOHIDE : ABS_ALWAYSONTOP, APPBARDATA, size - A_PtrSize)
   
   DllCall("Shell32\SHAppBarMessage", UInt, ABM_SETSTATE, Ptr, &APPBARDATA)
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

20

Re: AHK: Скрыть/Вернуть Панель задач (Hide/Unhide taskbar)

teadrinker, скрывает панель задач и на десятке. А как же скрыть вместе с ней и "шапку" окна?