Помощь - Поиск - Пользователи - Календарь
Полная версия: Получение списка запущенных приложений
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Delphi
#$# 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 (доработанная версия)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.