Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];

Вниз

Загрузка моей программы перед загрузкой Explorer a   Найти похожие ветки 

 
Brand2000   (2003-05-29 01:46) [0]

Как мне сделать так,чтобы сначало загружалась моя прога(заставка с поролем и дт), а по нажатию кнопки загружался рабочий стол и меню пуск. Когда я прописываю в System.ini в секции [boot] свою прогу (shell=BrandExpl.exe),при перезагрузке она появляется, но при нажатии кнопки (Start Windows) загружается проводник а не рабочий стол и меню пуска.Как добится реализации загрузки рабочего стола и меню пуска

Обработка события кнопки OnClick:
ShellExecute(Handle, "open", <EXPLORER>, nil, <C:\WINDOWS\EXPLORER.exe>, SW_SHOWNORMAL)Прошу помочь кто чем сможет! Заранее спасибооооо......


 
ers   (2003-05-29 07:40) [1]

дА есть такая фича!
Во-Первых: Если Explorer УжЕ загружен то автоматом загружается кокрас проводник.
Во-Вторых: Нужно использовать для запуска Explorera на начальной загрузке функцией WinExec(); вон в 2000-ых виндах До запуска Explorer sHellExecute(); ВООЩЕ не работает ;)
Удачи!


 
ers   (2003-05-29 07:44) [2]

Получилось?


 
DVM   (2003-05-29 09:20) [3]


> вон в 2000-ых виндах До запуска Explorer sHellExecute();
> ВООЩЕ не работает ;)

Чушь! Прекрасно все работает! Shell32.dll подгрузить надо.


 
Юрий Зотов   (2003-05-29 10:27) [4]

Вы сказали системе, что пользовательской оболочкой будет Ваша программа. Проводник Вас прекрасно понял, поэтому он и запускается, как обычная программа, а не как оболочка. То есть, не создает Рабочий стол, Панель задач и прочие атрибуты оболочки. Так что все правильно, что хотели - то и получили.


 
DVM   (2003-05-29 10:55) [5]

Вообще то если оболочку правильно сделать, то проводник вообще не будет запускаться, даже если его запускать насильно после старта своей оболочки.


 
Novichek   (2003-05-29 12:50) [6]

Brand2000
есть один вариант:
1) пропиши в реестре блокировку рабочего стола
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
("NoDesktop",1)

после загрузки виндовса рабочего стола и кнопки "пуск" ты больше не увидишь :))

2) пропиши свою программу не в System.ini, а в обычной автозагрузке

3) как только она загрузится, убей explorer
postmessage(findwindow(nil, "program manager"), WM_quit,0,0);
таким образом ты закроешь доступ на все какие-либо комбинации горячих клавиш (кроме contr-alt-del) и, соответственно, защитишь комп от несанкционированного лазания по его файлам

4) после ввода правильного пароля, перед закрытием программы, запусти explorer
ShellExecute(0, nil,"explorer.exe", nil,nil, SW_SHOWDEFAULT);

5) отсчитай 10-15 секунд и закрывай свою программу, задержка нужна чтобы explorer не загрузил ее 2-й раз, а не то получится замкнутый круг :))

6) чуть незабыл - что бы твоя программа не загрузилась 2-й раз добавь это

procedure TForm1.FormCreate(Sender: TObject);
var
Wnd : hWnd;

begin
Wnd := GetWindow(Handle, gw_HWndFirst);
WHILE Wnd <> 0 DO
BEGIN
IF (Wnd <> Application.Handle) AND (GetWindow(Wnd, gw_Owner) = 0) THEN
BEGIN
GetWindowText (Wnd, buff, sizeof (buff ));
IF StrPas (buff) = Application.Title THEN
BEGIN
Halt;
END;
END;
Wnd := GetWindow (Wnd, gw_hWndNext);
END;

postmessage(findwindow(nil, "program manager"), WM_quit,0,0);
END;


 
Novichek   (2003-05-29 12:54) [7]

DVM
а что значит правильно сделать оболочку?
я сколько не пытался, пришел только к одному варианту, смотри выше.


 
DVM   (2003-05-29 13:03) [8]


> Novichek ©

Дело в том, что есть такая функция:
function SetShellWindow(hWnd: HWND): dword; stdcall; external "User32.dll" name "SetShellWindow";

Она сообщает системе, что указанное окно - оболочка. Такое в системе может быть только одно. Когда запущен эксплорер данная функция не срабатывает. Когда данная функция применена к какому-либо окну в отсутствии эксплорера, то эксплорер потом запустить не удасться, пока существует это окно. Он просто не запускается.

Попутно данная функция двигает окно назад, так, что ниже него ни одно окно не может расположится. Этой функцией пользуется сам эксплорер.

Вызов этой функции обязателен для своей оболочки.

Ну есть еще много мелочей, которые тоже должны быть выполнены, чтобы система действительно решила, что ваше окно - оболочка.

P.S. С VCL окнами не срабатывает почему-то. Делал на API.


 
Novichek   (2003-05-29 13:28) [9]

насколько я знаю эта функция только для Win98, т.к. "User32.dll" в WinXP не работает, по крайней мере у меня на WinXP компилятор на этой строчке, всегда спотыкается.


 
DVM   (2003-05-29 14:51) [10]


> насколько я знаю эта функция только для Win98, т.к. "User32.dll"
> в WinXP не работает, по крайней мере у меня на WinXP компилятор
> на этой строчке, всегда спотыкается.

нет


 
Novichek   (2003-05-29 15:25) [11]

извини я его с KERNEL32.DLL перепутал


 
Игорь Шевченко   (2003-05-29 16:19) [12]

Novichek © (29.05.03 13:28)

Функция SetShellWindow находится в USER32.DLL (и всегда там жила)
Компилятор будет спотыкаться, так что ее надо загружать динамически, через GetProcAddress(GetModuleHandle("USER32"), "SetShellWindow");

или объявлять, как
function SetShellWindow (Wnd : HWND) : LongBool; stdcall; external "user32.dll";

Что она делает: Регистрирует для указанного окна комбинацию клавиш Ctrl+Esc, связывает окно с рабочим столом и помещает его вниз в Z-order"е. Связь с рабочим столом нужна в том числе и для того, чтобы окно было всегда внизу Z-order. Объект окна также блокируется от разрушения функцией DestroyWindow.



 
Brand2000   (2003-05-30 08:18) [13]

Вообще моя задумка в другом (она реализована в XP(user name&pass).


> Во-Вторых: Нужно использовать для запуска Explorera на начальной
> загрузке функцией WinExec(); вон в 2000-ых виндах До запуска
> Explorer sHellExecute(); ВООЩЕ не работает ;)

^1)Я так понял мне надо сделать обработчик click"a так:

WinExec(Handle, "open", <EXPLORER>, nil, <C:\WINDOWS\EXPLORER.exe>, SW_SHOWNORMAL)
дапустим это правильно.....но я хочу загружать прогу до загрузки Explorera (Hаверное надо делать boot прогу?)




Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.008 c
14-10368
Soft
2003-07-15 13:57
2003.08.04
Извиняюсь перед всем форумом


1-10291
Alex300
2003-07-22 09:33
2003.08.04
Проблема с курсором


1-10242
-=[SDA]=-
2003-07-21 12:25
2003.08.04
Как узнать какой именно компонент сгенерировал событие!?


1-10240
Spawn
2003-07-20 07:16
2003.08.04
Rave


14-10421
Vlad Oshin
2003-07-17 15:50
2003.08.04
О законности





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский