Страница 1 из 1
Свой шелл в WINXP - засада...
Добавлено: 11 июн 2006, 15:20
gosha_zinow
ОС WINXP;
USER ограниченный;
Есть приложение, для этого пользователя являющееся шеллом;
Когда пользователь логинится - если шеллом эксплорер - то запуск в течение 2-3 сек, но если мое приложение, то загрузка (вернее отображение моего приложения)- 30(+- 5) сек. Причем мое приложение запускается тоже в течение 2-3 сек (поставил ему попищать при запуске ж

); шаманство с переключением десктопов не помогло, причем если в эти 30 секнд создать свой десктоп и там запустится и туда переключится - тоже не помогает - такое ощущение , что таимаут, после которого обязательное переключение на дефолтный десктоп. Кто знает , F1,F1,F1,F1,F1,F1,F1,F1,F1!
Добавлено: 20 июн 2006, 21:23
Eugie
Никакого таймаута на неродной шелл нет. Скорее всего, дело в особенностях того самого шелла.
Не видя исходников, трудно судить, но вот что приходит на ум:
1) в процессе загрузки выполняются сетевые подключения?
2) отсутствует UpdateWindow() гл.окна?
Добавлено: 21 июн 2006, 10:49
gosha_zinow
Код: Выделить всё
Application.Initialize;
SetShellWindow(Application.Handle);
initenvironment;//инит переменных
Application.CreateForm(TSecShell, SecShell);
UpdateWindow(Application.Handle);//попробовал добавить
UpdateWindow(SecShell.Handle);//попробовал добавить
beep(500,500);//бипает через 2-3 с , но окно закрыто логоном
Application.Run;
UpdateWindow - судя по всему не решение проблемы
Добавлено: 21 июн 2006, 13:28
Eugie
Я бы не использовал undocumented API (SetShellWindow), т.е. нет четкого описания, что она делает.
Стандартный способ подмены шелла - через реестр, ключ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon, значение Shell.
Насчет UpdateWindow(), ну это была просто версия. Дельфовая форма не нуждается в подобных трюках, т.к. обычно создается сразу видимой. Но в любом случае, отрисовка произойдет не ранее вызова Application.Run.
Кстати, апдейтить Application.Handle бессмысленно, т.к. дельфовое Application window имеет преопределенный размер (0,0) (не путать с MainForm!)

И что значит "окно закрыто логоном"?
Добавлено: 21 июн 2006, 14:30
gosha_zinow
способ подмены шела использую стандартный , только не через hklm, а через hku -те для определенного юзера
SetShellWindow - без этого вызова winxphe при вызове winexec (которое может быть вызвано и не из моего приложения) - и иже с ней упорно запускает шеллом эксплорер. Ну а UpdateWindow(Application.Handle); - это просто танцы с бубном

"Закрыто логоном" - это значит что висит " окно приветствия и загрузка личных параметров"
Добавлено: 21 июн 2006, 15:32
Eugie
Так может это профиль долго грузится?
Насчет вызова winexec не понял: какое это имеет отношение к подмене шелла?