Translate into English
+ Расширенный поиск
  • Пользователи
  • Правила форума
  • Регистрация
  • Сайт
  • Вступай в группу Гиды по форуму (подробнее)
  • Все новости форума можно узнать из нашего паблика в ВК
  • Еженедельные обновления на форуме можно узнать здесь
Вернуться   Prosims: новости, обзоры, дополнения, файлы, коды, объекты, скины и скриншоты The Sims 3 и The Sims 2 — Симы форева ;) > The Sims 2: игра и дополнения > Программы, патчи и коды > Программы
Перезагрузить страницу SInt - программа для совмещения аддонов реестровым методом
Результаты опроса: Развивать программу дальше?
Да 417 97.20%
Нет 12 2.80%
Голосовавшие: 429. Вы ещё не голосовали в этом опросе

Ответ
  Опции темы Опции просмотра
Старый 14.03.2009, 21:07   #1
Мальчег AnriRS меню пользователя AnriRS
активист

 Аватар для AnriRS
 
Репутация: 2422  
Сообщений: 1,102
По умолчанию

Оригами
Идея снимать процесс вообще-то твоя была

Функция TermanateProcess способна установить практически любой процесс в операционной системе, зная его номер. Остановка производится остановкой всех потоков. Предупреждение об остановке процессу не посылается, что с одной стороны не позволяет корректно освободить занятые им ресурсы, с другой - не дает ему воспрепятствовать остановке.
Кусок кода Sint

Код:
procedure TBrk.NextProc(processID: DWORD);
var
  szProcessName: array[0..MAX_PATH-1] of char;
  hProcess: THandle;
  hMod: HMODULE;
  cbNeeded: DWORD;
begin
  szProcessName:= 'unknown';
  hProcess:= OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,
     FALSE, processID); // запрашиваем доступ на получении информации о процессе
  if (hProcess <> Null) then
    if EnumProcessModules(hProcess, @hMod, sizeof(hMod), cbNeeded) then
      GetModuleBaseName(hProcess, hMod, szProcessName, sizeof(szProcessName)); // получаем имя процесса
   CloseHandle(hProcess); // освобождаем дескриптор

  if blk.IndexOf(szProcessName)>=0 then // если имя в "черном списке"
  begin
    hProcess:= OpenProcess(PROCESS_TERMINATE, FALSE, processID); // запрашиваем доступ на остановку процесса
    if (hProcess=Null) then exit; // если нет доступа, то облом
    TerminateProcess(hProcess,	0); // останавливаем процесс
    CloseHandle(hProcess); // освобождаем дескриптор
    AddDebug('>> siStopProc::NextProc >> Terminate %s (Process ID: %u)', [szProcessName, processID]);
    MesProgressOp(sIced(Format('Блокирован %s (Process ID: %u)', [szProcessName, processID]), 3));
  end
end;

procedure TBrk.timer1Timer(Sender: TObject);
// обработчик таймера, вызывается каждые 10 мс
var
   cbNeeded, cProcesses: DWORD;
   i: integer;
begin
   if (not EnumProcesses(@aProcesses, sizeof(aProcesses), cbNeeded)) then exit; // если невозможно запросить список процессов, то облом
   cProcesses := cbNeeded div sizeof(DWORD); // количество процессов

   for i:= 0 to cProcesses-1 do NextProc(aProcesses[i]); // проверяем запущенные процессы
end;
AnriRS вне форума   Ответить с цитированием
AnriRS
Посмотреть профиль
Отправить личное сообщение для AnriRS
Найти ещё сообщения от AnriRS
Ответ

« Предыдущая тема | Следующая тема »

Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Версия для печати Версия для печати
Отправить по электронной почте Отправить по электронной почте
Опции просмотра
Линейный вид Линейный вид
Комбинированный вид Комбинированный вид
Древовидный вид Древовидный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Обратная связь / Архив / Вверх

Часовой пояс GMT +4, время: 12:06

vBulletin® Version 3.6.12. Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
При сотрудничестве с Electronic Arts Inc.
EA Россия

Запрещено копирование и публикация любых материалов форума на другие порталы
без письменного разрешения администрации и указания ссылки на prosims.ru

Рейтинг@Mail.ru