Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как запустить explorer.exe в win7 
:(
    Опции темы
dimokx87
  Дата 14.3.2010, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 27.11.2009

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



Подскажите пожалуйста, как мне запустить explorer.exe после его отключения в windows 7?
Код

winexec('explorer.exe',sw_show);

Не работает.
Пробовал вот так:
Код

ZeroMemory(@SUInfo,SizeOf(TStartUpInfo));
with SUInfo do
begin
 cb:=SizeOf(TStartUpInfo);
 dwFlags:=STARTF_USESHOWWINDOW;
 wShowWindow:=SW_SHOWNORMAL;
end;
ZeroMemory(@ProcInfo,SizeOf(TProcessInformation));
FileName := 'explorer.exe ';
Result := CreateProcess(nil,PChar(FileName), nil, nil, False, CREATE_DEFAULT_ERROR_MODE , nil, nil, SUInfo, ProcInfo);

После выполнения запускается explorer.exe, вылетает окно Библиотека но панель задач и меню пуск не появляются. Как мне сделать правильно?
PM MAIL   Вверх
bems
Дата 14.3.2010, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Он точно прописан оболочкой?


--------------------
Обижено школьников: 8
PM MAIL   Вверх
dimokx87
Дата 14.3.2010, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 27.11.2009

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



В смысле? А где это прописывается? smile 
PM MAIL   Вверх
bems
Дата 14.3.2010, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Это прописывается в ключе реестра Shell, но эксплорер это значение по умолчанию, и если там ничего не менялось то всё в порядке. 
Под "отключением" ты же не имел в виду правку реестра в этом месте?


--------------------
Обижено школьников: 8
PM MAIL   Вверх
dimokx87
Дата 14.3.2010, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 27.11.2009

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



Нет реестр я не трогал. И под отключением я не имею правку реестра. smile 
Программа просто сначала убивает процесс, а потом мне нужно его запустить корректно.
PM MAIL   Вверх
dimokx87
Дата 16.3.2010, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 27.11.2009

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



Ой, немножко неправильно, поправил:
Код

 Result := CreateProcess(nil,PChar(FileName), nil, nil, False, 0 , nil, nil, SUInfo, ProcInfo);

Но всё равно в win7 та же проблема. В XP отлично работает.
PM MAIL   Вверх
bartram
Дата 16.3.2010, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1606
Регистрация: 22.2.2004
Где: Russia, Samara

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



dimokx87, а он у вас точно убивается? У меня на Win7 работает. Я удаляю процесс из диспетчера задач. Потом через Пуск > Выполнить его запускаю, он корректно запускается. По идее поведение описанное вами происходит когда запущено два экземпляра Explorer.exe. Т.е. допустим у вас запущен Explorer.exe, вы пытаетесь с помощью приведенного кода запустить ещё один и
Цитата(dimokx87 @  14.3.2010,  15:21 Найти цитируемый пост)
После выполнения запускается explorer.exe, вылетает окно Библиотека но панель задач и меню пуск не появляются.




--------------------
В каждом из нас спит гений, но с каждым днем все крепче ;-)
bartram.ru
Twitter
user posted image 

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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

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



x32 или x64?

Возможно, проблема в перенаправлении файловой системы.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
cemick
Дата 17.3.2010, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Попробовал в WinSeven 64bit выполнить winexec('explorer.exe',sw_show);. Открылось окно экплорера, но не появилась панель задач.

Это сообщение отредактировал(а) cemick - 17.3.2010, 12:15
PM MAIL WWW   Вверх
DarkProg
Дата 17.3.2010, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


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

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



А попробуй сделать запуск от имени администратора, ну есть функция, такая, в библиотеке advapi32.dll, и вней указываешь пользователя и ещё кучу параметров, в том числе есть параметр под названием "Параметр командной строки", я именно этот параметр использовал когда мне нужно было запустить определёный файл(в вашем случае просто "explorer"), а пример как её пользоваться есть в DRKB.
Кстати вот он: smile
Код

unit Main;    
    
interface    
    
uses  
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   
  Dialogs, StdCtrls, ShellApi;    
    
type    
  TForm1 = class(TForm)    
    Button1: TButton;    
    procedure Button1Click(Sender: TObject);    
  end;    
    
var    
  Form1: TForm1;    
    
implementation    
    
