Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Написание шелла  (Прочитано 9030 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Axe Ilshat
Гость
« : 23-07-2005 15:10 » 

Возникла необходимость в написании собственного шелла для комп зала. Пиратский локер глючит, да и считает иногда неправильно.
Не знаю с какого конца взяться.  Ну загрузиться как шелл, это ладно. Но все остальное...
1. Рабочий стол как рисовать? Не въезжаю. Вообще рабочий стол (HWND=NULL) в таком случае должен же быть? Прямо на нем рисовать? А момент прорисовки? WM_PAINT и иже с ними....
2. Есть возможность цивилизованного перехвата вставки иконок в трее, регистрации видимых окон на таскбаре и тп, не используя перехват апи функций? Может какие ком интерфейсы надобно реализовать для этого?

кто-нибудь подобное уже наверное писал, плз скажите где копать. Сенкс.

Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #1 : 23-07-2005 18:53 » 

Вообще рабочий стол (HWND=NULL)

Ну с такими знаниями ты ничего не напишешь...

NULL - в винде - 0
HWND - это по сути указатель на структуру объекта окна.... Как он может быть 0.Не понял

Для перехватат Рабочего стола я пользовался GetWindowlong перехват WindowProc там и все сообщения перехватишь...

А для поиска окна FinfWindow с именем Desctop.
Записан

А птичку нашу прошу не обижать!!!
Axe Ilshat
Гость
« Ответ #2 : 24-07-2005 08:15 » 

>Ну с такими знаниями ты ничего не напишешь...
сурьезно? Улыбаюсь

> HWND=NULL
да знаю я чте такое хендл окна, ну глупость сморозил Улыбаюсь До этого десктоп для меня был = DESKTOP_HWND.
лушще наверное GetDesktopWindow()

> GetWindowlong...
я что то не догнал. Субклассить окно которое находится в другом процессе? А адресное пространсво?, и ессно GetWindowlong работает только для окон находящихся "in the same process" (C) MSDN. Чего я упустил?
Щас посмотрел, десктоп пренадлежит процессу csrss.exe. Внедрять длл в процесс?
« Последнее редактирование: 24-07-2005 08:22 от Axe Ilshat » Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #3 : 24-07-2005 08:49 » 

Цитата
сурьезно?
Ага Улыбаюсь

Цитата
да знаю я чте такое хендл окна, ну глупость сморозил  До этого десктоп для меня был = DESKTOP_HWND.
лушще наверное GetDesktopWindow()

Это тоже самое - GetDesctopWindow имплементирована через FindWindow Улыбаюсь

Цитата
я что то не догнал. Субклассить окно которое находится в другом процессе? А адресное пространсво?, и ессно GetWindowlong работает только для окон находящихся "in the same process" (C) MSDN. Чего я упустил?
Щас посмотрел, десктоп пренадлежит процессу csrss.exe. Внедрять длл в процесс?

Фигня все это. Почему ты решил что я тебе предлагаю сабкласить.
Ты делаешь хук процедуре обработки сообщений, а не сабкласишь.
Попросту - если ты накладываешь что - то на десктоп, то перехватывая сообщения ты рисуешь в СВОЕМ инстане в своем АДРЕССНОМ пространстве, по своему окну, которое ты получил от системы, но по сообщению, которое будет обновлять тебя и десктоп синхронно.

Записан

А птичку нашу прошу не обижать!!!
Axe Ilshat
Гость
« Ответ #4 : 24-07-2005 09:20 » 

понял. Я прочитал почему то SetWindowLong.  Сенкс огромный. Если не напишу с меня пиво Улыбаюсь

Еще пару-тойку вопросов можно?
1. Как с треем быть?
2. Как поддерживать список открытых окна на таскбаре. То есть фиксировать их создание/удаление.
3. Есть какая то фича, что при запуске проводника, при наличии стороннего шела, он не создает таскбар. Где что надо вписать/стереть?
По первым двум пунктам, наверное есть какой то цивилизованный путь, эксплорер тоже наверное идет как программа не очень тесно связанная с системой, но где то же он эти данные берет. Ну список окон получить то просто(хотя не думаю что он делает это перечисляя окна), а иконоки в трее как?
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #5 : 24-07-2005 09:36 » 

1. Не имею точного понимания зачем тебе так усложнять, да и никогда шелом для вынь не заморачивался.
Скажу только одно, что трей - то же окно с которым можно поступать одинаково как и с другими окнами, т.е. дисабле, енабле и так далее...
2. Вот уж чего не скажу. Это смотри сам - понятия не имею никакого.
3. Аналогично пункту два.
Единственное что скажу, что експлорер - это не программа, это СОМ объект намертво вделанный в систему, а не сторонняя программа.
Просто у него как и у любой проги есть инстансы открытых окон. Создавая первое из них он активирует свои ресурсы и для окна и потом постоянно ими пользуется пока работает.


Есть в среде винды так называемый Шелл- АПИ. все функции его называются SH_*****
Посмотри в MSDN какие тебе могут подойти в качестве отслеживания событий в трее и замены собой експлорера. Они все построены на СОМ и поддерживают текущий шелл винды.


П.С. Пиво ты вряд - ли сможешь мне передать Улыбаюсь я далековато нахоусь, а по интернет каналам его увы не перекинешь Улыбаюсь Улыбаюсь Улыбаюсь
Записан

А птичку нашу прошу не обижать!!!
Voffka
Гость
« Ответ #6 : 05-08-2005 12:50 » 

Цитата
Единственное что скажу, что експлорер - это не программа

- это полная ЕРУНДА!!!  :nottrue:
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Winlogon строковой параметр Shell = "Explorer.exe", если заменить это значение на путь к льбой программе, то вместо Эксплорера будет запускаться эта программа.
И вообще Explorer.EXE - это разве не программа? ее нельзя снять с выполнения в диспетчере задач? и точно также запустить?
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines