Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Получение списка запущенных приложений

Автор: #$# PaVeL #$# 22.07.2006 8:01

Как получить список запущенных приложений?
В DRKB способ не стабильный....

Автор: volvo 22.07.2006 15:33

Ну, тогда сначала объясни, ЧЕМ тот способ нестабилен, и что ты вкладываешь в понятие стабильности, а потом будем думать, как сделать то, что тебе надо...

Автор: volvo 24.07.2006 0:35

Так... Значит, пока есть время - я тут кое-что нашел, должно тоже давать список запущенных приложений:

function EnumWindowsProc(wnd:HWND; lParam: LPARAM):BOOL; stdcall;
var
wn:array[0..MAX_PATH-1] of char;
begin
result:=true;
if IsWindowVisible(wnd) and (GetParent(wnd)=0) and (GetWindow(wnd,GW_OWNER)=0) and
((GetWindowLong(wnd,GWL_EXSTYLE) and WS_EX_TOOLWINDOW)=0) then
begin
GetWindowText(wnd,wn,MAX_PATH);
Form1.Memo1.Lines.Add('"'+string(wn)+'"');
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Clear;
EnumWindows(@EnumWindowsProc,0);
end;

Автор: mj 24.07.2006 0:55

на эту тему можно задать вопрос по icq 7744799


Автор: xds 24.07.2006 3:55

Бывало ещё и так:


Прикрепленные файлы
Прикрепленный файл  ProcessList.zip ( 1.06 килобайт ) Кол-во скачиваний: 236

Автор: #$# PaVeL #$# 24.07.2006 7:31

blink.gif Странно видимо ошибка где-то в самом коде!
Суть должна была быть такой:
Есть поток класса THread в нем цикл постоянно отлавливающий приложения, потом сверяет зарегестрирован ли такой процесс в списке* если нет, то запускается поток слежения за ним**

Есть ещё один вопрос: в каком Uses`е лежит TaskFirst, TaskNext и.т.д.?

*Список основанн на массиве


Const
MaxThreadBox = MaxByte * 3;
FreeSlotValue = 0;

Var
TrackingProcessBoxs: Array[1..MaxThreadBox] Of HWND;

Function ExistHWND(iWnd: HWND): Boolean;
Procedure FreeBox(iIndex: Integer);
Function GetFreeBox: Integer;
Function AddUseBox(iWnd: HWND): Integer;
///...
Uses ThreadTrackingProcess_Unit, Main_Form;

Function ExistHWND(iWnd: HWND): Boolean;
Var
VCurrentPosScan: Integer;
Begin
Result := False;
For VCurrentPosScan := 1 To MaxThreadBox Do
Begin
If TrackingProcessBoxs[VCurrentPosScan] = iWnd Then
Begin
Result := True;
Break;
End;
End;
End;

Procedure FreeBox(iIndex: Integer);
Begin
TrackingProcessBoxs[iIndex] := FreeSlotValue;
End;

Function GetFreeBox: Integer;
Var
VCurrentPosScan: Integer;
Begin
Result := FreeSlotValue;
For VCurrentPosScan := 1 To MaxThreadBox Do
Begin
If TrackingProcessBoxs[VCurrentPosScan] = FreeSlotValue Then
Begin
Result := VCurrentPosScan;
Break;
End;
End;
End;

Function AddUseBox(iWnd: HWND): Integer;
Begin
Result := GetFreeBox;
TrackingProcessBoxs[Result] := iWnd;
End;


**Поток слежения запускается без потокаTHread,
Второй вариант написанный в DRKB в разделе "Как создавать потоки без класса TThread?"

Если кто может просьба ПОМОГИТЕ!

Автор: mj 25.07.2006 19:08

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



Я недавно писал оснастку для mmc (консоль управления windows), в которой производиться наблюдение за процессами, сбор информации и монторинг интересующих нас процеесов... Исходники прилагаються...

MMC_Demo.zip (доработанная версия)


Прикрепленные файлы
Прикрепленный файл  mmc_test.zip ( 166.35 килобайт ) Кол-во скачиваний: 242
Прикрепленный файл  MMC_Demo.zip ( 190.41 килобайт ) Кол-во скачиваний: 225