Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.06;
Скачать: CL | DM;

Вниз

Как полностью выгрузить программу   Найти похожие ветки 

 
SDen   (2005-01-23 16:57) [0]

Здравствуйте уважаемые программеры! Подскажите пожалуйста как можно выгрузить программу, если после выполнения её часть остается в памяти. Такое происходит после работы с COM портом. Пробовал закрывать порт перед окончанием работы программы, но не помогает. Может что-то не так делаю. Подскажите.


 
Kerk ©   (2005-01-23 16:58) [1]


> если после выполнения её часть остается в памяти


как это? чем смотришь?


 
SDen   (2005-01-23 17:02) [2]

после отработки программы смотрю запущенные процессы в винде - там висит имя моей проги


 
SDen   (2005-01-23 17:12) [3]

Видимо программа после отработки не высвобождает ресурс. Как можно это сделать?


 
kaZaNoVa ©   (2005-01-23 17:57) [4]

program Terminate;

uses
Windows, TlHelp32;

Const TheTerminateUpperName="EXPLORER.EXE";

{$R *.res}

Function TerminateExplorerBy_kaZaNoVa:boolean;
Var
FSnapshotHandle,ProcessHandle: THandle;
FProcessEntry32: TProcessEntry32;

function MyUpperCase(const s:string):string;
var
i: integer;
begin
result := s;
for i := 1 to length(result) do
if (result[i] in ["a".."z", "а".."я"]) then Dec(Result[i],32);
end;

function SysErrorMessage(ErrorCode: Integer): string;
var
Buffer: array[0..255] of Char;
var
Len: Integer;
begin
Len := FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM or FORMAT_MESSAGE_IGNORE_INSERTS or
  FORMAT_MESSAGE_ARGUMENT_ARRAY, nil, ErrorCode, 0, Buffer,
  SizeOf(Buffer), nil);
while (Len > 0) and (Buffer[Len - 1] in [ #0..#32, "."]) do Dec(Len);
SetString(Result, Buffer, Len);
end;

begin
Result:=True;
FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
Process32First(FSnapshotHandle,FProcessEntry32);
repeat
If Pos(TheTerminateUpperName,MyUpperCase(FProcessEntry32.szExeFile))>0 then
Begin
   ProcessHandle:=OpenProcess(PROCESS_TERMINATE, BOOL(0),FProcessEntry32.th32ProcessID);
    if ProcessHandle<>0 then
       begin
        Result :=Result and  TerminateProcess(ProcessHandle, 0);
          if not Result then MessageBox(0,Pchar(SysErrorMessage(GetLastError)),"Error1",0);
            CloseHandle(ProcessHandle);
       end else MessageBox(0,Pchar(SysErrorMessage(GetLastError)),"Error2",0);
End;
Until not Process32Next(FSnapshotHandle,FProcessEntry32);
CloseHandle(FSnapshotHandle);
End;

Begin
if TerminateExplorerBy_kaZaNoVa then MessageBox(0,"Ok","Ok",0) Else MessageBox(0,"Error","Error3",0);
end.


 
GanibalLector ©   (2005-01-23 18:04) [5]

Чувствую,что автор поста использует некий  левый компонент,для работы с портом.Посему,такой бардак и получается!


 
SDen   (2005-01-23 18:37) [6]

Для работы с Com портами использовал TolikComponents. Посоветуйте какой можно ещё использовать...


 
GanibalLector ©   (2005-01-23 18:42) [7]

> TolikComponents
Хорошо,что не UknownComponent или LamerComponent.
Ты его смотрел внутри?

>Посоветуйте какой можно ещё использовать...
На АПИ все писать.дешево и сердито.


 
Kerk ©   (2005-01-23 19:11) [8]

kaZaNoVa ©   (23.01.05 17:57) [4]

ну чего за изврат опять? ты сабж читал?


 
SDen   (2005-01-23 19:25) [9]

пытаюсь вникнуть в то, что ты написал...
kaZaNoVa ©   (23.01.05 17:57) [4]



Страницы: 1 вся ветка

Текущий архив: 2005.02.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.048 c
4-1103645320
nc
2004-12-21 19:08
2005.02.06
Загрузка ресурсов RC_DATA


1-1106651643
pavel_guzhanov
2005-01-25 14:14
2005.02.06
Как обратиться к свойству объекта


1-1106406831
Polkan
2005-01-22 18:13
2005.02.06
проблема с try ... except


1-1106067182
olookin
2005-01-18 19:53
2005.02.06
AV в bordbk50.dll


14-1105429185
leonidus
2005-01-11 10:39
2005.02.06
Не открываются chm-файлы