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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2010, 13:10   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
Вопрос Передача значений колонки ListView в функцию.

Привет всем=)
Вот суть темы...
Есть ListView есть кнопка.
При старте программы ListView запоняется списком процессов и их ID в две колонки(Process и PID).

Как из колонки PID
взять значение выделенной строки в общем списке и передать на обработку кнопки(OnClick)?

Код:
unit MainUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, TlHelp32;

type
  TMainForm = class(TForm)
    ListView: TListView;
    Button: TButton;
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;

implementation

{$R *.dfm}

Function ProcessTerminate(PID: Cardinal): Boolean;
Var
HToken: THandle;
SeDebugNameValue: Int64;
Tkp: TOKEN_PRIVILEGES;
ReturnLength: Cardinal;
HProcess: THandle;
Begin
Result:=False;
If Not OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES
Or TOKEN_QUERY,HToken) Then
Exit;
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;
HProcess:=OpenProcess(PROCESS_TERMINATE,FALSE,PID);
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;

procedure TMainForm.FormShow(Sender: TObject);
var
PE: TProcessEntry32;
FSnap: THandle;
Item: TListItem;
begin
  ListView.Clear;
 FSnap:= Tlhelp32.CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
 PE.dwSize:= SizeOf(PE);
 if (Tlhelp32.Process32First(FSnap,PE)) Then
  Repeat
    Item := Listview.Items.Add;
       Item.Caption := PE.szExeFile;
       Item.SubItems.Append(IntToStr(Pe.th32ProcessID));
   Until Not Process32Next(FSnap,PE)
end;

end.
Для кнопки использую:
Код:
procedure TMainForm.ButtonClick(Sender: TObject);
begin
ProcessTerminate(StrToInt({--как сюда передать значение колонки PID в выделеной строке?--}));
end;
Как передать значение колонки PID выделеной строки на обработчик OnClick?

исходный код прикрепил.
Вложения
Тип файла: zip ProcList+Kil.zip (2.7 Кб, 19 просмотров)
Человек_Борща вне форума Ответить с цитированием
Старый 02.04.2010, 15:50   #2
bitSoft
Programming...
Форумчанин
 
Аватар для bitSoft
 
Регистрация: 13.03.2010
Сообщений: 198
По умолчанию

Код:
procedure TMainForm.ButtonClick(Sender: TObject);
begin
ProcessTerminate(StrToInt(ListView.Selected.Subitems[0]));
end;
Код:
With TProgrammersForum.Create do  AddNewTopic('Title','Content...');
bitSoft вне форума Ответить с цитированием
Старый 02.04.2010, 19:49   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

хм спасибо это работает.. от вопрос того же характера..

есть:
Код:
procedure TProcListForm.KillBtnClick(Sender: TObject);
begin
KillTask(ProcList.Selected.Caption[0]); //убивает процесс по имени.
end;
на это ругалось что не возможно применить так-как длинна неизвестна.. и нужно использовать Lenght или SetLenght.

исправил так:
Код:
procedure TProcListForm.KillBtnClick(Sender: TObject);
begin
KillTask(IntToStr(Length(ProcList.Selected.Caption)));
end;
компилирует..
но по нажатию кнопки ничего не происходит.. я в тупике...
Человек_Борща вне форума Ответить с цитированием
Старый 02.04.2010, 19:56   #4
bitSoft
Programming...
Форумчанин
 
Аватар для bitSoft
 
Регистрация: 13.03.2010
Сообщений: 198
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
хм спасибо это работает.. от вопрос того же характера..

есть:
Код:
procedure TProcListForm.KillBtnClick(Sender: TObject);
begin
KillTask(ProcList.Selected.Caption[0]); //убивает процесс по имени.
end;
на это ругалось что не возможно применить так-как длинна неизвестна.. и нужно использовать Lenght или SetLenght.

исправил так:
Код:
procedure TProcListForm.KillBtnClick(Sender: TObject);
begin
KillTask(IntToStr(Length(ProcList.Selected.Caption)));
end;
компилирует..
но по нажатию кнопки ничего не происходит.. я в тупике...
Zdesi ne priciom Length() , Zdelai tak
Код:
procedure TProcListForm.KillBtnClick(Sender: TObject);
begin
 KillTask(ProcList.Selected.Caption); //
end;
Код:
With TProgrammersForum.Create do  AddNewTopic('Title','Content...');
bitSoft вне форума Ответить с цитированием
Старый 02.04.2010, 21:09   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Спасибо работает=) +репа
Человек_Борща вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ListView добавление текста в две колонки Shouldercannon Общие вопросы Delphi 3 02.04.2010 21:18
listview и колонки. blackstersl Общие вопросы Delphi 3 24.06.2009 15:52
Передача массива в функцию Vistar Общие вопросы C/C++ 1 27.04.2009 08:08
Взаимодействие ListView с другими объектами. Передача Turbine Компоненты Delphi 0 13.08.2008 22:40
передача указателя в функцию arturka Помощь студентам 3 06.07.2008 00:25