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);