Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.006 c
1-48194
Fissher
2002-08-02 20:36
2002.08.15
Снова я со своим курсором


14-48314
Kombat
2002-07-22 22:45
2002.08.15
Как передать проект заказчику с частичным кодом?


4-48366
antonp
2002-06-10 22:41
2002.08.15
Как узнать Id процесса?


3-47921
SergSerg
2002-07-25 10:10
2002.08.15
dbgrid


6-48232
Ron
2002-06-03 21:45
2002.08.15
SMTP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский