Комментарии 31
"(попытка изменить в коде слово Start на Пуск успеха не имела)"
Помнится, был код на Win32API, который открывал/закрывал лоток дисковода, и суть его была в отправке сообщения open/close через mciSendString. В каком-то русском сборнике рецептов по дельфи (или это VB был, не помню), был описан этот метод. Фишка в том, что из-за того что переводчики перевели и сообщения на открыть/закрыть, пример работать перестал.
К чему это я… Помнится, в старом апи была функция, перечисляющая всех детей некого окна по hwnd. Поищите, может у вас-таки получится найти правильный hwnd для манипуляции пуском?
Помнится, был код на Win32API, который открывал/закрывал лоток дисковода, и суть его была в отправке сообщения open/close через mciSendString. В каком-то русском сборнике рецептов по дельфи (или это VB был, не помню), был описан этот метод. Фишка в том, что из-за того что переводчики перевели и сообщения на открыть/закрыть, пример работать перестал.
К чему это я… Помнится, в старом апи была функция, перечисляющая всех детей некого окна по hwnd. Поищите, может у вас-таки получится найти правильный hwnd для манипуляции пуском?
hwnd по идее правильный. проблема в названии. как условный вариант/идея — слово Пуск написано в кодировке Win-1251, а я подсовываю ему Unicode. по хорошему, надо утилиту типа Spy+ натравить на кнопку и узнать, что там написано.
EnumChildWindows Function ()
The EnumChildWindows function enumerates the child windows that belong to the specified parent window by passing
Такая?
The EnumChildWindows function enumerates the child windows that belong to the specified parent window by passing
Такая?
Боюсь уже не вспомню, я лет 5 назад последний раз Win32API трогал.
В данном случае проще использовать FindWindowEx
да такая, и в msdn даже есть «плохой» пример на неё =) msdn.microsoft.com/en-us/library/ms632598(VS.85).aspx
Всё-таки Win32 API он и в Африке Win32 API. Вот правда, не в обиду, если поменять «C#» на «Делфи» в вашем примере ничего не изменится. ;-)
загуглил IntPtr
Заголовок из выдачи: «IntPtr — what is this!?!?»
Один в один моя эмоция!
Заголовок из выдачи: «IntPtr — what is this!?!?»
Один в один моя эмоция!
))). Гугл крут. попробуйте набрать pigs can't fly и посмотрите на подсказку. twitpic.com/etim5
Не сочтите за оскорбление или грубость, но что-то сильно Фленовым попахивает…
Вы точно-точно уверены, что это работает?
Как утверждает MSDN, FindWindow ищет только среди окон верхнего уровня. Элементарная проверка с помощью Spy++ показывает, что кнопка «Start» является дочерним окном Shell_TrayWnd — то есть FindWindow её не найдёт.
А если бы даже FindWindow искала по всем окнам — результат был бы непредсказуем: Button — очень распространённый оконный класс, к нему относятся практически все кнопки в системе, не только «Пуск».
// Получим дескриптор кнопки ПУСК
IntPtr startWnd = FindWindow(«Button», null);
Как утверждает MSDN, FindWindow ищет только среди окон верхнего уровня. Элементарная проверка с помощью Spy++ показывает, что кнопка «Start» является дочерним окном Shell_TrayWnd — то есть FindWindow её не найдёт.
А если бы даже FindWindow искала по всем окнам — результат был бы непредсказуем: Button — очень распространённый оконный класс, к нему относятся практически все кнопки в системе, не только «Пуск».
Кроме того, часть кода, который «если работает, то написан Александром Климовым», удивительно похожа на код примера для Win7, который у Вас «не заработал».
Упс. Вы правы. Это копировал кусок из CodeProject, пытаясь решить проблему с кнопкой в Win7 и забыл вернуть свой прежний код. Вечером вернусь к примеру и поправлю. Спасибо, глаз замылен и не увидел подвоха.
Упс. Вы правы. Это копировал кусок из CodeProject, пытаясь решить проблему с кнопкой в Win7 и забыл вернуть свой прежний код. Вечером вернусь к примеру и поправлю. Спасибо, глаз замылен и не увидел подвоха.
Вы ввели меня в заблуждение. Ваша картинка относится к WinXP, где Пуск действительно является дочерним окном Shell_TrayWnd. Но в Vista/7 кнопка уже не является дочерним окном и поэтому мой код правильный.
Вы правы, картинка относится к WinXP. Однако, не могу согласится с Вашей претензией: в заблуждение Вы ввели себя сами.
Сначала Вы пишете:
Потом (upd ещё не было) пишете:
Иными словами: сначала Вы утверждаете, что пример универсален, и приводите код для Висты/7; затем говорите, что он без проблем работал для XP, а в Vista только наполовину. И как финальный аккорд — утверждаете, что пример для Vista (код которого Вы и привели) — у Вас не заработал.
Сворачивая всё это: Вы утверждаете, что приведённый Вами код у Вас же и не заработал, — что звучит несколько странно :)
Нелогичность текста исчезнет, если нынешний код примера (для Vista/7) заменить на код для XP (т.е. с учётом дочерности кнопки). Ну, или перелопатить весь текст, чтобы он соответствовал коду.
Сначала Вы пишете:
… Я решил показать проект, позволяющий скрывать кнопку Пуск и панель задач в Windows XP/Vista/7.Потом приводите (чужой) код для Vista/7.
Потом (upd ещё не было) пишете:
В Windows 98/XP скрыть кнопку можно было без проблем. В Windows Vista… изменилось ее поведение. Она уже не является дочерним окном панели задач. И приведенный здесь код работает наполовину. [...] Скрыть Пуск, но оставить панель задач не получается. [...]
В поисках решения проблемы я набрел на парочку статей на CodeProject [...]Но, к сожалению, у меня эти примеры не заработали.
Иными словами: сначала Вы утверждаете, что пример универсален, и приводите код для Висты/7; затем говорите, что он без проблем работал для XP, а в Vista только наполовину. И как финальный аккорд — утверждаете, что пример для Vista (код которого Вы и привели) — у Вас не заработал.
Сворачивая всё это: Вы утверждаете, что приведённый Вами код у Вас же и не заработал, — что звучит несколько странно :)
Нелогичность текста исчезнет, если нынешний код примера (для Vista/7) заменить на код для XP (т.е. с учётом дочерности кнопки). Ну, или перелопатить весь текст, чтобы он соответствовал коду.
Практическая ценность может появиться тогда, когда понадобится сделать приложение в котором действия клиента очень ограничены, для библиотек например, всяких там справочных…
Вот бы еще был хороший способ при crash-е программы обратно все это хозяйство показывать.
А у кнопки пуск разве есть hWnd?
а о чём сообственно статья?
О том, что у Windows есть well-known window classes? или о том, что такое p/Invoke?
О том, что у Windows есть well-known window classes? или о том, что такое p/Invoke?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Использование P/Invoke: прячем кнопку Пуск и панель задач в Windows