Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C++ Builder > Скрыть кнопку с панели задач |
Автор: artsb 10.5.2008, 18:32 | ||||||
Всем привет. У меня в программе два окна. При запуске она сворачивается в трей. Мне не нужно, чтобы на панели задач отображалась кнопка приложения, даже если открыто одно из окон. Как вообще отключить эту кнопку? Пока сделал так: в обработчики OnShow форм написал:
Но может есть вариант получше? С помощью горячих клавишь скрываю окно указанное пользователем:
здесь window - это HWND окна. Но заметил, что не всегда скрывается кнопка приложения с панели задач. Как это исправить? Также, при отображении окна, оно не становится активным, а остаётся под другими окнами. Что можно сделать, чтобы при отображении окно становилось активным и поверх других окон. Попробовал добавить строку:
но не помогло. Спасибо. |
Автор: THandle 10.5.2008, 19:13 | ||||
1.
? 2.
? |
Автор: mrbrooks 10.5.2008, 20:39 |
Имхо http://forum.vingrad.ru/forum/topic-205587/anchor-entry1474441/0.html посмотри. В данной теме мы с комрадом разбирали тему как раз работу с треем и скрытием формы. Грубо говоря у формы есть метод Hide() Возможно тебе его и хватит ![]() |
Автор: artsb 10.5.2008, 22:22 | ||
THandle, спасибо. 1. Это помогло только при открытии дочернего окна. Если открыть главную форму кнопка появляется. 2. Работает. Спасибо. mrbrooks, спасибо. Посмотрю. Добавлено через 3 минуты и 41 секунду Сделал так:
Вроде, всё работает. Остаётся открытым вопрос по поводу кнопки чужого приложения на панели задач. |
Автор: THandle 10.5.2008, 22:29 |
artsb, поставь на OnCreate. Добавлено через 1 минуту и 38 секунд вот сам пример из FAQ, только на Delphi: http://forum.vingrad.ru/faq/topic-183849.html |
Автор: artsb 10.5.2008, 22:31 |
Так я там и ставил. Но уже этот вопрос решён. Спасибо. Остаётся только кнопка чужого приложения. |
Автор: artsb 10.5.2008, 23:11 | ||
Попробовал так:
Не работает. |
Автор: 586 10.5.2008, 23:21 |
Интерфейс ITaskbarList должен помочь: http://msdn.microsoft.com/en-us/library/bb774652(VS.85).aspx |
Автор: artsb 10.5.2008, 23:32 |
586, спасибо. Но я не понял как с ним работать. Можно примерчик. Спасибо. |
Автор: 586 10.5.2008, 23:47 |
http://www.rsdn.ru/forum/message/21650.flat.aspx |
Автор: artsb 11.5.2008, 14:57 | ||||
586, спасибо. Почитал. Интересно... Там VladD2 пишет:
А как получить хэндл кнопки? Так пойдёт:
|
Автор: 586 11.5.2008, 15:12 | ||
Там пример внизу есть, тот что ты просил. С интерфейсом ITaskbarList.
|
Автор: artsb 11.5.2008, 15:17 | ||
Не совсем понял, где здесь указывать кнопку, которую я хочу скрыть? :( Добавлено через 3 минуты и 28 секунд
|
Автор: artsb 11.5.2008, 15:41 | ||||
Попробовал так:
кнопку ищу так:
При компиляции пишет: [C++ Error] shobjidl.h(2193): E2238 Multiple declaration for 'FOLDERSETTINGS' [C++ Error] shobjidl.h(8095): E2238 Multiple declaration for 'DESKBANDINFO' [C++ Error] ShlObj.h(1422): E2238 Multiple declaration for 'FVSHOWINFO' [C++ Error] ShlObj.h(3457): E2238 Multiple declaration for 'SHELLFLAGSTATE' Как с этим бороться? |
Автор: 586 11.5.2008, 15:49 | ||
В начале кода напиши:
hWnd - это хендл окна, а не кнопки ![]() |
Автор: artsb 11.5.2008, 16:55 |
Не помогло :( Кстати, а зачем при подключении некоторых библиотек нужно вставлять такие конструкции? Значит, я указываю окно, а скрывается кнопка окна? Так? А что делать если на экране отображается не главное окно, а дочернее (похоже в моём случае именно так, т.к. некоторые другие окна скрываются вместе с кнопками). |
Автор: artsb 11.5.2008, 19:09 | ||
Действительно. Проверил. Нужно ставить до #include <vcl.h> Спасибо. Я проверяю работу своей программы на Extract Icon Tool. Окно этой программы имеет заголовок "Extract Icon Tool v1.80", а на кнопке написано "Extract Icon Tool". Применил приведённый вами код. Окно программы скрылось, а кнопка нет. А вот после того как отобразил окно появилась ещё одна кнопка с таким же названием как и заголовок окна! Что ещё можно сделать, чтобы скрыть кнопку? Нельзя ли сделать поиск кнопки по названию и применить к ней ShowWindow? У меня не получается найти хэндл кнопки.
Не понял. Я говорю про чужие окна. Как я узнаю их Application->Handle? |
Автор: artsb 11.5.2008, 20:19 | ||
Попробовал так:
Но сообщения "Button" не появляется. Как получить доступ к кнопке? Добавлено через 14 минут и 46 секунд Сделал следующее: Скачал программу InqSoft Window Scaner. После её запуска, в качестве окна указал "ToolbarWindow32". Нажал в окне программы "Инструменты"->"Сканер toolbar'ов".Открылось дополнительное окно. Там нажал "Просканировать Toolbar". Программа показала список всех кнопок! Более того, можно управлять состоянием этих кнопок! Как она это делает? ![]() Если нажать на кнопку со стрелачками напротив выделенной надписи, кнопка прячется и отображается. |
Автор: 586 11.5.2008, 21:59 |
deleted |
Автор: artsb 12.5.2008, 06:45 |
не понял. |
Автор: 586 12.5.2008, 21:34 |
Почитай в MSDN про изменение состояний toolbar-кнопок (TB_GETBUTTONINFO / TB_SETBUTTONINFO). Т.к. будет передаваться структура, это придётся делать к контексте процесса explorer.exe (через dll или VirtualAllocEx). |
Автор: artsb 12.5.2008, 23:11 |
Ого, что-то сложно ты написал. Для меня это тяжело. Можешь как-нибудь попроще объяснить на каком-нибудь примере. Тем более, сначала надо получить доступ к кнопке. Как это сделать? |
Автор: 586 12.5.2008, 23:51 | ||
Дело в том, что при работе с common-контролами (ListView, TreeView, TabCtrl, Toolbar и др.) используется структура. Т.к. адрес структуры недействителен в другом процессе, структура должна принадлежать к адресному пространству процесса. По идее, это должно применяться ко всем контролам (Button, Static и др.), но MS это оставил для совместимости с Win16, а вот common-контролы изменять не стал.
|
Автор: artsb 13.5.2008, 16:21 |
586, спасибо. А где здесь скрыть/показать кнопку? |
Автор: 586 14.5.2008, 19:57 | ||
Всё намного проще:
Добавлено через 10 минут и 9 секунд А вот для TB_GETBUTTONTEXT придётся выделять память. |
Автор: artsb 15.5.2008, 21:46 | ||||
586, спасибо. Приведённый вами код работает. Только вот не устраивает то, что нужно обращаться по индексу кнопки (есть ведь скрытые кнопки, которые трогать не нужно, а они отображаются ![]() Попробовал искать по надписи:
Но в сообщении три закорючки и всё. Что я не так делаю? Вроде всё по справке:
|
Автор: 586 15.5.2008, 22:36 | ||
В процессе нужно выделять память.
|
Автор: artsb 16.5.2008, 21:47 |
Работает! 586, респект вам. И ещё раз спасибо. Где вы берёте эту информацию? Как её ищете? Если не секрет. ЗЫ извиняюсь за офтоп. |
Автор: 586 16.5.2008, 22:01 |
http://www.google.ru/ ![]() ![]() |
Автор: artsb 17.5.2008, 15:59 |
Я так и знал! ![]() ![]() ![]() |