Q&A
HOME
Tips & Tech
Q&A
Discuss
Download
자유게시판
홍보 / 광고
구인 / 구직
LOGIN
회원가입
[긴급]실행모듈이 핸재 메모리에 있는지 검색
GetMoudleHandle을 이용하여 16비트에서는 검색을 하였는데
32비트에서는 핸들을 찾지 못하는데 왜 그렇죠?
특정실행파일이 메모리에 존재하는지 검사할려면 어떻게 해야하나요?
가르쳐 주세요
소스를 주시면 더욱더 고맙구요
1
COMMENTS
김영대
•
1999.07.15 02:01
안류진 께서 말씀하시기를...
> GetMoudleHandle을 이용하여 16비트에서는 검색을 하였는데
> 32비트에서는 핸들을 찾지 못하는데 왜 그렇죠?
> 특정실행파일이 메모리에 존재하는지 검사할려면 어떻게 해야하나요?
> 가르쳐 주세요
> 소스를 주시면 더욱더 고맙구요
다음 Delphi source는 process처리를 위한 예제프로그램을
작성한 것입니다.
리스트박스에 현재 실행중인 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.15 07:59
0
COMMENTS
/
0
LIKES
다시.. 특정 프로그램의 실행을 막으려면..
류재성
•
1999.07.15 05:43
1
COMMENTS
/
0
LIKES
PROGRAM RUN을 하면 ERROR 발생
김상영
•
1999.07.15 10:34
류재성 께서 말씀하시기를... > 안녕하세요... > 저는 DELPHI를 처음 공부하는 학생입니다. > DELPHI 4...
박혁
1999.07.15 05:10
0
COMMENTS
/
0
LIKES
.h ,.def and c소스처리
김종환
•
1999.07.15 05:07
1
COMMENTS
/
0
LIKES
[궁금]Alt-F4 (종료키)
신인재
•
1999.07.15 06:12
음냐 전역적으로 사용을 하시려면 delphi.co.kr의 팁모아에 안치봉님이 올리신 전역적 핫키 선언하는 법...
안류진
•
1999.07.15 02:38
1
COMMENTS
/
0
LIKES
[재질문]고마운 김영대님 다시금 부탁드립니다.
김영대
•
1999.07.15 03:27
안류진 께서 말씀하시기를... > 주신 소스를 테스트 할 수가 없군요 > Help File을 아무리 보아도 UNIT에...
오세웅
•
1999.07.15 02:22
1
COMMENTS
/
0
LIKES
마스크 에디터에서 한글입력이 안되게...
전철호
•
1999.07.15 02:40
오세웅 께서 말씀하시기를... > 안녕하세요 > 마스크 에디터에 숫자만 입력되도록 하고싶은데요 > 마스...
박성훈
1999.07.15 01:55
0
COMMENTS
/
0
LIKES
분석설계에 대해 공부하려고 하는데..
최선기
•
1999.07.15 00:24
3
COMMENTS
/
0
LIKES
파라미터를 이용한 query를 하는데...
송기원
•
1999.07.15 00:32
var vcode : string; begin with Query1 do Begin close; sql.Clear; sql.a...
최선기
•
1999.07.15 01:22
송기원 께서 말씀하시기를... > var > vcode : string; > begin > with Query1 do Begin > ...
조복기
•
1999.07.15 02:12
안녕하세요..조복기입니다. 요즘에 파라미터 사용에 관해 질문이 상당히 많네요.. 분명 Q&A란을 자세...
안류진
•
1999.07.15 00:00
1
COMMENTS
/
0
LIKES
이진파일을 텍스트타입의 필드에 저장하는 방법은?
송기원
•
1999.07.15 00:33
Database를 어떤것을 사용하시는지 모르겠는데... Table상에서 이진파일을 저장할 field의 Type을 .. I...
안류진
•
1999.07.14 23:56
1
COMMENTS
/
0
LIKES
[긴급]실행모듈이 핸재 메모리에 있는지 검색
GetMoudleHandle을 이용하여 16비트에서는 검색을 하였는데 32비트에서는 핸들을 찾지 못하는데 왜 그렇죠? 특정실행파일이 메모리에 존재하는지 검사할려면 어떻게 해야하나요? 가르쳐 주세요 소스를 주시면 더욱더 고맙구요
김영대
•
1999.07.15 02:01
안류진 께서 말씀하시기를... > GetMoudleHandle을 이용하여 16비트에서는 검색을 하였는데 > 32비트에서...
심경섭
1999.07.14 23:27
0
COMMENTS
/
0
LIKES
Qreport오류?
심경섭
•
1999.07.14 23:24
1
COMMENTS
/
0
LIKES
Tdatabase에 대해서
송기원
•
1999.07.15 00:23
Tdatabase -> Tquery, Ttable -> TdataSource -> Data Award component -> user 위와 같은 계층적이 구조...
서경철
1999.07.14 22:03
0
COMMENTS
/
0
LIKES
dll화일로부터 문자배열을 받을려면?
박홍석
•
1999.07.14 21:27
1
COMMENTS
/
0
LIKES
실시간에 컨트롤 드래그하여 옮기기
류성호
•
1999.07.14 22:32
박홍석 께서 말씀하시기를... > 안녕하세요. > > 델파이에서 마우스로 컨트롤을 드래그(마우스 왼쪽버...
이일수
1999.07.14 21:08
0
COMMENTS
/
0
LIKES
[부탁] 화상이나 음성 실시간 전송하기..
황하성
•
1999.07.14 20:33
2
COMMENTS
/
0
LIKES
DB화일 초기화는 어떻게?
황하성
•
1999.07.15 17:29
황하성 께서 말씀하시기를... > > 안녕하세요... > 초보적인 DB 질문인데 잘 몰라서 질문 올립니다... ...
정재홍
•
1999.07.14 22:31
황하성 께서 말씀하시기를... > > 안녕하세요... > 초보적인 DB 질문인데 잘 몰라서 질문 올립니다... ...
솔잎
1999.07.14 20:23
0
COMMENTS
/
0
LIKES
findkey를 잘못 썼는지...
이현신
•
1999.07.14 19:16
1
COMMENTS
/
0
LIKES
IP 가 고정IP 인지 동적인지 구별방법??
camplus
•
1999.07.15 01:33
좋은 방법은 아니지만,, 처음 실행시에 IP를 기록합니다. INI나. 레지스트리에.. 그리고 나서, 다음에 실...
이정환
•
1999.07.14 18:30
2
COMMENTS
/
0
LIKES
Length()함수의 리턴값?
구창민
•
1999.07.14 18:59
이정환 께서 말씀하시기를... > RichEdit1.Lines[1]의 길이를 Length()함수로 구하였더니, > 다음과 같은...
이정환
•
1999.07.16 21:55
말씀하신 대로 하여 보았습니다. 그랬더니 (1) 라인 끝에서 Enter(0A0D)를 치고 다음 라인으로 바꾼 곳은...
디제이
•
1999.07.14 18:29
1
COMMENTS
/
0
LIKES
리소스에 Wav파일을 작성?
이정욱
•
1999.07.14 19:25
RC파일(텍스트)을 만들어서 델파이와 같이있는 BRCC32를 가지고 리소스컴파일을 하면 RES라는 컴파일된 리...
안류진
1999/07/14 23:56
Views
438
Likes
0
Comments
1
Reports
0
Tag List
수정
삭제
목록으로
한델 로그인 하기
로그인 상태 유지
아직 회원이 아니세요? 가입하세요!
암호를 잊어버리셨나요?
> GetMoudleHandle을 이용하여 16비트에서는 검색을 하였는데
> 32비트에서는 핸들을 찾지 못하는데 왜 그렇죠?
> 특정실행파일이 메모리에 존재하는지 검사할려면 어떻게 해야하나요?
> 가르쳐 주세요
> 소스를 주시면 더욱더 고맙구요
다음 Delphi source는 process처리를 위한 예제프로그램을
작성한 것입니다.
리스트박스에 현재 실행중인 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.