Насколько я знаю, вкладка «Приложение» в диспетчере задач представляет собой список окон верхнего уровня, которые не принадлежат другим окнам, не имеют родительских окон и не являются окнами инструментов.В моем Process Info у меня есть модуль AppInfo.pas, который возвращает список окон с такими характеристиками, и этот список совпадает с тем, что вы видите в диспетчере задач.Вот основная часть кода, которая написана как функция обратного вызова для функции API EnumWindows:
{$IFDEF DELPHI2007UP}
class function TAppWindowCollection.EnumWinProc(wHandle: HWND; lparam: integer): Bool;
{$ELSE}
function EnumWinProc(wHandle: HWND; lparam: integer): Bool; stdcall;
{$ENDIF}
Const
MAX_TEXT = MAX_PATH;
var
WindowItem : TWindowItem;
strText,strClass : array [0..MAX_TEXT] of char;
IsAppMainWin : Boolean;
begin
//Check if the window is a visible application main window.
IsAppMainWin := IsWindowVisible(wHandle) AND //Visible
(GetWindow(wHandle,GW_OWNER) = 0) AND //Not owned by other windows
(GetParent(wHandle) = 0) AND //Does not have any parent
(GetWindowLong(wHandle,GWL_EXSTYLE) AND WS_EX_TOOLWINDOW = 0); //Not a tool window
if IsAppMainWin then
begin
WindowItem := TAppWindowCollection(lparam).Add;
GetWindowText(wHandle,strText,MAX_TEXT);
GetClassName(wHandle,strClass,MAX_TEXT);
WindowItem.FCaption := strText;
WindowItem.FHandle := wHandle;
WindowItem.FWindowClass := strClass;
GetWindowThreadProcessId(wHandle,WindowItem.FProcessID);
end;
Result := True;
end;
Полный исходный код вы можете найти в AppInfo.pas .
и получить их местоположение на жестком диске
Это всего лишь окна.Если вы хотите получить путь к файлу EXE, соответствующему каждому элементу, вы должны сначала найти процесс, которому принадлежит это окно, используя функцию API GetWindowThreadProcessID .Это то, что я сделал в приведенном выше коде.Получив идентификатор процесса, вы можете получить из него дескриптор процесса и перечислить его модули.Первый модуль - это основной EXE-файл.Я реализовал это в моем компоненте TProcessInfo, который входит в тот же пакет с AppInfo.pas.