Помогите запустить Explorer как оболочку из другой программы.

Тема в разделе "WASM.BEGINNERS", создана пользователем linkmaze, 23 авг 2007.

  1. linkmaze

    linkmaze New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2007
    Сообщения:
    60
    Пожалуйста подскажите как решить такую задачу, при входе в систему (WINXP_SP2)
    вместо оболочки запускается моя программа и после выполнения определенных
    действий из нее необходимо запускать Explorer.exe как shell. Проблема в том,
    что explorer стартует как проводник, а не как оболочка и даже последующий
    запуск explorer.exe из диспетчера задач не приводит к старту оболочки, хотя
    при обычной загрузке и последующем завершении и запуске процесса explorer.exe из
    диспетчера задач оболочка включается нормально. Использую для
    запуска explorer`a CreateProcess с флагом CREATE_NEW_CONSOLE.
    Программу из которой запускается explorer прописываю в реестр:
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
    "Shell"="MyProgram.exe".
    Заранее большое спасибо.
     
  2. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    незнаю подойдёт ли, просто идея, может изменить параметр шелл и сделать logoff/logon
    пробовал кстати восстановить этот параметр перед запуском експлорера?
     
  3. core

    core New Member

    Публикаций:
    0
    Регистрация:
    9 июн 2007
    Сообщения:
    24
    Вопрос поставлен не внятно.
     
  4. linkmaze

    linkmaze New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2007
    Сообщения:
    60
    Спасибо после изменения параметра Shell c "MyProgram.exe" на "explorer.exe"
    перед вызовом CreateProcess explorer запустился как оболочка но есть проблема,
    вот код программы-примера на С:

    HKEY key;
    PROCESS_INFORMATION *pinf=new(PROCESS_INFORMATION) ;
    STARTUPINFO *g=new(STARTUPINFO);
    g->cb=sizeof(STARTUPINFO);
    g->cbReserved2=0;
    g->dwFlags=STARTF_RUNFULLSCREEN;
    g->lpReserved=NULL;
    g->lpReserved2=NULL;
    g->lpTitle=NULL;
    g->lpDesktop="WinSta0\\default";
    g->dwX=0;
    g->dwY=0;
    g->dwXSize=0;
    g->dwYSize=0;
    g->dwXCountChars=0;
    g->dwYCountChars=0;
    g->wShowWindow=5;
    g->dwFillAttribute=0;
    getche();
    RegOpenKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\WindowsNT\\CurrentVersion\\Winlogon",&key);
    RegSetValueEx(key,"shell",0,REG_SZ,(BYTE*)"explorer.exe",12);
    RegCloseKey(key);
    CreateProcess("d:\\windows\\explorer.exe",NULL,NULL,NULL,false,CREATE_NEW_CONSOLE,NULL,NULL,g,pinf);
    RegOpenKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\WindowsNT\\CurrentVersion\\Winlogon",&key);
    RegSetValueEx(key,"shell",0,REG_SZ,(BYTE*)"c:\\windows\\MyProgram.exe",24);
    RegCloseKey(key);

    этот код почему-то запускает explorer как проводник, а при удалении строк
    после CreateProcess explorer легко стартует как оболочка. Но мне нужно чтобы
    моя программа всегда загружалась при старте системы.
    Вообще непонятно отчего зависит запуск explorer`а как оболочки или как проводника.
    А на счет logoff/logon не совсем понял.
     
  5. HoBleen

    HoBleen New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    77
    Видимо осел думает так:
    Если в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell прописан експлорер и еще не запущен ни один мой экземпляр, то нужно стартовать в качестве шелла.
    Если в реестре в качестве шелла записано что-то другое, то ессно надо стартовать как проводник, ибо я не назначен шеллом.

    Дождись проверки реестра експлорером, например, жди появления панели задач, а после изменяй значение параметра обратно.
     
  6. linkmaze

    linkmaze New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2007
    Сообщения:
    60
    Спасибо. Добавил после CreateProcess
    Sleep(4000);
    и все пошло.