Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Замена/выгрузка Shella (Explorer.exe) 
:(
    Опции темы
SeregaLBN
Дата 16.2.2006, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 3.10.2003
Где: Киев

Репутация: нет
Всего: нет



Прога работает в полноэкранном режиме 24 час в сутки, и по сути explorer.exe ненужен.
Поэтому возникли пару вопросов:
1. Как можно при загрузке компа стартовать прогу вместо explorer.exe?
Или этот же вопрос только заданный по другому.
Можно ли загружать Windows2K или XP без загрузки explorer.exe?

2. При выходе из полноэкранного режима я запускаю explorer.exe, если его ещё нет.
А при входе в полноэкранный режим нужно выгрузить explorer.exe.
Вопрос. Как можно _корректно_ закрыть explorer.exe?
Я делаю это так:
Код

   HWND hWndExlorer = ::FindWindow(_T("Progman"), _T("Program Manager"));
   ::PostMessage(hWndExlorer, WM_CLOSE, 0, 0);

Ну и в результате появляется стандартное обще_системно_модальное окно "Завершение работы Windows".
Я знаю, что если в этом окне нажать одновремённо <Shift>+<Ctrl>+<Alt>+<кликнуть мышкой по кнопке 'Отмена'>
то explorer.exe сам завершится. Я это пытался сэмулировать так:
Код

   /* просмотрел все главные и дочерние окна explorer.exe (EnumThreadWindows + EnumChildWindows):
   
   Process 'explorer.exe'
   ====================================
   Thread ID 0x0000060C
      ------------------------------------
      hWnd 0x000304EA, class [#32770], title [Завершение работы Windows]; parent 0x000604D0, parent class [DimmedWindowClass], parent title []
         hWnd 0x000304EC, class [Static], title []
         hWnd 0x000404E4, class [Static], title [&Выберите желаемое действие.]
         hWnd 0x000804CE, class [ComboBox], title []
         hWnd 0x0008049C, class [Static], title [Завершение сеанса пользователя, завершение работы Windows, а затем новый запуск Windows.]
         hWnd 0x000504D2, class [Button], title [&Запланированная остановка]
         hWnd 0x000704A4, class [Static], title [&Причина:]
         hWnd 0x000604E6, class [ComboBox], title []
         hWnd 0x00030500, class [Static], title []
         hWnd 0x000304F0, class [Static], title [&Комментарий:]
         hWnd 0x000304F4, class [Edit], title []
         hWnd 0x000304F6, class [Static], title [Выберите наиболее точное описание причины, по которой вы хотите завершить работу компьютера]
         hWnd 0x000304F8, class [Button], title [Регистрация событий завершения работы]
         hWnd 0x000304FA, class [Button], title [ОК]
         hWnd 0x000304F2, class [Button], title [Отмена]
         hWnd 0x000304FC, class [Button], title [&Справка]
      ------------------------------------
      hWnd 0x000604D0, class [DimmedWindowClass], title []; parent 0x00000000, parent class [], parent title []
      ------------------------------------

     Видно, что "Завершение работы Windows" является стандартным диалогом (класс окна #32770) родитель которого - DimmedWindowClass.
     Хотя поиск дочерних окон у DimmedWindowClass ничего не дал...
     Причём заметил, что DimmedWindowClass есть только тогда, когда есть окно "Завершение работы Windows".

     Поэтому, я запускаю таймер который работает до тех пор, пока не найдётся DimmedWindowClass.
     А когда находится нахожу модальный диалог которому и посылаю эмуляцию клавиш+клика.
   /**/
   // 1. Ищу родителя и нахожу.
   HWND hWnd = ::FindWindowEx(NULL, NULL, _T("DimmedWindowClass"), NULL);
   if (hWnd) {
      // 2. Ищу модальный диалог "Завершение работы Windows"
      hWnd = ::FindWindowEx(hWnd, NULL, _T("#32770"), NULL);

      // Ну и ненахожу. Ошибка ERROR_INVALID_WINDOW_HANDLE

      // 3. Поэтому ищу по-другому:
      hWnd = ::GetForegroundWindow();

      if (hWnd) {
         keybd_event(VK_SHIFT, 0, 0, 0);
         keybd_event(VK_MENU, 0, 0, 0);
         keybd_event(VK_CONTROL, 0, 0, 0);
         ::PostMessage(hWnd, WM_COMMAND, MAKEWPARAM(IDCANCEL, BN_CLICKED), 0);    
         keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
         keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0);
         keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
      }
   }

