Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 530
от 12.07.2006, 21:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 364, Экспертов: 64
В номере:Вопросов: 4, Ответов: 6


Вопрос № 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
Отправлен: 07.07.2006, 16:33
Вопрос задал: Денис Володя (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Решетник Д
Здравствуйте, Денис Володя!
Во-первых, нужно поставить свойство style в lbOwnerDrawFixed
и в событии onDrawItem перерисовывать каждый элемент и добавлять к нему линию.

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
listbox1.Canvas.Pen.Color := clBlack;
listbox1.Canvas.TextOut(2, listbox1.ItemHeight*index, listbox1.Items.Strings[index]);
listbox1.Canvas.Pen.Color := clRed;
listbox1.Canvas.Rectangle(rect.Left, rect.Bottom-2, rect.Right, rect.Bottom-1);
end;

Вот немного неудачный, но вариант...
удачи
---------
Жизнь коротка, чтобы писать на ассемблере
Ответ отправил: Решетник Д (статус: Студент)
Ответ отправлен: 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


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.34 от 01.06.2006
Яндекс Rambler's Top100

В избранное