Blog. Just Blog

Отключение кнопки "Свернуть все окна" в Windows 7

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Образ мышления: Assembler | Автор: ManHunter
Захотелось поэкспериментировать с новым интерфейсом Windows 7, а конкретно решил убрать кнопку "Свернуть все окна" из трея. Зачем мне это надо - вопрос другой, здесь важна сама реализация. Кнопка "Свернуть все окна", как в сказке про Кащея, находится внутри нескольких других окон. Вложенность и иерархию классов можно определить, например, при помощи программы WinDowzer или любой другой, показывающей дерево всех окон системы. Для поиска родительского окна системного трея с названием класса Shell_TrayWnd я использовал функцию FindWindow, а для определения хэндлов вложенных дочерних окон с классами TrayNotifyWnd (область уведомлений) и TrayShowDesktopButtonWClass (сама кнопка "Свернуть все окна") - функцию FindWindowEx.
  1.         ...
  2.         ; Найти окно трея
  3.         invoke  FindWindow,stw,NULL
  4.         or      eax,eax
  5.         jz      no_button
  6.  
  7.         ; Найти окно уведомлений в трее
  8.         invoke  FindWindowEx,eax,NULL,tnw,NULL
  9.         or      eax,eax
  10.         jz      no_button
  11.  
  12.         ; Найти кнопку "Свернуть все окна"
  13.         invoke  FindWindowEx,eax,NULL,tsc,NULL
  14.         or      eax,eax
  15.         jz      no_button
  16.  
  17.         ; Спрятать кнопку "Свернуть все окна"
  18.         ; Если надо показать кнопку, то замените флаг на SW_SHOW
  19.         invoke  ShowWindow,eax,SW_HIDE
  20.  
  21.         ; Кнопка не найдена
  22. no_button:
  23.         ...
  24.  
  25. ; Названия классов окон для поиска
  26. stw     db      'Shell_TrayWnd',0  ; Название класса окна трея
  27. tnw     db      'TrayNotifyWnd',0  ; Название класса окна области уведомлений
  28. tsc     db      'TrayShowDesktopButtonWClass',0  ; Название окна кнопки
К сожалению, мне не удалось полностью убрать кнопку из трея, даже когда она скрыта, на ее месте остается пустое пространство. Попытки изменить ширину кнопки перед ее скрытием при помощи функции SetWindowPos успеха тоже не принесли.

В приложении примеры двух программ, реализующих описанный алгоритм. Одна скрывает кнопку "Свернуть все окна", другая возвращает ее на место. Программы работают, естественно, только под Windows 7.

Примеры программ с исходными текстами (FASM)Примеры программ с исходными текстами (FASM)

Show.Desktop.Button.Control.Demo.zip (2,334 bytes)


Поделиться ссылкой ВКонтакте Поделиться ссылкой на Facebook Поделиться ссылкой на LiveJournal Поделиться ссылкой в Мой Круг Добавить в Мой мир Добавить на ЛиРу (Liveinternet) Добавить в закладки Memori Добавить в закладки Google
Просмотров: 18332 | Комментариев: 27

Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
Максим (20.10.2016 в 11:49):
Автору респект, неплохой код, что надо. Побольше бы таких фич.
ManHunter (07.07.2016 в 18:07):
Сперва русский язык подучи, потом настройки программы. Значок из трея убирается.
Саша (07.07.2016 в 17:30):
вот эта программа 7+ Taskbar Tweaker убирает эту кнопку только весит в трее всегда.
максим (15.01.2015 в 03:23):
спасибо огромное,всё сработало.
Graf (03.04.2014 в 11:20):
Игорь, пробовал, как вы писали, та прога Windows 7 Show Desktop Button Remover убирает пустое место, Show Desktop Button Control Demo убирает кнопку, но при отображении скрытых значков или появления какого-нибудь уведомления пустое место возвращается обратно, получается Windows 7 Show Desktop Button Remover фактически бесполезна
Игорь (25.12.2012 в 12:50):
Отлично работает!
Автору респект!
Кнопку и место удалось убрать вовсе.
Сначала запустил эту программку
http://www.door2windows.com/wi...h-one-click/
(она сжала кнопку, то бишь убрала пустое место), дальше запустил программу автора... и вуаля! )))
ManHunter (12.03.2012 в 15:37):
Никак
Григорий Ильич (12.03.2012 в 15:13):
Уважаемые господа!
Прошу прощения,что беспокою Вас. Но я уже старый человек и без помощи Вас - молодых не разберусь. Я инвалид Отчественной войны. Мне уже 90 лет. С компьютером знаком давно. тут все в норме, но с этим вопросом разобраться не могу.
Вопрос такой: Как я могу быстро и просто поместить значок программы в трей, чтобы он там после запуска/перезапуска системы там был всегда. И как убрать этот значек, если он мне более не нужен будет.
Дело в том, что много программ лезет в трей, а чтобы значок Антиворуса
Microsoft Security Client там появился нужно этот антивирус запустить. Раньше этого не было. Запускаю и после этого он появляется...Переустанавливаю Win. - опять это нужно повторять. И он еще спрашивает разрешения на запуск. Мой адрес: gig12@mail.ru
                     C уважением - Григорий Ильич