Это всё у меня работает. Но хочется по-другому и попроще выгружать explorer.exe...

3. Как при загрузке explorer.exe отменить загрузку программ, что указаны в Start->Progarmm->AutoRun?
У меня пока только одна идея - переименовывать во время запуска этот каталог.

PM MAIL   Вверх
Fixin
Дата 16.2.2006, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: 8
Всего: 18



PM MAIL ICQ   Вверх
SeregaLBN
Дата 16.2.2006, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 3.10.2003
Где: Киев

Репутация: нет
Всего: нет



Цитата(Fixin @ 16.2.2006, 16:31 Найти цитируемый пост)
Смотри тут, может поможет

Спасибо за ссылку

Там пишут:
Цитата(rsm @ 2.2.2006, 17:25 Найти цитируемый пост)
"HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" в значении параметра "Shell" пропиши путь к файлу который собираешься запускать.


Но у меня его нет. А есть на НKLM

Это сообщение отредактировал(а) SeregaLBN - 16.2.2006, 18:03
PM MAIL   Вверх
oleg1973
Дата 16.2.2006, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: 1
Всего: 34



НKCU=HKEY_CURRENT_USER


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
SeregaLBN
Дата 16.2.2006, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 3.10.2003
Где: Киев

Репутация: нет
Всего: нет



Цитата(oleg1973 @ 16.2.2006, 17:51 Найти цитируемый пост)
НKCU=HKEY_CURRENT_USER

Сорри, ошибся.
Подправил своё сообщение.

Проверил это дело. Создал в НKCU (не меняя в НKLM) параметра "Shell"="MyProg.exe"
Загрузилось smile То что надо!
PM MAIL   Вверх
SeregaLBN
Дата 17.2.2006, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 3.10.2003
Где: Киев

Репутация: нет
Всего: нет



Доделал ещё следующее - если не получилось корректно выйти из explorer.exe я его прибиваю:
Код

   DWORD dwExplorerProcessID = ProcessID(_T("explorer.exe"));
   if (dwExplorerProcessID) {
      HANDLE hExplorerProcess = ::OpenProcess(PROCESS_TERMINATE, FALSE, dwExplorerProcessID);
      if (hExplorerProcess) {
         ::TerminateProcess(hExplorerProcess, 1234);
      }
   }

Он то убивается, но через пару секунд заного загружается. smile
Помотрел кто его загружает - сервис lsass.exe - Local Security Authority Service
Как мне обойти эту траблу? Не хочется как то убивать ещё и этот сервис.
PM MAIL   Вверх
DigitSphinx
Дата 24.6.2007, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 28.4.2007
Где: Москва

Репутация: нет
Всего: 3



Цитата(SeregaLBN @  17.2.2006,  15:39 Найти цитируемый пост)
Он то убивается, но через пару секунд заного загружается

Уже не актуально, но если кто по поиску найдет эту тему то ….  smile 
Это стандартная настройка винды что explorer запускается через пару секунд.
Я не знаю где в реестре можно поменять но есть такая прога Power Pack и в ней можно снять галочку  
System optimizer -> windows -> miscellaneous -> automatically restart Explorer



--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
jonie
Дата 24.6.2007, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



Цитата

Я не знаю где в реестре можно поменять но есть такая прога Power Pack и в ней можно снять галочку  
System optimizer -> windows -> miscellaneous -> automatically restart Explorer
я пологаю в gpedit.msc легально менять эксплорер на любую другую оболочку.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
dumb
Дата 25.6.2007, 01:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 27
Всего: 158



PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0490 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.