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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.08.2014, 11:39   #1
jone
Форумчанин
 
Аватар для jone
 
Регистрация: 27.09.2008
Сообщений: 152
По умолчанию Пример для EndTask

function EndTask(Wnd: HWND; PrID: DWORD; Title: PChar; Flags: DWORD): DWORD; stdcall; external "user32.dll";

есть такая функция

нашёл

Код:
Итак начнем: 
Wnd - ссылка на окно, процесс которого нужно завершить 
PrID - идентификатор процесса, который нужно завершить 
( используется либо Wnd либо PrID. Преимущество отдается Wnd) 
Title - используется если не задан Wnd, а задан PrID. Этот текст выводится в заголовке системного окна "Приложение не реагирует ... " Если же задана ссылка на окно Wnd, то используется заголовок окна, а этот параметр игнорируется. 
Flags = 
0 - Выводится системное окно "Приложение не реагирует на системные запросы ... " с кнопками "Завершить задачу" и "Отменить" 
1 - Выводится системное окно "Приложение не реагирует на системные запросы ... " с кнопками "Подождать", "Завершить задачу" и "Отменить" 
>1 - Ничего не выводится, нриложение завершается. 

Возвращаемое значение: 
0 - Ошибка в параметрах 
2 - Пользователь нажал "Отмена" или такого процесса/окна не существует. 
3 - Процесс успешно завершен. 
4 - Пользователь нажал кнопку "Подождать"
нужен пример чтобы завершало процесс по имени с этой функцией
jone вне форума Ответить с цитированием
Старый 16.08.2014, 12:59   #2
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

GetProcessID позволяет узнать PID процесса по его имени.
OpenProcess - получает хендл процесса(HWND) по его ID.
Если мозгов хватит, то написать код не будет проблемой.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 16.08.2014, 14:15   #3
jone
Форумчанин
 
Аватар для jone
 
Регистрация: 27.09.2008
Сообщений: 152
По умолчанию

Сначало писало Privileged instruction. и ошибки

потом сделал так

Код:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,TLhelp32;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

Function getProcessId(Exename:string):Dword;
 var snap:DWORD;
 pe:TprocessEntry32;
 begin
 result:=0;
 snap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
 if snap <>INVALID_HANDLE_VALUE then begin
 pe.dwSize:=sizeof(TPROCESSENTRY32);
 if process32First(snap,pe) then
 repeat
 if pe.szExeFile=exename then begin
 result:=pe.th32ProcessID;
 closehandle(snap);
 exit;
 end;
 until not process32Next(snap,pe);
 closehandle(snap);
 result:=0;
 end;
 end;


function EndTask(Wnd: HWND; PrID: DWORD; Title: PChar; Flags: DWORD): DWORD; stdcall; external 'user32.dll';

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
i2:integer;
begin
i:=getprocessid('uTorrent.exe');
i2:=OpenProcess($0001, False, i);
         showmessage(intToStr(i)+' '+intToStr(i2));

     EndTask(i2,i,'123',3);


end;
end.
ничего не происходит почему?
jone вне форума Ответить с цитированием
Старый 16.08.2014, 18:34   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Читайте официальную документацию а не а бы что из неизвестно откуда. описание функции и её параметров чуть более чем полностью неверное.
Собственно вот она, по этой функции.
Там очень четко сказано, что функция эта не постоянная и скорее всего будет удалена из последующих версий Windows.
Если не работает, значит её уже нет.
Человек_Борща вне форума Ответить с цитированием
Старый 18.08.2014, 13:46   #5
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 977
По умолчанию

завершение самой себя через убийство процесса. только иногда может не хватить прав в винде для исполнения, но для пользовательских обычных приложений подходит. shellapi используется.

Код:
   begin
     cmd := 'open';
     fil := PChar('TASKKILL');
     par := PChar('/F /pid '+inttostr(GetCurrentProcessId));
     dir := '';
     ShellExecute(Self.Handle, cmd, fil, par, dir, SW_HIDE);
   end;
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
IliaIT вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
правильно ли записан пример для компиляции? Александр112 Visual C++ 2 09.05.2014 19:25
Записать пример для Паскаль Женька Good Помощь студентам 1 12.12.2011 21:01
Пример пользовательского интерфейса для БД Иллидан БД в Delphi 1 07.11.2010 21:51
Пример кода для воспроизведения нот - частоты нот для 80-ти клавишного пианино mutabor Свободное общение 8 09.01.2010 23:48
Как собрать пример для argtable!?? neo-210 Общие вопросы C/C++ 0 29.09.2009 00:16