Q&A
HOME
Tips & Tech
Q&A
Discuss
Download
자유게시판
홍보 / 광고
구인 / 구직
LOGIN
회원가입
다른 프로그램을 죽이는 방법좀 알려주세요.
델파이로 어떤 특정 프로그램이 살아 있는지 , 살아 있으면
특정프로그램을 죽이는 방법이 있나요..
여러분의 도움을 요청합니다...
1
COMMENTS
김영대
•
1999.07.28 01:27
이현옥 께서 말씀하시기를...
> 델파이로 어떤 특정 프로그램이 살아 있는지 , 살아 있으면
> 특정프로그램을 죽이는 방법이 있나요..
> 여러분의 도움을 요청합니다...
전에 올렸던 내용인데 다시 올려드립니다
아래 소스의 단점(?)은 TerminateProcess() 를 이용하여 프로세스를
종료하면 해당 프로그램이 resource를 윈도우즈에 반납할 기회를
가지지 못하므로 문제가 될 수 있습니다
TerminateProcess() 를 이용하기 보다는 EnumWindows() 와
SendMessage(handle, WM_CLOSE, 0, 0) 을 이용하시는것이 안전합니다
제 홈페이지(http://myhome.shinbiro.com/~cozykyd/index.htm)의 Delphi Tip 에서 EnumWindows() 를 찾아보세요
-------------------------------------------------------------------------
다음 Delphi source는 process처리를 위한 예제프로그램을
작성한 것입니다. (좀더 꾸미면 Task Manager가 되겠죠)
리스트박스에 현재 실행중인 process를 보여준후
선택한 process를 kill합니다. (kernel32.dll의 함수를 사용합니다)
이 예제프로그램이 조금이나마 도움이 되었으면 합니다.
의문사항은 메일주세요
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, TlHelp32;
type
TForm1 = class(TForm)
ListBox1: TListBox;
B_Search: TButton;
B_Terminate: TButton;
procedure B_SearchClick(Sender: TObject);
procedure B_TerminateClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
// kernel32.dll을 사용하여 현재 떠있는 process를 읽어온다
procedure Process32List(Slist: TStrings);
var
Process32: TProcessEntry32;
SHandle: THandle; // the handle of the Windows object
Next: BOOL;
begin
Process32.dwSize := SizeOf(TProcessEntry32);
SHandle := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if Process32First(SHandle, Process32) then
begin
// 실행화일명과 process object 저장
Slist.AddObject(Process32.szExeFile, TObject(Process32.th32ProcessID));
repeat
Next := Process32Next(SHandle, Process32);
if Next then
Slist.AddObject(Process32.szExeFile, TObject(Process32.th32ProcessID));
until not Next;
end;
CloseHandle(SHandle); // closes an open object handle
end;
procedure TForm1.B_SearchClick(Sender: TObject);
begin
// 현재 실행중인 process를 검색
ListBox1.Items.Clear;
Process32List(ListBox1.Items);
end;
procedure TForm1.B_TerminateClick(Sender: TObject);
var
hProcess: THandle;
ProcId: DWORD;
TermSucc: BOOL;
begin
// 현재 실행중인 process를 kill
if ListBox1.ItemIndex < 0 then System.Exit;
ProcId := DWORD(ListBox1.Items.Objects[ListBox1.ItemIndex]);
// 존재하는 process object의 handle을 return한다
hProcess := OpenProcess(PROCESS_ALL_ACCESS, TRUE, ProcId);
if hProcess = NULL then
ShowMessage('OpenProcess error !');
// 명시한 process를 강제 종료시킨다
TermSucc := TerminateProcess(hProcess, 0);
if TermSucc = FALSE then
ShowMessage('TerminateProcess error !')
else
ShowMessage(Format('Process# %x terminated successfully !', [ProcId]));
end;
end.
0
0
삭제
수정
댓글
(NOTICE) You must be
logged in
to comment on this post.
발도제
1999.07.28 08:48
0
COMMENTS
/
0
LIKES
프린트 스풀러에 추가된 인쇄작업의 항목을 제어하는 방법을 알고싶습니다...
김수걸
1999.07.28 06:44
0
COMMENTS
/
0
LIKES
[왕초보-질문]socket error (10049), on API 'connect'에.
이용일
•
1999.07.28 05:14
2
COMMENTS
/
0
LIKES
델파이 4용 DWINSOCK컴포넌트 구합니다.
이주흥
•
1999.07.28 22:04
이용일 께서 말씀하시기를... > 여기서 요청해서 죄송한데요..... > 델파이4용 DWinsock을 구합니다. > ...
이정욱
•
1999.07.28 21:12
DWinsock은 델3용까지밖에 없습니다. 한델자료실에 있는 WinShoe를 사용해 보세요. 정말 괜찬은 컴포...
hohoant
•
1999.07.28 04:58
2
COMMENTS
/
0
LIKES
한글 '자음' 하나로 데이터 검색
한
•
1999.07.30 08:48
hohoant 께서 말씀하시기를... > '자음' 하나만으로 시작되는 모든 데이타를 검색하고 싶습니다.. > 예...
hohoant
•
1999.07.31 02:25
고맙습니다.. 쿼리 문장이 많이 들어가기는 하겠지만 .. 해결이 될것같군요.. 정말 고맙습니다.
이용일
1999.07.28 04:49
0
COMMENTS
/
0
LIKES
컴포넌트 팔레트에 이상한 점이...
suezou
•
1999.07.28 03:03
1
COMMENTS
/
0
LIKES
파라독스디비를 오라클디비로 사용할려면...
정대연
•
1999.08.05 09:45
suezou 께서 말씀하시기를... > 안녕하세요.. > 하루사이에 2번의 질문을 올리네요... > 죄송...꾸벅......
양효비
•
1999.07.28 03:00
1
COMMENTS
/
0
LIKES
클라이언트/서버 질문 입니다.
김영대
•
1999.07.28 04:10
양효비 께서 말씀하시기를... > 클라이언트 서버 컴포넌트를 이용해서 > 클라이언트 프로그램과 > 서버 ...
권유삼
1999.07.28 02:53
0
COMMENTS
/
0
LIKES
[oracle]SQLSTATE = 01004, DBMS.CODE=0
발도제
1999.07.28 02:44
0
COMMENTS
/
0
LIKES
프린트 스풀러에 추가된 인쇄작업의 항목을 제어하는 방법..
이성남
•
1999.07.28 02:33
1
COMMENTS
/
0
LIKES
자료를 5개씩보이게하려면
유도삼
•
1999.07.31 10:46
이성남 께서 말씀하시기를... > 델 기초입니다 > 조그마한 프로그램을 만들러고 하는데 지식이 없어서 ...
사이버
•
1999.07.28 02:28
1
COMMENTS
/
0
LIKES
버튼 토글 방법??
최석기
•
1999.07.28 04:42
사이버 께서 말씀하시기를... > 지금 한창 델파이를 배우는 초보자입니다. > > 제가 궁금한 것은 > ...
김종호
1999.07.28 02:10
0
COMMENTS
/
0
LIKES
SQL 6.5 업그레이드...문제점
양효비
•
1999.07.28 02:06
5
COMMENTS
/
0
LIKES
폼이 시작될때 edit1에서 커서가 시작할수 있도록
유시니
•
1999.07.30 03:59
양효비 께서 말씀하시기를... > 안녕 하세요 > 폼이 create될때 > memo1 > 과 > edit1 > 이 있는데 ...
김종호
•
1999.07.28 02:33
양효비 께서 말씀하시기를... > 안녕 하세요 > 폼이 create될때 > memo1 > 과 > edit1 > 이 있는데 ...
양효비
•
1999.07.28 02:43
김종호 께서 말씀하시기를... > 양효비 께서 말씀하시기를... > > 안녕 하세요 > > 폼이 create될때 > ...
박장수
•
1999.07.28 02:33
양효비 께서 말씀하시기를... > 안녕 하세요 > 폼이 create될때 > memo1 > 과 > edit1 > 이 있는데 ...
양효비
•
1999.07.28 02:44
박장수 께서 말씀하시기를... > 양효비 께서 말씀하시기를... > > 안녕 하세요 > > 폼이 create될때 > ...
이경철
•
1999.07.28 01:47
1
COMMENTS
/
0
LIKES
98에서 Delphi가...
주경래
•
1999.07.28 19:26
저와 비슷한 환경에서 델파이를 쓰고 계시군여... @@; 전 별다른 문제는 없지만, 가끔 그런 메시지를 받...
궁금이
•
1999.07.28 01:17
4
COMMENTS
/
0
LIKES
cursor의 위치
유시니
•
1999.07.30 00:24
궁금이 께서 말씀하시기를... > 안녕하세요. > 폼위에 여러 컴포넌트들이 있을 때, 현재 커서가 어느 컴...
유시니
•
1999.07.30 04:02
유시니 께서 말씀하시기를... > 궁금이 께서 말씀하시기를... > > 안녕하세요. > > 폼위에 여러 컴포넌...
궁금이
•
1999.07.30 18:09
그래도 들어오신 분을 위해.... 감사합니다. ^.^
김영대
•
1999.07.28 01:44
궁금이 께서 말씀하시기를... > 안녕하세요. > 폼위에 여러 컴포넌트들이 있을 때, 현재 커서가 어느 컴...
박홍석
•
1999.07.28 01:10
1
COMMENTS
/
0
LIKES
SHBrowseForFolder에 대해
김영대
•
1999.07.28 01:52
박홍석 께서 말씀하시기를... > 안녕하세요. 요즘 맨날 질문만 하는군요. > 질문의 내용이 어려워서인지 ...
sunhee
1999.07.28 01:05
0
COMMENTS
/
0
LIKES
델파이5 베타버젼 구할 수 없나요?
김준성
•
1999.07.28 00:43
1
COMMENTS
/
0
LIKES
BoderIcons에서 시스템 종료는 막고 최소화는 가능하게..
김영대
•
1999.07.28 01:00
김준성 께서 말씀하시기를... > 폼의 우측상단의 BoarderIcons에서 Form을 종료하지 못하게 > biSyste...
이현옥
•
1999.07.28 00:39
1
COMMENTS
/
0
LIKES
다른 프로그램을 죽이는 방법좀 알려주세요.
델파이로 어떤 특정 프로그램이 살아 있는지 , 살아 있으면 특정프로그램을 죽이는 방법이 있나요.. 여러분의 도움을 요청합니다...
김영대
•
1999.07.28 01:27
이현옥 께서 말씀하시기를... > 델파이로 어떤 특정 프로그램이 살아 있는지 , 살아 있으면 > 특정프로그...
iado
•
1999.07.28 00:35
1
COMMENTS
/
0
LIKES
bmp의 픽셀들의 정보 알수있게 해주는것
김영대
•
1999.07.28 01:12
iado 께서 말씀하시기를... > 비트맵 화일을 읽어 들여서 각 픽셀의 정보를 알수 있는 방법이 없을 까요? ...
이현옥
1999/07/28 00:39
Views
365
Likes
0
Comments
1
Reports
0
Tag List
수정
삭제
목록으로
한델 로그인 하기
로그인 상태 유지
아직 회원이 아니세요? 가입하세요!
암호를 잊어버리셨나요?
> 델파이로 어떤 특정 프로그램이 살아 있는지 , 살아 있으면
> 특정프로그램을 죽이는 방법이 있나요..
> 여러분의 도움을 요청합니다...
전에 올렸던 내용인데 다시 올려드립니다
아래 소스의 단점(?)은 TerminateProcess() 를 이용하여 프로세스를
종료하면 해당 프로그램이 resource를 윈도우즈에 반납할 기회를
가지지 못하므로 문제가 될 수 있습니다
TerminateProcess() 를 이용하기 보다는 EnumWindows() 와
SendMessage(handle, WM_CLOSE, 0, 0) 을 이용하시는것이 안전합니다
제 홈페이지(http://myhome.shinbiro.com/~cozykyd/index.htm)의 Delphi Tip 에서 EnumWindows() 를 찾아보세요
-------------------------------------------------------------------------
다음 Delphi source는 process처리를 위한 예제프로그램을
작성한 것입니다. (좀더 꾸미면 Task Manager가 되겠죠)
리스트박스에 현재 실행중인 process를 보여준후
선택한 process를 kill합니다. (kernel32.dll의 함수를 사용합니다)
이 예제프로그램이 조금이나마 도움이 되었으면 합니다.
의문사항은 메일주세요
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, TlHelp32;
type
TForm1 = class(TForm)
ListBox1: TListBox;
B_Search: TButton;
B_Terminate: TButton;
procedure B_SearchClick(Sender: TObject);
procedure B_TerminateClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
// kernel32.dll을 사용하여 현재 떠있는 process를 읽어온다
procedure Process32List(Slist: TStrings);
var
Process32: TProcessEntry32;
SHandle: THandle; // the handle of the Windows object
Next: BOOL;
begin
Process32.dwSize := SizeOf(TProcessEntry32);
SHandle := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if Process32First(SHandle, Process32) then
begin
// 실행화일명과 process object 저장
Slist.AddObject(Process32.szExeFile, TObject(Process32.th32ProcessID));
repeat
Next := Process32Next(SHandle, Process32);
if Next then
Slist.AddObject(Process32.szExeFile, TObject(Process32.th32ProcessID));
until not Next;
end;
CloseHandle(SHandle); // closes an open object handle
end;
procedure TForm1.B_SearchClick(Sender: TObject);
begin
// 현재 실행중인 process를 검색
ListBox1.Items.Clear;
Process32List(ListBox1.Items);
end;
procedure TForm1.B_TerminateClick(Sender: TObject);
var
hProcess: THandle;
ProcId: DWORD;
TermSucc: BOOL;
begin
// 현재 실행중인 process를 kill
if ListBox1.ItemIndex < 0 then System.Exit;
ProcId := DWORD(ListBox1.Items.Objects[ListBox1.ItemIndex]);
// 존재하는 process object의 handle을 return한다
hProcess := OpenProcess(PROCESS_ALL_ACCESS, TRUE, ProcId);
if hProcess = NULL then
ShowMessage('OpenProcess error !');
// 명시한 process를 강제 종료시킨다
TermSucc := TerminateProcess(hProcess, 0);
if TermSucc = FALSE then
ShowMessage('TerminateProcess error !')
else
ShowMessage(Format('Process# %x terminated successfully !', [ProcId]));
end;
end.