function CreateProcessWithLogonW(   
  lpUsername: PWideChar;    
  lpDomain: PWideChar;    
  lpPassword: PWideChar;    
  dwLogonFlags: DWORD;    
  lpApplicationName: PWideChar;    
  lpCommandLine: PWideChar;    
  dwCreationFlags: DWORD;    
  lpEnvironment: Pointer;    
  lpCurrentDirectory: PWideChar;    
  const lpStartupInfo: _STARTUPINFOA;    
  var lpProcessInfo: PROCESS_INFORMATION): BOOL; stdcall; external 'advapi32.dll' name 'CreateProcessWithLogonW';    
    
    
{$R *.dfm}    
    
procedure TForm1.Button1Click(Sender: TObject);    
var    
  hLib:THandle;    
  si: _STARTUPINFOA;    
  pi: Process_Information;    
begin    
  ZeroMemory(@Si, Sizeof(si));   
  si.cb := SizeOf(si);    
  CreateProcessWithLogonw('administrator', nil, 'master', 1, nil, 'notepad', 0, nil, nil, si, pi);    
end;    
    
end.  


Вообще странная проблема, когда я такой трюк под Vista проделывал у меня всё нормально запускалось, а вот убиваться не сильно жаждало(если честно, то когда запускал из под Делфи на выполнение и прогон, то всё было нормально и посе компиляции всё было тип-топ, но после перезагрузки, если запустить саму прогу, то она убивала процесс, а тот заново создавался, с чем связано так и не узнал, хотя под ХР полностью работает)


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
dimokx87
Дата 20.3.2010, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 27.11.2009

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



Понял в чём причина.
bartram, ты абсолютно прав, после удаления процесса, он буквально через секунду автоматически запускается ( это наверное защита windows от смерти эксплорера smile ), поэтому при попытке запустить explorer вылетает окно, т.к. он уже запущен. 
У меня программа с таймером, где каждые 0.7 секунды проверяется не запущен ли эксплорер и если он запущен, то сразу убивался. Поэтому я не видел его и думал, что процесс убит. smile 
PM MAIL   Вверх
dimokx87
Дата 20.3.2010, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 27.11.2009

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



Странно, не могу понять...
Я переделал программу так чтобы она сначала убивала эксплорер и удерживала в таком состоянии, а когда нужно просто останавливаю убивающий таймер, и без запуска, в надежде что винда сама запустит. Но эксплорер не запускается. smile 
PM MAIL   Вверх
dimokx87
Дата 21.3.2010, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 27.11.2009

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



 smile Нашёл решение!
Код

 CreateProcess(PChar('C:\\Windows\\' + FileName),nil, nil, nil, False,0, nil, nil, SUInfo, ProcInfo);

Так отлично работает и в win7 и XP! smile 
Вот только в xp столкнулся с другой проблемой. После запуска эксплорера, иногда перестает переключаться язык и приходится перезагружать комп.
PM MAIL   Вверх
malor
  Дата 7.11.2011, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 632
Регистрация: 17.11.2006

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



Такая же задача по запуску Explorer'а из своей программы (прописанной в параметре Shell реестра).
user posted image

Сам код:
Код
procedure TFormRunExplorer.btRunExplorerClick(Sender: TObject);
var
  FileName : String;
  SUInfo : TStartUpInfo;
  ProcInfo : TProcessInformation;
begin
  //ShellExecute(Handle, 'open', 'explorer.exe', 'C:\Windows\system32', '', SW_SHOW);
  //WinExec(PANsiChar('TASKKILL /F /IM explorer.exe'), SW_HIDE);
  //sleep(5000);
  //ShellExecute(Handle,'open','C:\WINDOWS\Explorer.EXE',nil,nil,SW_ShowNormal);

  ZeroMemory(@SUInfo, SizeOf(TStartUpInfo));
  with SUInfo do
  begin
   cb := SizeOf(TStartUpInfo);
   dwFlags := STARTF_USESHOWWINDOW;
   wShowWindow := SW_SHOWNORMAL;
  end;

  FileName := 'Explorer.exe';
  CreateProcess(PChar('C:\\Windows\\' + FileName), nil, nil, nil, False, 0, nil, nil, SUInfo, ProcInfo);
end;


Почему в результате имеем проводник, а не истинный рабочий стол с Панелью задач/Треем и прочим?

P.S. Вести с фронта:
1. Запуск explorer.exe

2. EXPLORER.EXE - Строковые параметры

3. 
 ! 
bems
В следующий раз я тебя заблокирую без помощи Дельфи


Windows XP SP3 / Win7 Ultimate

Это сообщение отредактировал(а) bems - 7.11.2011, 11:31

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  RunExploer_1.png 67,74 Kb
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

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


 




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


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

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