Вопрос № 48411: Здраствуйте!
Как узнать запушен процесс или нет ,по имени, и если да то завершить!
Смогу я так завершить explorer,mdm,и т.д.?
И как отследить завершение процесса, с наименьшими затратами ресурсов?!...Вопрос № 48461: Здраствуйте эксперты! я поставил Suipack 5.83 а в вкладки после каждого выхода исчезают приходится лезть в Install components и там вечно ставить галочку и еще проблема в том что компаненты не грузятся и проект пустой после повторных открытий. как сд...Вопрос № 48475: Здравствуйте эксперты. Подскажите пожалуйста как в ListBox-e сделать
горизонтальную пунктирную линию, между двумя пунктами Items...Вопрос № 48480: Почему после использования Form1.DestroyWnd; или Form1.free; по данным деспетчера задач память приложением не освобождаеться? И как можно высвободить память занимаемую формой и всеми неипользуемыми её переменными? В приложении используеться несколько...
Вопрос № 48.411
Здраствуйте!
Как узнать запушен процесс или нет ,по имени, и если да то завершить!
Смогу я так завершить explorer,mdm,и т.д.?
И как отследить завершение процесса, с наименьшими затратами ресурсов?!
Отправлен: 07.07.2006, 01:26
Вопрос задал: chikanok (статус: 2-ой класс)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Coupler
Здравствуйте, chikanok!
Вот код, взятый из статей Ms-rem'а с применением модулей advapihook и nativeAPI.
uses advapihook, nativeAPI;
Function DebugKillProcess(ProcessId: dword): boolean;
var
pHandle: dword;
myPID: dword;
HandlesInfo: PSYSTEM_HANDLE_INFORMATION_EX;
r: dword;
begin
Result := false;
myPID := GetCurrentProcessId();
if not EnableDebugPrivilege() then Exit;
//подключаемся к системе отладки и получаем DebugObject
if DbgUiConnectToDbg() <> STATUS_SUCCESS then Exit;
pHandle := OpenProcessEx(ProcessId);
//включаем отладку процесса
if DbgUiDebugActiveProcess(pHandle) <> STATUS_SUCCESS then Exit;
//надо найти полученный DebugObject
HandlesInfo := GetInfoTable(SystemHandleInformation);
if HandlesInfo = nil then
Exit;
for r := 0 to HandlesInfo^.NumberOfHandles do
if (HandlesInfo^.Information[r].ProcessId = myPID) and
(HandlesInfo^.Information[r].ObjectTypeNumber = $8) //DebugObject
then begin
//закрываем DebugObject, что приводит к уничтожению отлаживаемого процесса
CloseHandle(HandlesInfo^.Information[r].Handle);
Result := true;
break;
end;
VirtualFree(HandlesInfo, 0, MEM_RELEASE);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if DebugKillProcess(GetProcessId('magent.exe'))=false then
showmessage ('Процесс не найден');
end;
Процесс уничтожается моментально, следить за его закрытием не нужно.
Поднять нужные модули можно здесь: http://www.wasm.ru/pub/21/files/advapihook.rar
Посмотрите и другие статьи этого автора, будет полезно.
Ответ отправил: Coupler (статус: Студент)
Ответ отправлен: 07.07.2006, 12:29
Вопрос № 48.461
Здраствуйте эксперты! я поставил Suipack 5.83 а в вкладки после каждого выхода исчезают приходится лезть в Install components и там вечно ставить галочку и еще проблема в том что компаненты не грузятся и проект пустой после повторных открытий. как сделать так чтоб сразуже отображались вкладки с компанентами? пробывал версию Suipack 4 с ней такаяже проблема!
Отправлен: 07.07.2006, 14:17
Вопрос задал: Barbos (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Савенко Вадим Иванович
Здравствуйте, Barbos!
Нужно в меню Tools-Options ... указать путь к компонентам и будет Вам счастие.
Ответ отправил: Савенко Вадим Иванович (статус: 3-ий класс)
Ответ отправлен: 07.07.2006, 14:27
Вопрос № 48.475
Здравствуйте эксперты. Подскажите пожалуйста как в ListBox-e сделать горизонтальную пунктирную линию, между двумя пунктами Items
Отвечает: Решетник Д
Здравствуйте, Денис Володя!
Во-первых, нужно поставить свойство style в lbOwnerDrawFixed
и в событии onDrawItem перерисовывать каждый элемент и добавлять к нему линию.
Вот немного неудачный, но вариант...
удачи
--------- Жизнь коротка, чтобы писать на ассемблере
Ответ отправил: Решетник Д (статус: Студент)
Ответ отправлен: 07.07.2006, 17:16
Вопрос № 48.480
Почему после использования Form1.DestroyWnd; или Form1.free; по данным деспетчера задач память приложением не освобождаеться? И как можно высвободить память занимаемую формой и всеми неипользуемыми её переменными? В приложении используеться несколько форм некоторые из низ прописаны друг у друга в Uses
Отправлен: 07.07.2006, 17:24
Вопрос задал: Sysanin (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Nant
Здравствуйте, Sysanin!
Для освобождения памяти используйте процедуру FreeAndNil из модуля sysutils.pas
например, я в своих приложениях использую такую заготовку (см. приложение)
Приложение:
Ответ отправил: Nant (статус: 2-ой класс)
Ответ отправлен: 07.07.2006, 17:38 Оценка за ответ: 5
Отвечает: Bochvarov NikB
Здравствуйте, Sysanin!
Form1.free
и FreeAndNil(Form1)
освобождают памят одинаково.
Наверное проблема у тебе состоит в том, что некоторие обекти у тебе создаются, о не освобождаются (тьи вьиполняеш их конструктор, но не вьиполняеш деструктор).
Простое правило - все, что тьи создаеш (Create), надо отстреливат (Destroy).
Исчи MemCheck - хорошии юнит, которой делае лог файл стека там, где у тебе вьитекает памят.
Если не надеш - пиши, я буду посьилать.
Ответ отправил: Bochvarov NikB (статус: 9-ый класс)
Ответ отправлен: 07.07.2006, 17:46 Оценка за ответ: 5
Отвечает: mvp
Здравствуйте, Sysanin!
А вы вообще на диспетчер задач не смотрите - вот откройте свою программу (или любую другую) и смотрите на ДЗ - со временем памяти будет кушаться больше, не смотря на то, что приложения её освобождают, но ДЗ на это не реагирует. Он среагирует лишь после того, как вы свернёте и развернёте программу.
А freeAndNil (p : Tobject) - это всего-лишь
p.free
p:=nil
И ради этих двух строчек подключать ещё целый модуль SySutils, думаю не стоит (разве что Вам тот модуль нужен итак)
--------- Моя совесть чиста - не бывшая в употреблении
Ответ отправил: mvp (статус: Студент)
Ответ отправлен: 11.07.2006, 13:08