Форум: "WinAPI";
Текущий архив: 2002.08.15;
Скачать: [xml.tar.bz2];
Внизкак отследить названия запускаемых программ Найти похожие ветки
← →
com6 (2002-04-30 13:01) [0]нужно составить список прог, который запускает пользователь. что-то типа:
internet explorer
notepad
opera
word
notepad
notepad
...
КАК ТАКОЕ СДЕЛАТЬ???
помогите: в "thanks to" хорошей программы запишу ;))
← →
cdaDmitriy (2002-05-01 09:31) [1]можно написать монитор процесов и при изменении / добавлении
нового / удалении - можно получить то что хочешь
← →
Rush (2002-05-01 16:17) [2]APIHooks http://www.anticracking.sk/EliCZ
Перехвати CreateProcess и все дела
← →
cdaDmitriy (2002-05-01 16:34) [3]>Rush
А Нльзя ли более подробно ( и на DELPHI ?? )
← →
Rush (2002-05-01 17:12) [4]Более подробно можно прочитать, развернув скачанный APIHooks SDK. Примеры на DELPHI там также имеются.
Даю более точную ссылку - на сам SDK:
http://www.anticracking.sk/EliCZ/export/AH38.ZIP
После разархивирования посмотри например Examples\Delphi\Beep.
Я дал ссылку на сайт, а не на архив потому, что на сайте ой как много полезного.
← →
cdaDmitriy (2002-05-01 17:21) [5]> Rush
сайт Я нашел и архив скачал но мне интересно исходники или
идея алгоритм перехвата CreateProcess ( можно на С)
Есть и другая версия
http://www.anticracking.sk/EliCZ/export/AH56.ZIP
← →
Вадим02 (2002-05-03 05:54) [6]Реализуй нижеприведенную процедуру, работает четко :
в окне ListBox увидишь все активные приложения включая
системные..Проверена на W98SE,NT4/2000/XP.
--------------------------------------------
procedure TMainForm.ProcessByName;
var
osver: OSVERSIONINFO;
hInstLib: THANDLE;
hInstLib2: THANDLE;
hSnapShot: THANDLE;
procentry: PROCESSENTRY32;
bFlag: BOOL;
lpdwPIDs: PDWordArray;
dwSize, dwSize2, dwIndex: DWORD;
hMod: HMODULE;
hProcess: THANDLE;
szFileName: array [0..MAX_PATH] of char;
lpfEnumProcesses: TEnumProcesses;
lpfEnumProcessModules: TEnumProcessModules;
lpfGetModuleFileNameEx: TGetModuleFileNameEx;
lpfCreateToolhelp32Snapshot: TCreateToolhelp32Snapshot;
lpfProcess32First: TProcess32First;
lpfProcess32Next: TProcess32Next;
begin
ListBox1.Items.Clear;
osver.dwOSVersionInfoSize :=SizeOf(osver);
if not GetVersionEx(osver) then
Exit;
if osver.dwPlatformId = VER_PLATFORM_WIN32_NT then
begin
hInstLib := LoadLibraryA("PSAPI.DLL");
if hInstLib = 0 then Exit;
hInstLib2 := LoadLibraryA("VDMDBG.DLL");
if hInstLib2 = 0 then Exit;
lpfEnumProcesses := GetProcAddress(hInstLib,"EnumProcesses");
lpfEnumProcessModules := GetProcAddress(hInstLib,"EnumProcessModules");
lpfGetModuleFileNameEx := GetProcAddress(hInstLib,"GetModuleFileNameExA");
if (Integer(@lpfEnumProcesses) = 0) or (Integer(@lpfEnumProcessModules) = 0) or
(Integer(@lpfGetModuleFileNameEx) = 0) {or (Integer(@lpfVDMEnumTaskWOWEx) = 0)} then
begin
FreeLibrary(hInstLib);
FreeLibrary(hInstLib2);
Exit;
end;
dwSize2 := 256 * SizeOf(DWORD);
lpdwPIDs := nil;
repeat
if lpdwPIDs <> Nil then
begin
HeapFree(GetProcessHeap(),0,lpdwPIDs);
dwSize2 := dwSize2 * 2 ;
end;
lpdwPIDs := HeapAlloc(GetProcessHeap(),0,dwSize2);
if lpdwPIDs = Nil then
begin
FreeLibrary( hInstLib ) ;
FreeLibrary( hInstLib2 ) ;
Exit;
end;
if not lpfEnumProcesses(Pointer(lpdwPIDs),dwSize2,dwSize) then
begin
HeapFree(GetProcessHeap(),0,lpdwPIDs);
FreeLibrary( hInstLib ) ;
FreeLibrary( hInstLib2 ) ;
Exit;
end;
until(dwSize <> dwSize2);
dwSize := dwSize div sizeof(DWORD);
dwIndex := 0;
ListBox1.Items.BeginUpdate;
while dwIndex < dwSize do
begin
szFileName[0] := #0;
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or
PROCESS_VM_READ,FALSE,lpdwPIDs[dwIndex]);
if hProcess <> 0 then
begin
if lpfEnumProcessModules(hProcess,@hMod,sizeof(hMod),dwSize2) then
begin
if lpfGetModuleFileNameEx(hProcess,hMod,szFileName,
sizeof(szFileName)) = 0 then
szFileName[0] := #0;
end;
CloseHandle(hProcess);
ListBox1.Items.Add(StrPas(szFileName));
end;
Inc(dwIndex);
end;
ListBox1.Items.EndUpdate;
HeapFree(GetProcessHeap(),0,lpdwPIDs);
FreeLibrary(hInstLib2);
end
else
if osver.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS then
begin
hInstLib := LoadLibraryA("Kernel32.DLL");
if hInstLib = 0 then
Exit;
lpfCreateToolhelp32Snapshot := GetProcAddress(hInstLib,
"CreateToolhelp32Snapshot");
lpfProcess32First := GetProcAddress(hInstLib,"Process32First");
lpfProcess32Next := GetProcAddress(hInstLib,"Process32Next");
if (Integer(@lpfProcess32Next)= 0) or (Integer(@lpfProcess32First)= 0)
or (Integer(@lpfCreateToolhelp32Snapshot)= 0) then
begin
FreeLibrary( hInstLib ) ;
Exit;
end;
hSnapShot := lpfCreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if hSnapShot = INVALID_HANDLE_VALUE then
begin
FreeLibrary( hInstLib ) ;
Exit;
end;
procentry.dwSize := sizeof(PROCESSENTRY32) ;
bFlag := lpfProcess32First(hSnapShot,procentry) ;
ListBox1.Items.BeginUpdate;
while bFlag do
begin
ListBox1.Items.Add(StrPas(procentry.szExeFile));
bFlag := lpfProcess32Next( hSnapShot, procentry );
end;
ListBox1.Items.EndUpdate;
end
else
Exit;
FreeLibrary( hInstLib ) ;
end;
← →
No_Space (2002-06-11 11:00) [7]Вадим02, работает действительно класно, но:
ты забыл про модули TlHelp32, PSAPI, без к-рых эта штука не будет пупырить. И еще одна ошибочка:)
lpdwPIDs: PDWordArray; - такого типа нету, правильней будет:
lpdwPIDs: PWordArray;
А так, еще раз повторюсь, все здорово! Молодец!
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.08.15;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.007 c