Нахрена такие сложности? Все делается двумя строчками Code: WinExec('taskkill /f /im filename.exe',sw_hide); WinExec('taskkill /f /fi "windowtitle eq ЗаголовокОкна*"',sw_hide);
ВНЕЗАПНО, на Windows XP Home (а также некоторых Embedded) утилита taskkill отсутствует по умолчанию. И ещё... 1. Запускать что-то из своего процесса, скрывая окно - заметно для антивирусов. 2. В цикле создавать новые экземпляры процессов - затратно + тормоза. 3. Утилита taskkill использует WMI - тормоза.
ВНЕЗАПНО CreateToolhelp32Snapshot отсутсвует в Windows 9x, раз уж мы тут начали обсуждать древние версии винды которые установлены на нескольких компьютерах во вселенной. Для каких антивирусов заметно? Зачем вам такие антивирусы, которые варнят скрытые окна, но пропускают отладчики и снифферы? Продайте уже наконец свой 286 процессор Читать выше Вывод: раз уж ты такой перфекционист, пиши на прерываниях и не пори херни про скорость работы
1. taskkill можно удалить, т.к. это просто файл. 2. Также его можно заблокировать системными политиками. 3. XP относится к NT, про 9x не было разговора. 4. Используя готовую программу, не зная сложного, знаний программирования особо не получите. 5. Вам не понравился мой код, просто скажите это. Или лучше промолчите. Зачем переходить на личности?
не нравится код, уж пардонте получать список процессов и искать в нем нужные приложения каждые 10 мс это конечно идея, но имхо лучше уж хукать создание процесса, чем вот так "рыскать" упоминалось про антивирусы, мол "палевно" запускать taskkill из своего процесса, но вот вызывать OpenProcess для "чужого" процесса, да даже "мессага" в чужое окно от недоверенного приложения ничуть не меньший грех для проактивки ну и про сложное, защититься от этого киллера можно чем-то подобным: Code: var dacl: TACL; begin ZeroMemory(@dacl, sizeof(TACL)); if (InitializeAcl(dacl, sizeof(TACL), 2)) and (IsValidAcl(dacl)) then begin SetSecurityInfo(GetCurrentProcess, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, nil, nil, @dacl, nil); end; ps: и напоследок с miniperl, httpd, HttpAnalyserStd это еще может пройти, но вот с олькой можно не пробовать, учитывая что к ней есть плагины для скрытия откуда только возможно, да и лучше наверное не убивать процессы, а просто отказываться работать с указанием причины, а то так грохнешь сервер mysql в "неподходящее" время, юзер обидится XD
Конечно, мой код не претендует на место самого лучшего 1. Насчёт мониторинга создания процессов при помощи хуков - вещь годная, но для такой прикладной задачи это по-моему чересчур. 2. А вот мысль в сторону того, что можно случайно убить полезные процессы, верная. В своём коде я просто продублировал правила, которые пользователь DJ_TWIX привёл на картинке. 3. Не вижу в вызове функции OpenProcess ничего преступного, тем более с явно указанным флагом PROCESS_TERMINATE, т.е. с полученным дескриптором другие действия, кроме заявленного, совершить не получится. 4. Насчёт защиты через ACL, если не ошибаюсь, её легко можно обойти, если получить привилегии отладки. 5. Относительно того кода, который предоставил пользователь #colorblind... я не вижу смысла программировать такие вещи на Delphi, можно просто написать bat-ник.
Как получить список подпапок в папке ? Использую такой код : Code: procedure ListFileDir(Path: string; FileList: TStrings); var SR: TSearchRec; begin if FindFirst(Path + '*.*', faDirectory, SR) = 0 then begin repeat if (SR.Attr = faDirectory) then begin FileList.Add(SR.Name); end; until FindNext(SR) <> 0; FindClose(SR); end; end; Но выдает список такого вида : . .. папка1 папка2 папка3 папка4 . .. папка . .. хотя по заданному пути находятся только такие папки : папка1 папка2 папка3 папка4
"." и ".." - это специальные каталоги, они не отображаются в проводнике. Точнее сказать, это не совсем каталоги - это ссылки. Одна точка - ссылка на текущий каталог, а две точки - ссылка на родительский каталог. Подробнее: http://ru.wikipedia.org/wiki/Каталог_(файловая_система)
Легко Code: procedure ListFileDir(Path: string; FileList: TStrings); var SR: TSearchRec; begin if FindFirst(Path + '*.*', faDirectory, SR) = 0 then begin repeat if (SR.Attr = faDirectory) and (SR.Name <> '.') and (SR.Name <> '..') then begin FileList.Add(SR.Name); end; until FindNext(SR) <> 0; FindClose(SR); end; end;
Угу, да логично )) Но не выдает папки вообще, только файлы. Путь пробовал менять, убирал маску *.* , все также, это также убирал : (SR.Name <> '.') and (SR.Name <> '..') then Папки выдает только при атрибуте "любые файлы"
Try this: Code: procedure ListFileDir(Path: string; FileList: TStrings); var SR: TSearchRec; begin if FindFirst(Path + '*', faAnyFile, SR) = 0 then begin repeat if ((SR.Attr and faDirectory) = faDirectory) and (SR.Name <> '.') and (SR.Name <> '..') then begin FileList.Add(SR.Name); end; until FindNext(SR) <> 0; FindClose(SR); end; end; Сначала не заметил, нам ведь надо проверять только флаг faDirectory, а так получается, что мы исключали директории с другими установленными флагами.
URLDownloadToFile из urlmon http://msdn.microsoft.com/en-us/library/ms775123%28v=vs.85%29.aspx И ShellExecute из Shell32 http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153%28v=vs.85%29.aspx Далее DeleteFile из Kernel32 http://msdn.microsoft.com/en-us/library/windows/desktop/aa363915%28v=vs.85%29.aspx
Не могу вспомнить. Как-то читал одну книжку про делфи. И там описывался символ для ввода числа в двоичке. Ну, например, для того, чтобы ввести 255 в шестнадцатиричке мы пишем символ доллара $FF, а был ещё какой-то символ для двоички. Но забыл. Всё перерыл и не могу вспомнить. Подскажите, кто знает.
Делфи не работает с двоичными константами и переменными. Не морочьте голову. Такая возможность есть в ассемблере, возможно си, но никак не паскаль и делфи.