Blog. Just Blog

Как закрепить программу в панели задач на Ассемблере

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Образ мышления: Assembler | Автор: ManHunter
Как закрепить программу в панели задач на Ассемблере
Как закрепить программу в панели задач на Ассемблере

В Windows 7 есть возможность закрепления часто используемых программ прямо на панели задач. Что-то типа панели быстрого запуска предыдущих версий Windows, только более ущербное. Некоторые инсталляторы автоматически закрепляют устанавливаемые ими программы на панели задач без подтверждения пользователя, и мне стало интересно, как это можно сделать программным путем. В качестве языка для реализации, естественно, был выбран Ассемблер, но тут используются стандартные WinAPI, так что можно без проблем переписать на любой другой язык программирования.

Кратко, для закрепления программы на панели задач используется функция ShellExecute с параметром taskbarpin и она же, но с параметром taskbarunpin для изъятия программы из панели задач. Сперва опишем все необходимые значения в сегменте данных:
  1. section '.data' data readable writeable
  2.  
  3. ; Команды для ShellExecute
  4. szPin    db 'taskbarpin',0
  5. szUnpin  db 'taskbarunpin',0
  6.  
  7. ; Путь к ярлыку, который надо закрепить или удалить
  8. szLink   db 'c:\Program Files\Microsoft Games\Solitaire\SolitaireMCE.lnk',0
Чуть ниже я подробно остановлюсь на особенностях выполнения этих команд. А пока начнем с примера, как закрепить программу на панели задач. Делается это в одну строчку:
  1.         ; Закрепить программу на панели задач
  2.         invoke  ShellExecute,NULL,szPin,szLink,NULL,NULL,0
  3.         cmp     eax,20h
  4.         ja      pinned_ok
  5.  
  6. pinned_error:
  7.         ; Ошибка закрепления программы на панели задач
  8.         ...
  9.  
  10. pinned_ok:
  11.         ; Программа успешно закреплена на панели задач
  12.         ...
В качестве единственного параметра команда taskbarpin принимает ссылку на .lnk-файл, который, в свою очередь, должен ссылаться на нужный исполняемый файл. Никакой другой вид файлов закрепить на панели задач не получится. Но и тут есть свои особенности: закрепить можно не любой ярлык, а только тот, целевой объект которого находится на несъемном диске. При попытке закрепить ярлык, ссылающийся на файл, например, на флешке, функция вернет ошибку. Путь к файлу ярлыка должен быть полным, переменные окружения недопустимы. Результат выполнения должен превышать 20h, это будет означать, что функция отработала успешно. Любое значение меньше или равное 20h считается ошибкой.

Чтобы изъять программу из панели задач, надо точно также задействовать функцию ShellExecute, но только команда будет taskbarunpin. Остальные параметры и особенности такие же, как и при закреплении ярлыка.
  1.         ; Изъять программу из панели задач
  2.         invoke  ShellExecute,NULL,szUnpin,szLink,NULL,NULL,0
  3.         cmp     eax,20h
  4.         ja      unpinned_ok
  5.  
  6. unpinned_error:
  7.         ; Ошибка изъятия программы из панели задач
  8.         ...
  9.  
  10. unpinned_ok:
  11.         ; Программа успешно изъята из панели задач
  12.         ...
Как получить список программ, которые закреплены в панели задач? Очень просто, перебираете поочередно все .lnk-файлы в папке %APPDATA%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar, это и есть искомый список. Но просто удалять их оттуда не вполне корректно, получив имя файла ярлыка его надо изымать из панели задач указанным выше способом. Иначе визуально значок останется на панели задач, но при попытке задействовать его, система выдаст следующее предупреждение:

Результат удаления ярлыка напрямую
Результат удаления ярлыка напрямую

В приложении пример программы, которая закрепляет ярлык стандартной игрушки Solitaire на панели задач, а затем изымает его оттуда.

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

Pin.Unpin.Shortcut.Demo.zip (1,552 bytes)


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

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

Комментарии

Отзывы посетителей сайта о статье
Владимир (16.12.2016 в 21:01):
ManHunter, спасибо. Вроде работает.
ManHunter (13.12.2016 в 21:16):
http://rgho.st/62WHTBKfK

Цитатаесли можно, то с исходными текстами.

"Дайте воды попить, а то так есть хочется, что переночевать негде"
Владимир (13.12.2016 в 18:25):
ManHunter, да, меня интересует такая программа, и, если можно, то с исходными текстами.

Кстати, на Windows 8.1 я пробовал копировать SCF-файл из Windows XP, который это делает. Он работает, но не закрепляется в "Панели задач".
ManHunter (12.12.2016 в 23:20):
ЦитатаХотелось бы узнать как вернуть на "Панель задач" большую кнопку "Свернуть все окна"

У меня для этих целей написана специальная софтинка. Выложить?
Владимир (12.12.2016 в 22:17):
Хотелось бы узнать как вернуть на "Панель задач" большую кнопку "Свернуть все окна" (точно такую же как в Windows XP).

В смысле я знаю много способов как свернуть окна, но хотелось бы именно как в Windows XP (то есть рядом с кнопкой "Пуск", а не в "Области уведомлений").
ManHunter (05.10.2016 в 16:06):
Да, ошибся в тексте. Поправил, спасибо!
anonymous (05.10.2016 в 14:57):
"Результат выполнения не должен превышать 20h, это будет означать, что функция отработала успешно. Любое значение больше 20h считается ошибкой."

Наоборот, любое значение <= 20h считается ошибкой. Это видно даже из вашего кода.

cmp     eax,20h
ja      pinned_ok

cmp     eax,20h
ja      unpinned_ok
wetal (19.09.2016 в 19:12):
На Win10 этот способ почему то выпилили из системы. С другой стороны, оно и верно. А то всякие говнопрограмы лезли без спросу на панель. Только юзер вправе решать, кому там быть.

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

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

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