Q&A
HOME
Tips & Tech
Q&A
Discuss
Download
자유게시판
홍보 / 광고
구인 / 구직
LOGIN
회원가입
윈도우 강제 종료시 실행중인 프로그램도 강제종료하기
안녕하세요
윈도우 종료와 관련 exitwindowsex 함수를 이용하여
몇가지 test해 보았지만 실행중인 아래아 한글이나, 네트워크 연결중일 때
저장 혹은 연결을 끊겠습니까 하는 식으로 물어 봅니다.
그런 물음없이 완전히 강제로 종료할 수 있는 방법 좀 가르쳐 주시겠습니까
exitwindowsex(ewx_shutdown,0); // 시스템 종료 => 물어봄
ewx_force,poweroff등등 다 시도했으나 원하는 결과는 없었습니다.
1
COMMENTS
김영대
•
1999.09.03 23:35
조계영 께서 말씀하시기를...
> 안녕하세요
>
> 윈도우 종료와 관련 exitwindowsex 함수를 이용하여
> 몇가지 test해 보았지만 실행중인 아래아 한글이나, 네트워크 연결중일 때
> 저장 혹은 연결을 끊겠습니까 하는 식으로 물어 봅니다.
>
> 그런 물음없이 완전히 강제로 종료할 수 있는 방법 좀 가르쳐 주시겠습니까
>
>
> exitwindowsex(ewx_shutdown,0); // 시스템 종료 => 물어봄
>
> ewx_force,poweroff등등 다 시도했으나 원하는 결과는 없었습니다.
원도우즈 종료전에 떠있는 프로세스를 TerminateProcess 를 사용하여
강제종료해 보세요
하지만 현재 원도우즈에 실행중인 프로그램이 하던 동작을
마무리 하지 못하고 TerminateProcess 하게되면 리소스 반납문제도
있지만 워드문서를 저장도 안했는데 종료하면 사용자가 좀 당황하지
않을까요...
아래 예제는 선택된 Process 만 강제종료하는데 좀 고치면
전체 프로세스를 종료하실 수 있을 겁니다
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.09.04 21:06
1
COMMENTS
/
0
LIKES
외부파일 실행 후 원 프로그램을 SHOW
이정욱
•
1999.09.04 23:26
그렇게 하시려면 실행후 실행을 마칠때까지 기다리는 함수를 사용해야 합니다. 한델(http://www.delphi.co...
오남석
1999.09.04 18:38
0
COMMENTS
/
0
LIKES
QRGroup에서 첫번째 그룹의 헤더가 나오기 않는군요
임동욱
1999.09.04 17:55
0
COMMENTS
/
0
LIKES
ODBC연결법
dj
•
1999.09.04 17:50
1
COMMENTS
/
0
LIKES
ListBox 항목 선택하는방법
이정욱
•
1999.09.04 23:24
ItemIndex에 원하는 값을 넣어주세요. 첫번째 아이템의 번호가 0 이니 만약 2번째를 선택되게 하고 싶다면...
오남석
1999.09.04 17:42
0
COMMENTS
/
0
LIKES
Qreport중 QrGroup에 관한 질문입니다.
한 재
•
1999.09.04 15:15
1
COMMENTS
/
0
LIKES
다시 한번 질문...
jinifan
•
1999.09.04 16:21
한 재 께서 말씀하시기를... > 질문이 역시 시원치 않았나 보군요. 도사님들의 가르침이 없으니 말입니...
bluetin
•
1999.09.04 08:47
1
COMMENTS
/
0
LIKES
group footer가 먹히질 않습니다.
김고진
•
1999.09.06 19:03
bluetin 께서 말씀하시기를... 글쎄요... summary band가 아래로 내려가진 않는다고 하는데 아마도 Group...
hata
1999.09.04 07:44
0
COMMENTS
/
0
LIKES
[컴포너트 이메이지..]
초보자
•
1999.09.04 06:38
1
COMMENTS
/
0
LIKES
판넬에 line, polyline 등을 그리는 방법
구창민
•
1999.09.04 08:42
초보자 께서 말씀하시기를... > 안녕하세요. > > 판넬에 line, polyline 등을 그리는 방법을 가르쳐 ...
남윤혁
•
1999.09.04 06:24
2
COMMENTS
/
0
LIKES
TTable에서 내림차순 정렬 법? T__T
asterisk
•
1999.09.04 18:33
고건 Index만들때...설정을 하셔야됩니다... Descending을 chcek하시면..내림차순으로 정렬이 된답니다......
jinifan
•
1999.09.04 10:53
남윤혁 께서 말씀하시기를... > 설마 없는 것은 아니겠죠??? > > TTable의 IndexFieldNames에 'id' > ...
강영석
1999.09.04 04:00
0
COMMENTS
/
0
LIKES
ORA-12663 ERROR ORACLE에서....
나성오
1999.09.04 04:00
0
COMMENTS
/
0
LIKES
ODBC 와 DB 연결
정민규
•
1999.09.04 03:38
1
COMMENTS
/
0
LIKES
델파이와 리눅스
구창민
•
1999.09.04 08:53
정민규 께서 말씀하시기를... > > 델파이에서 DB를 사용하지 않는 CGI를 만들려고 합니다... > > ...
이상호
•
1999.09.04 03:12
6
COMMENTS
/
0
LIKES
폼이름으로 폼을 생성하려면...?
홍효선
•
1999.11.02 05:03
올려 놓으신 글을 참고로 아래와 같이 폼이름으로 폼을 생성하는 프로시져를 만들고져 합니다. proced...
이상호
•
1999.09.04 18:11
답변을 올려주신 두분께 감사드립니다. 하지만 아직 제가 원하는 해결책은 없어서 아쉽네요. 먼저 김...
구창민
•
1999.09.04 06:59
이상호 께서 말씀하시기를... > 폼 이름을 알고 있을 때 폼을 생성할 수 있을까요? > > 즉, 내가 생성...
김성동
•
1999.09.04 03:36
음... 테스트 해보지는 않았습니다만 이렇게 하면 되지 않을까 생각 되네요. var Form : TForm;...
이상호
•
1999.09.04 19:13
GetClass를 사용하기 전에 한 가지 해주어야 할 일이 있더군요. 먼저 GetClass를 사용하기 이전에 어디...
미노
•
2000.01.22 19:29
모든 고수님께 감사합니다. 최종 코드는 다음과 같습니다. unit Unit1; interface uses Windo...
호수영
•
1999.09.04 01:37
1
COMMENTS
/
0
LIKES
DB에서 자료를 검색할때 자음(ㄱ,ㄴ,ㄷ....)으로
jinifan
•
1999.09.04 11:20
호수영 께서 말씀하시기를... > DB에서 자료를 검색할때 자음(ㄱ,ㄴ,ㄷ....)으로 조회할 수 있는 방법이 ...
김성영
•
1999.09.04 00:30
1
COMMENTS
/
0
LIKES
TreeView에 대해
jinifan
•
1999.09.04 11:32
김성영 께서 말씀하시기를... > TreeView에서 배열을 사용하려고 하는데 문제가 발생합니다. > var > ...
초보
1999.09.04 00:30
0
COMMENTS
/
0
LIKES
procedure에 관하여
송영신
1999.09.04 00:24
0
COMMENTS
/
0
LIKES
도움이 될런지 ...
최수영
1999.09.04 00:09
0
COMMENTS
/
0
LIKES
[참조]크리스탈 레포트 홈페이지 Q/A주소
조계영
•
1999.09.03 22:42
1
COMMENTS
/
0
LIKES
윈도우 강제 종료시 실행중인 프로그램도 강제종료하기
안녕하세요 윈도우 종료와 관련 exitwindowsex 함수를 이용하여 몇가지 test해 보았지만 실행중인 아래아 한글이나, 네트워크 연결중일 때 저장 혹은 연결을 끊겠습니까 하는 식으로 물어 봅니다. 그런 물음없이 완전히 강제로 종료할 수 ...
김영대
•
1999.09.03 23:35
조계영 께서 말씀하시기를... > 안녕하세요 > > 윈도우 종료와 관련 exitwindowsex 함수를 이용하여 >...
조계영
1999/09/03 22:42
Views
1723
Likes
0
Comments
1
Reports
0
Tag List
수정
삭제
목록으로
한델 로그인 하기
로그인 상태 유지
아직 회원이 아니세요? 가입하세요!
암호를 잊어버리셨나요?
> 안녕하세요
>
> 윈도우 종료와 관련 exitwindowsex 함수를 이용하여
> 몇가지 test해 보았지만 실행중인 아래아 한글이나, 네트워크 연결중일 때
> 저장 혹은 연결을 끊겠습니까 하는 식으로 물어 봅니다.
>
> 그런 물음없이 완전히 강제로 종료할 수 있는 방법 좀 가르쳐 주시겠습니까
>
>
> exitwindowsex(ewx_shutdown,0); // 시스템 종료 => 물어봄
>
> ewx_force,poweroff등등 다 시도했으나 원하는 결과는 없었습니다.
원도우즈 종료전에 떠있는 프로세스를 TerminateProcess 를 사용하여
강제종료해 보세요
하지만 현재 원도우즈에 실행중인 프로그램이 하던 동작을
마무리 하지 못하고 TerminateProcess 하게되면 리소스 반납문제도
있지만 워드문서를 저장도 안했는데 종료하면 사용자가 좀 당황하지
않을까요...
아래 예제는 선택된 Process 만 강제종료하는데 좀 고치면
전체 프로세스를 종료하실 수 있을 겁니다
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.