Помощь - Поиск - Пользователи - Календарь
Полная версия: Получение списка запущенных приложений
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
#$# PaVeL #$#
Как получить список запущенных приложений?
В DRKB способ не стабильный....
volvo
Ну, тогда сначала объясни, ЧЕМ тот способ нестабилен, и что ты вкладываешь в понятие стабильности, а потом будем думать, как сделать то, что тебе надо...
volvo
Так... Значит, пока есть время - я тут кое-что нашел, должно тоже давать список запущенных приложений:
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
на эту тему можно задать вопрос по icq 7744799

xds
Бывало ещё и так:
#$# PaVeL #$#
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
вот я писал оснастку для консоли управления Windows, в ней происходит мониторинг и сбор информации о нужных мне процессах... так же пригодиться всем кто хочет научиться писать оснастки для консоли управления Windows..



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

MMC_Demo.zip (доработанная версия)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.