Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2011, 20:02   #1
DENIS_1992
Пользователь
 
Регистрация: 29.05.2011
Сообщений: 24
Лампочка Работа с процессами Windows XP

Пишу курсовую редактор реестра.
Необходимо програмно при нажатии на кнопку, завершить процесс в диспетчере задач explorer.exe, а затем сново запустить explorer.exe.
Помогите пожалуйста!!!
DENIS_1992 вне форума Ответить с цитированием
Старый 01.06.2011, 02:16   #2
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

А зачем редактору реестра это делать?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 01.06.2011, 11:31   #3
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Например так
Код:
// Убиваем эксплорер
winexec ('taskkill /f /im explorer.exe', SW_HIDE);
// ждём 2 секунды
sleep (2000);
// Запускаем
winexec ('explorer.exe', sw_hide);

Последний раз редактировалось FaTaL; 01.06.2011 в 11:39.
FaTaL вне форума Ответить с цитированием
Старый 01.06.2011, 14:15   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Сообщение от FaTaL Посмотреть сообщение
Например так
Код:
// Убиваем эксплорер
winexec ('taskkill /f /im explorer.exe', SW_HIDE);
// ждём 2 секунды
sleep (2000);
// Запускаем
winexec ('explorer.exe', sw_hide);
Вы бред написали //без обид

А если explorer по какой-то причине не закрывается(Его что-то держит)?
Запустите ещё один, а затем и ещё 100500... Зачем же так?

Если уж программируете, то программируйте правильно=)

Код:
uses TlHelp32;

procedure REstart(aProcessName: string);
  function GetProcessPID(ExeFileName: string): Cardinal;
  var
    ContinueLoop: Bool;
    FSnapshotHandle: THandle;
    FProcessEntry32: TProcessEntry32;
  begin
    Result := 0;
    FSnapshotHandle := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    FProcessEntry32.DwSize := Sizeof(FProcessEntry32);
    ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
    while Integer(ContinueLoop) <> 0 do
    begin
      if ((AnsiUpperCase(ExtractFileName(FProcessEntry32.SzExeFile)) =
        AnsiUpperCase(ExeFileName)) or (AnsiUpperCase(FProcessEntry32.SzExeFile) =
        AnsiUpperCase(ExeFileName))) then
        Result := FProcessEntry32.Th32ProcessID;
      ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
    end;
    CloseHandle(FSnapshotHandle);
  end;


var
  ahProcess: Thandle;
begin
  ahProcess := OpenProcess(PROCESS_ALL_ACCESS, False, GetProcessPID(aProcessName));
  if ahProcess <> 0 then
  begin
    try
      TerminateProcess(ahProcess, 0);
      WaitForSingleObject(ahProcess, INFINITE); //Ждём завершения процесса. 
      WinExec(PChar(aProcessName), SW_SHOW); //запускаем
    finally
      CloseHandle(ahProcess);
    end;
  end;
end;
Человек_Борща вне форума Ответить с цитированием
Старый 01.06.2011, 14:29   #5
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Вы бред написали //без обид

А если explorer по какой-то причине не закрывается(Его что-то держит)?
Ты хоть знаешь, что делает taskkill с /F?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 01.06.2011, 15:04   #6
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Да запросто может не убиться. Нет доступа, вылезло окно антивируса с предупреждением и ждёт ввода пользователя и тут бац - вторая копия.

Второй вариант, кстати, тоже не айс, если будет запущено несколько процессов с одинаковыми именами.
пыщь

Последний раз редактировалось JTG; 01.06.2011 в 15:07.
JTG вне форума Ответить с цитированием
Старый 01.06.2011, 15:07   #7
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Ну ты как бы отделяй мух от котлет: или использование taskkill на корню не верно, или же у кого-то мозгов не хватает обработку ошибок расставить.

Во втором случае отказ от WinExec ничего, собственно, не изменит. Что и показывает пример Человека_Борща, у которого с обработкой ошибок всегда проблемы.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 01.06.2011, 15:43   #8
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Во втором случае либо не произойдёт ничего, если не хватит прав открыть процесс (PROCESS_ALL_ACCESS слишком оптимистично), запустит процесс только либо после завершения предыдущего, или повиснет в бесконечном ожидании ahProcess, если TerminateProcess инициирует завершение процесса, но то упрётся рогом в результате глюка (отладчик в процессе трассировки внутренностей или ночная сборка файрфокса, например )
пыщь
JTG вне форума Ответить с цитированием
Старый 01.06.2011, 22:07   #9
DENIS_1992
Пользователь
 
Регистрация: 29.05.2011
Сообщений: 24
По умолчанию

При изменении настроек в реестре необходимо перезапускать систему, чтобы изменения вступили в силу, а если убить процесс explorer.exe, а затем запустить заново, то большинство настроек вступят в силу... Программа предназначена для простых пользователей, процесс завершения и запуска процесса explorer.exe будет как бы обновлением настроек в редакторе реестра...всё работает с администраторскими правами, а будут ли ограничения при выполнении данных действий, если ты не администратор???
Спасибо всем за помощь!!!
DENIS_1992 вне форума Ответить с цитированием
Старый 01.06.2011, 22:12   #10
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Вы обалдели, что-ли? Это делается рассылкой уведомлений об изменении настроек.

Про какие конкретно настройки идёт речь?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с процессами диспетчера задач Windows XP DENIS_1992 Помощь студентам 0 30.05.2011 21:26
Работа с процессами диспетчера задач Windows XP DENIS_1992 Помощь студентам 0 30.05.2011 21:25
Работа с Windows процессами niki2012 Общие вопросы Delphi 4 07.03.2011 14:44
работа с процессами niki2012 Общие вопросы Delphi 12 11.01.2011 19:16
[Вопросы]Работа с процессами. Процессы изнутри Человек_Борща Общие вопросы Delphi 2 03.04.2010 18:37