Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Alexaev_OS_4.docx
Скачиваний:
1
Добавлен:
27.09.2019
Размер:
123.65 Кб
Скачать

If rbWindowBlock.Checked then EnableWindow(handlep, false);

If rbNoWindowBlock.Checked then EnableWindow(handlep, true);

end;

end;

procedure TForm1.FormCreate(Sender: TObject);

var

Num, i, j: Integer;

SH: Cardinal;

PPE : TProcessEntry32;

Full_Path, Exe_name: array [0..255]of string;

ProcessID : array [0..255] of integer;

ProcessParentID : array [0..255] of integer;

ProcessPri : array [0..255] of integer;

PTE : TThreadEntry32;

ThreadProcessID : array [0..2000] of integer;

ThreadID : array [0..2000] of integer;

ThreadPri : array [0..2000] of integer;

DT_hWnd, next_hWnd, buflen : longint;

buf:array [0..Max_Char] of Char;

count : word;

Rect : TRect;

prId,thid : dword;

begin

// получение информации о первоп процессе

Num := 0;

SH := CreateToolHelp32SnapShot(Th32cs_SnapAll, 0);

PPE.dwSize := sizeof(ProcessEntry32);

Process32First(SH, PPE);

Full_Path[Num] := PPE.szExeFile;

Exe_Name[Num] := ExtractFileName(Full_Path[Num]);

ProcessParentID[Num] := PPE.th32ParentProcessID;

ProcessID[Num] := PPE.Th32ProcessID;

Num := Num + 1;

// получение информации о других процессах

while Process32Next(SH, PPE) do

begin

Full_Path[Num] := PPE.szExeFile;

Exe_Name[Num] := ExtractFileName(Full_Path[Num]);

ProcessID[Num]:= PPE.Th32ProcessID;

ProcessPri[Num] := PPE.pcPriClassBase;

ProcessParentID[Num] := PPE.th32ParentProcessID;

Num := Num + 1;

end;

//вывод полученной информации о процессах в таблицу на форме

LProcess.Caption := 'Список процессов';

SGProcess.Cells[0, 0] := '№';

SGProcess.Cells[1, 0] := 'Имя процесса';

SGProcess.Cells[2, 0] := 'Идентификатор';

SGProcess.Cells[3, 0] := 'Приоритет';

SGProcess.Cells[4, 0] := 'Дескриптор';

SGProcess.Cells[5, 0] := 'Родит. процесс';

SGProcess.RowCount := Num + 1;

i := 1;

while i <= Num + 1 do

begin

SGProcess.Cells[0, i] := IntToStr(i);

SGProcess.Cells[1, i] := Exe_Name[i - 1];

SGProcess.Cells[2, i] := IntToStr(ProcessID[i - 1]);

SGProcess.Cells[3, i] := IntToStr(ProcessPri[i - 1]);

SGProcess.Cells[4, i] := IntToStr(OpenProcess(PROCESS_ALL_ACCESS, false, ProcessID[i - 1]));

SGProcess.Cells[5, i] := IntToStr(ProcessParentID[i - 1]);

i := i + 1;

end;

// получение информации о первом потоке

Num := 0;

PTE.dwSize := sizeof(TThreadEntry32);

Thread32First(SH, PTE);

ThreadProcessID[Num] := PTE.th32OwnerProcessID;

ThreadID[Num] := PTE.th32ThreadID;

ThreadPri[Num] := PTE.tpBasePri;

Num := Num + 1;

// получение информации о других потоках

while Thread32Next(SH, PTE) do

begin

ThreadProcessID[Num] := PTE.th32OwnerProcessID;

ThreadID[Num] := PTE.th32ThreadID;

ThreadPri[Num] := PTE.tpBasePri;

Num := Num + 1;

end;

//вывод полученной информации о потоках в таблицу на форме

LThread.Caption := 'Список потоков (для получения полного списка нпжмите Ok):';

SGThread.Cells[0, 0] := '№';

SGThread.Cells[1, 0] := 'Родит. процесс';

SGThread.Cells[2, 0] := 'Идентификатор';

SGThread.Cells[3, 0] := 'Приоритет';

SGThread.RowCount := Num + 1;

i := 1;

while i <= Num + 1 do

begin

SGThread.Cells[0, i] := IntToStr(i);

SGThread.Cells[1, i] := IntToStr(ThreadProcessID[i - 1]);

SGThread.Cells[2, i] := IntToStr(ThreadID[i - 1]);

SGThread.Cells[3, i] := IntToStr(ThreadPri[i - 1]);

//сохраним эту таблицу в массив

for j := 1 to 3 do

startThread[j, i] := SGThread.Cells[j, i];

sizeStartThread := SGThread.RowCount - 1;

i := i + 1;

end;

//Список окон

LWindow.Caption := 'Список окон (для получения полного списка нпжмите Ok):';

DT_hWnd := GetDesktopWindow; // получить дескриптор окна рабочего стола

next_hWnd := GetWindow(DT_hWnd, GW_CHILD);

count := 0;

SGWindow.RowCount := 2;

SGWindow.Cells[0, 0] := '№';

SGWindow.Cells[1, 0] := 'Дескриптор';

SGWindow.Cells[2, 0] := 'Заголовок';

SGWindow.Cells[3, 0] := 'Лево';

SGWindow.Cells[4, 0] := 'Верх';

SGWindow.Cells[5, 0] := 'Право';

SGWindow.Cells[6, 0] := 'Низ';

SGWindow.Cells[7, 0] := 'Род. процесс';

SGWindow.Cells[8, 0] := 'Род. поток';

SGWindow.Cells[9, 0] := 'Видимость';

while next_HWnd <> 0 do

begin

buflen := GetWindowText(next_HWnd, @buf, MaX_CHAR);

if buflen > 0 then

begin

SGWindow.Cells[0, count + 1] := IntToStr(count + 1);

SGWindow.Cells[1, count + 1] := Format('%10d', [next_hWnd]);

SGWindow.Cells[2, count + 1] := Format('%s', [String(buf)]);

GetWindowRect(next_Hwnd,Rect);

thId := GetWindowThreadProcessId(next_Hwnd,@Prid);

SGWindow.Cells[3, count + 1] := IntToStr(Rect.Left);

SGWindow.Cells[4, count + 1] := IntToStr(Rect.Top);

SGWindow.Cells[5, count + 1] := IntToStr(Rect.Right);

SGWindow.Cells[6, count + 1] := IntToStr(Rect.Bottom);

SGWindow.Cells[7, count + 1] := IntToStr(Prid);

SGWindow.Cells[8, count + 1] := IntToStr(thid);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]