Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.04.2012, 16:48
m1sclick m1sclick вне форума
Начинающий
 
Регистрация: 04.07.2011
Адрес: Украина
Сообщения: 186
Версия Delphi: 2010
Репутация: 2094
По умолчанию Помогите убить процесс.

Я очень люблю поиграть в игры, а именно в игру под названием Vindictus. Но при этом мне еще мне нужно регулярно учить язык Java. И что-бы мне легче было читать книгу я на Delphi написал маленькую программку которая мониторит все запущенные процессы в системе и если я наиграл больше 2 часов игры в день но при этом не прочитал час книгу она должна вырубать процесс с игрой. Все вроде было нормально(т.к. всегда сначала читал книгу а потом уже играл), а вчера решил по экспериментировать. И выходит так что процесс игры ни в какую не хочет завершаться.
Что я пробовал:
Первая попытка: Получаю PID игры и при помощи
Код:
TerminateProcess(OpenProcess(PROCESS_TERMINATE, false, GamePID), 0);
пытаюсь убить процесс. Пытаюсь, но не могу. Проверял через диспетчер задач - PID правильный находит. Читалку книги убивает, а игру никак. Ну да и бог с ним.
Вторая попытка: Получаю хендл окна и пытаюсь по нему закрыть
Код:
          h := FindWindow(nil, 'Vindictus EU');
          if h <> 0 then
            CloseWindow(h);
Но черт побери и так ничего не выходит.
Третья попытка: Нашел в интернете какой-то непонятный код якобы убивающий даже системный процесс
Код:
function TForm2.ProcessTerminate(dwPID:Cardinal):Boolean;
var
 hToken:THandle;
 SeDebugNameValue:Int64;
 tkp:TOKEN_PRIVILEGES;
 ReturnLength:Cardinal;
 hProcess:THandle;
begin
 Result:=false;
 // Добавляем привилегию SeDebugPrivilege
 // Для начала получаем токен нашего процесса
 if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES
  or TOKEN_QUERY, hToken ) then
    exit;

 // Получаем LUID привилегии
 if not LookupPrivilegeValue( nil, 'SeDebugPrivilege', SeDebugNameValue )
  then begin
   CloseHandle(hToken);
   exit;
  end;

 tkp.PrivilegeCount:= 1;
 tkp.Privileges[0].Luid := SeDebugNameValue;
 tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;

 // Добавляем привилегию к нашему процессу
 AdjustTokenPrivileges(hToken,false,tkp,SizeOf(tkp),tkp,ReturnLength);
 if GetLastError()<> ERROR_SUCCESS  then exit;

 // Завершаем процесс. Если у нас есть SeDebugPrivilege, то мы можем
 // завершить и системный процесс
 // Получаем дескриптор процесса для его завершения
 hProcess := OpenProcess(PROCESS_TERMINATE, FALSE, dwPID);
 if hProcess =0  then exit;
  // Завершаем процесс
   if not TerminateProcess(hProcess, DWORD(-1))
    then exit;
 CloseHandle( hProcess );

 // Удаляем привилегию
 tkp.Privileges[0].Attributes := 0;
 AdjustTokenPrivileges(hToken, FALSE, tkp, SizeOf(tkp), tkp, ReturnLength);
 if GetLastError() <>  ERROR_SUCCESS
  then exit;

 Result:=true;
end;

Но и тут облом вышел.
В общем как я понял из того что показал мне волшебный F7 я не могу получить дескриптор процесса для его завершения. То есть OpenProcess из последней попытки всегда возвращает 0 когда я пытаюсь закрыть игру, а с другими приложениями(STDUViever) нормально возвращает и завершает.
Собственно что посоветовать можете?

Последний раз редактировалось m1sclick, 29.04.2012 в 17:26.
Ответить с цитированием
  #2  
Старый 29.04.2012, 20:11
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,090
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Для начала - попробовать запустить монитор ои имени Администратора и посмотреть - сработает ли.
Ответить с цитированием
  #3  
Старый 29.04.2012, 22:00
m1sclick m1sclick вне форума
Начинающий
 
Регистрация: 04.07.2011
Адрес: Украина
Сообщения: 186
Версия Delphi: 2010
Репутация: 2094
По умолчанию

Какой монитор?
Вообще как программа моя так и сама игра запускаются от имени администратора. Та и через диспетчер задач нормально закрывается.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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


Часовой пояс GMT +3, время: 23:29.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025