Текущий архив: 2003.11.13;
Скачать: CL | DM;
Внизсписок запущенных приложений Найти похожие ветки
← →
LOX (2003-09-13 13:24) [0]Как получить список запущенных приложений. Если можно, то с путями к приложения.
У меня XP.
← →
LOX (2003-09-14 12:30) [1]Ответьте, пожалуйста.
← →
Erazzer (2003-09-14 22:16) [2]Используй API Process32First/Next. Точных названий функций не помню, но ты введи этот текстик и нажми F1, для платформы NT/2K/XP работают ТАКЖЕ функции типа enumprocesses_какая-то хрень, короче смотри справку и разные FAQ, особенно на этом портале!
Seek"n"Destroy...
← →
Erazzer (2003-09-14 22:19) [3]Используй API Process32First/Next. Точных названий функций не помню, но ты введи этот текстик и нажми F1, для платформы NT/2K/XP работают ТАКЖЕ функции типа enumprocesses_какая-то хрень, короче смотри справку и разные FAQ, особенно на этом портале!
Seek"n"Destroy...
← →
LOX (2003-09-15 14:35) [4]Напишите по подробнее
← →
Alibaba (2003-09-15 14:52) [5]procedure TfrmMain.btnGetListClick(Sender: TObject);
var
Wnd : hWnd;
buff: array [0..127] of Char;
begin
lb.Clear;
Wnd := GetWindow(Application.Handle, gw_HWndFirst);
while Wnd <> 0 do
begin {Не показываем:}
if (Wnd <> Application.Handle) and {-Собственное окно}
IsWindowVisible(Wnd) AND {-Невидимые окна}
(GetWindow(Wnd, gw_Owner) = 0) AND {-Дочернии окна}
(GetWindowText(Wnd, buff, sizeof(buff)) <> 0){-Окна без заголовков}
then
begin
GetWindowText(Wnd, buff, sizeof(buff));
lb.Items.Add(StrPas(buff));
end;
Wnd := GetWindow(Wnd, gw_hWndNext);
end;
lb.ItemIndex := 0;
end;
← →
Songoku (2003-09-15 16:29) [6]Вы хоть читать умеете???
Он хочет узнать какие приложения(модули) в системе загружыны!!! НЕ ОКНА.
Process32First - ны выдаёт путь к приложения а только названия exe фаила!!!
NTAPI Hook_NtQuerySystemInformation(
LONG type, // тип требуемой информации
PVOID SystemInformation, // указатель на буфер, в который вернется информация
LONG SystemInformationLength, // размер буфера в байтах
PLONG ReturnLength // сколько байт было возвращено или требуется
);
typedef struct {
FILETIME ProcessorTime;
ULONG unk2, unk3;
FILETIME CreateTime;
ULONG unk6;
ULONG StartAddress;
ULONG ProcessID;
ULONG ThreadID;
ULONG CurrentPriority;
ULONG BasePriority;
ULONG ContextSwitchesPerSec;
ULONG ThreadState;
ULONG ThreadWaitReason;
ULONG unk15;
} SYSTEM_THREAD_INFORMATION;
typedef struct {
ULONG NextOffest; // следующий процесс
ULONG ThreadCount;
ULONG unk2, unk3, unk4, unk5, unk6, unk7;
FILETIME CreateTime;
FILETIME UserTime;
FILETIME KernelTime;
ULONG unk14;
WCHAR *pModuleName; /* unicode */
ULONG BasePriority;
ULONG ProcessID;
ULONG InheritedFromUniqueProcessID;
ULONG HandleCount;
ULONG unk20, unk21;
ULONG PeekVirtualSize;
ULONG VirtualSize;
ULONG PageFaultCountPerSec;
ULONG PeakWorkingSetSize;
ULONG WorkingSetSize;
ULONG PeekPagedPoolUsage;
ULONG PagedPoolUsage;
ULONG PeekNonPagedPoolUsage;
ULONG NonPagedPoolUsage;
ULONG unk31; /* PagefileUsage ? */
ULONG PeakPagefileUsage;
ULONG unk33; /* PrivateBytes ? */
SYSTEM_THREAD_INFORMATION ThreadInfos[1]; // потоки данного процесса
} SYSTEM_PROCESS_INFORMATION;
Эта не докуминтировная функция WindowsNT/2K/XP. Не спрашивай меня как с не работать я сам ещё не разобрался!!! Ноя знаю точно что он работает точно также каки EnumProcesses - смотри в MSDN примеры и докуминтацию!!!
← →
DVM (2003-09-15 16:30) [7]
> Alibaba © (15.09.03 14:52) [5]
Речь не об окнах. Этот кусок взят из библиотеки готовых решений, но не по теме.
> LOX ©
Здесь это столько раз встречалось, проще поискать по словосочетанию "Получить список процессов" тут или в Яндексе.
Писать подробнее лень.
← →
Songoku (2003-09-15 16:38) [8]Ах да я кое что забыл.
Делай так EnumProcesses(PSAPI) а потом узновай путь GetModuleFileName функцией.
← →
DVM (2003-09-15 16:42) [9]Еще надо добавить, что в разных версиях Windows получение информации о процессах производится по-разному.
Есть такая известнейшая книга "Delphi 5(6) Руководство разработчика" в 2 томах. Там об этом подробно все расписано.
← →
Alibaba (2003-09-17 16:19) [10]>DVM © (15.09.03 16:30) [7]
Этот кусок может быть в библиотеке готовых решений.
На авторство не претендую - в очень многих примерах встречается.
Что не по теме - согласен.
Не внимательно прочитал.
← →
FIREHACK (2003-09-17 17:33) [11]ЛОВИ НЕ ЖАЛКО!!!
type
TProcessInformation = record
NextOffset: cardinal; // следующий процесс
ThreadCount: cardinal;
unk2, unk3, unk4, unk5, unk6, unk7: cardinal;
CreateTime: TFileTime;
UserTime: TFileTime;
KernelTime: TFileTime;
unk14: cardinal;
pModuleName: PWideChar; //* unicode */
BasePriority: cardinal;
ProcessID: cardinal;
InheritedFromUniqueProcessID: cardinal;
HandleCount: cardinal;
unk20, unk21: cardinal;
PeekVirtualSize: cardinal;
VirtualSize: cardinal;
PageFaultCountPerSec: cardinal;
PeakWorkingSetSize: cardinal;
WorkingSetSize: cardinal;
PeekPagedPoolUsage: cardinal;
PagedPoolUsage: cardinal;
PeekNonPagedPoolUsage: cardinal;
NonPagedPoolUsage: cardinal;
unk31: cardinal; //* PagefileUsage ? */
PeakPagefileUsage: cardinal;
unk33: cardinal; //* PrivateBytes ? */
ThreadInfos: PThreadInformation; // потоки данного процесса
end;
TEnumNtProcessesProc = function (ProcessInformation:TProcessInformation; Param:DWORD):Boolean;stdcall;
function NTDLLEnumProcesses(EnumProc:TEnumNtProcessesProc;Param:DWORD):Boolean;
var
NtQuerySystemInformation: TNtQuerySystemInformation;
i:integer;
proc:PProcessInformation;
p:pointer;
hNTDll:HINST;
begin
Result:=False;
hNTDll:=GetModuleHandle("ntdll.dll");
if hNTDll <32 then exit;
try
@NtQuerySystemInformation:=GetProcAddress(hNTDll, "NtQuerySystemInformation");
if assigned(@NtQuerySystemInformation) then
begin
// GetMem(p, 30000);
p:= GetMemory(100000);
proc:=p;
Result:=NtQuerySystemInformation(5, proc, 40000,i)=0;
while Result do
begin
if not EnumProc(Proc^,Param) then Break;
if proc^.NextOffset=0 then break;
proc:=pointer(cardinal(proc)+proc^.NextOffset);
end;
FreeMemory(p);
end;
finally
end;
end;
Страницы: 1 вся ветка
Текущий архив: 2003.11.13;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.043 c