дмитрий (11.03.2012 в 14:22):
спасибо! автору! замучался задевать рукой эту кнопку при наборе текста на планшете.
brute (04.01.2012 в 18:19):
На XP другие классы что-ли?
htr=FindWindow_("Shell_TrayWnd",0)     ;общий трей
hstart=FindWindowEx_(htr,0,"Button",0) ;кнопка Start
htrwin=FindWindowEx_(htr,0,"ReBarWindow32",0);панель задач + свернуть все окна
hideb=FindWindowEx_(htrwin,0,"ToolbarWindow32","Quick Launch") ;свернуть все окна
hideb2=FindWindowEx_(htrwin,0,"MSTaskSwWClass",0) ; панель задач
с помощью сканера окон InqSoftS0M можно скрыть кнопку "свернуть все окна" переместить "панель задач" на её место - вплотную к кнопке Пуск. Но при этом часть трея залезает под "Пуск".. (это видно, если нажать лампочку в InqSoftS0M) и изменения не сохраняются, после перезапуска explorera всё встаёт на свои места.
artem (26.08.2011 в 06:12):
Кто-то нашел способ избавиться от пустого места под кнопкой?
Exit (21.06.2011 в 17:29):
ManHunter, Спасибо! Пойду гуглить и познавать смысл бытия через Ассемблер :)
ManHunter (21.06.2011 в 17:08):
Ну дык, к 56 кб программы надо еще таскать за собой кучу мегабайт фреймворка, так что вдвойне низачот. А посоветую начать с изучения книжки Зубкова, уроков Iczelion'а, ну и статей на wasm:
http://www.wasm.ru/translator....lator=Aquila
Exit (21.06.2011 в 17:03):
ManHunter,
твое кунг-фу в стиле Assembler гораздо круче, чем его кунг-фу в стиле Visual C# / Basic .NET :)
и немного офтопа: с чего посоветуешь начать в изучение Assemblera?
Как я понял, без него в реверсинге нечего делать, а очень хочется :)
Я бы с удовольствием читал и учил твои уроки, судя по блогу у тебя отлично получается ясно и доходчиво разбирать сложные вопросы.
ManHunter (21.06.2011 в 16:03):
56 килобайт, низачот :)
Exit (21.06.2011 в 16:01):
ManHunter,
на сайте http://kishan-bagaria.deviantart.com/ выложили
Windows 7 Show Desktop Button Remover
только там две кнопки в одном окне. ну и результат аналогичный - место остается зарезервировано.
ManHunter (05.05.2011 в 10:31):
Читай камменты, все написано.
dasd (04.05.2011 в 21:04):
А можно такую же программку, убирающую/добавляющую пустое место, если не затруднит?
ManHunter (04.05.2011 в 20:36):
Не должна. Это место зарезервировано под кнопку.
dasd (04.05.2011 в 19:29):
**может потому что тема оформления — классическая…
dasd (04.05.2011 в 19:17):
Должна ли приложенная к записи прога убирать не только значек но и пустое место оставшееся после неё? У меня пустое место остается :( может тема оформления — классическая.
trad (15.07.2010 в 05:37):
меня так эта кнопка просто раздражает, место для нее выбранно абсолютно не удобное, при перемотке страницы часто в нее попадаешЬ)))
ManHunter (21.06.2010 в 00:01):
Интересная для кого? Лично у меня эта непонятная задача никаких эмоций не вызывает.
Agarus (19.06.2010 в 22:08):
есть ещё интересная задачка, как убрать две панели инструментов с рабочего стола в трее?
ManHunter (08.06.2010 в 17:30):
Все, что мне удалось с ней сделать - это изменить размеры по высоте через SetWindowPos. Передвинуть мысль тоже была, но обломался.
Valera (08.06.2010 в 17:26):
Добрый день! ;) Уважаемы ManHunter - пример отличный , а можно ли эту кнопочку свернуть отсоединьть и переместить в другое место ? На пример к меню "Пуск".
semiono (08.06.2010 в 02:30):
Извините, много примеров у Вас тут интересных, но аппетит всёравно растёт.
Я практически мало знаю Flat Assembler, сам пытался разбираться с msdn,
как обычно 80% непонятно. Очень хотелось бы написать программу, вернее
пример как можно экспортировать и импротировать ключи реестра.
А их там не мало учитывая различные типы REG_NONE и все другие.
Но главное хотелось бы иметь всё это с записью в файл в валидном виде,
например, в формате подходящем для inf. Строка, например, выглядит так
HKLM,"SOFTWARE\Classes\Test","Value1",0x24001,46,8 3,c1,c8,85,73,c0,01
Но я пытался соорудить цикл для обработки BIN2ANSI запутался, даже
забыл с чего начинал, неговоря уже о запятых разделителях байтов.
Если у Вас есть по реестру и по перекодировке примеры или статьи,
опубликуйте их пожалуйста. Или может будет желание напишите чтонибудь глобальное на эту тему. Меня в win x86_64 всегда интересуют консоль,
файлы и реестр. После перехода на оболочку bb4win исправление неудобств
explorer как то отпало. Хотя некоторые фишки для настройки окон бывают интересны. Спасибо за Ваш блог по fasm!

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2017
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.08 сек. / MySQL: 2 (0.0027 сек.) / Память: 4.5 Mb
Наверх