홈 · 개발 참고자료

개발 참고자료

[파워빌더] 중복실행확인

작성자
관리자
작성일
2017-09-15
조회
12246
분류
파워빌더
------------------------------------------------------
스트럭처 생성
str_processentry32
------------------------------------------------------
global type str_PROCESSENTRY32 from structure
ulong dwSize
ulong cntUsage
ulong th32ProcessID
ulong th32DefaultHeapID
ulong th32ModuleID
ulong cntThreads
ulong th32ParentProcessID
LONG pcPriClassBase
ulong dwFlags
char szExeFile[256]
end type




-------------------------------------------------------
api 설정
-------------------------------------------------------
function ulong CreateToolhelp32Snapshot(long dwFlags, long th32ProcessID) library 'kernel32.dll' Alias For "CreateToolhelp32Snapshot;Ansi"
function boolean Process32First(ulong hSnapshot, ref str_PROCESSENTRY32 lppe) library 'kernel32.dll' Alias For "Process32First;Ansi"
function boolean Process32Next(ulong hSnapshot, ref str_PROCESSENTRY32 lppe) library 'kernel32.dll' Alias For "Process32Next;Ansi"
FUNCTION BOOLEAN EnumProcesses(REF ULONG process_id[2048], ULONG array_size, REF ULONG bytes) LIBRARY "psapi.dll" Alias For "EnumProcesses;Ansi"
FUNCTION BOOLEAN EnumProcessModules(ULONG process_handle, REF ULONG module_handles[2048], ULONG array_size, REF ULONG bytes) LIBRARY "psapi.dll" Alias For "EnumProcessModules;Ansi"
FUNCTION ULONG GetModuleBaseNameA(ULONG process_handle, ULONG module_handle, REF STRING base_name, ULONG buffer_size) LIBRARY "psapi.dll" Alias For "GetModuleBaseNameA;Ansi"
FUNCTION ulong OpenProcess(ulong dwDesiredAccess, boolean bInheritHandle, ulong dwProcessId ) library 'kernel32.dll' Alias For "OpenProcess;Ansi"
function boolean TerminateProcess(ulong handle, uint exitcode) library "kernel32.dll" Alias For "TerminateProcess;Ansi"
Function boolean CloseHandle (ulong file_hand) LIBRARY "KERNEL32.DLL" Alias For "CloseHandle;Ansi"


--------------------------------------------------------
함수 생성 :
--------------------------------------------------------
Return Type : boolean
Aggument 1 : string as_exe_name 찾을프로구램 이름
Aggument 2 : boolean ab_process_kill 찾은다음 프로그램을 강제 종료 할것인지...
---------------------------------------------------------
호출예시
/* 프로그램이 실행중인경우 강제 종료시킨다. */
bReturn = gf_exe_dupcheck("notepad.exe", false)
if bReturn then
Messagebox("확인", "실행중인 프로그램을 종료후 다시 진행하십시오!", stopsign!)
Halt close
else
---------------------------------------------------------
long PROCESS_VM_READ = 16
long PROCESS_QUERY_INFORMATION = 1024
long TH32CS_SNAPPROCESS = 2
ulong lul_SnapShot
ulong lul_handle = 0
ulong lul_THandle = 0


str_processentry32 lstr_ProcEntry
string ls_szText
Boolean lb_Chk
Boolean rb_Return = false


lul_SnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0)


IF lul_SnapShot <> -1 THEN
lstr_ProcEntry.dwSize = 296
lb_Chk = Process32First(lul_SnapShot, lstr_ProcEntry)

DO WHILE( lb_Chk )

ls_szText = lower(Trim( lstr_ProcEntry.szexefile))
IF ls_szText = lower(trim(as_exe_name)) THEN
lul_handle = lstr_ProcEntry.th32processid
if ab_process_kill then
lul_THandle = OpenProcess(1, False, lul_handle )
TerminateProcess(lul_THandle, 0)
CloseHandle(lul_THandle)
rb_Return = True
else
rb_Return = True
Exit
end if

END IF
lb_Chk = Process32Next(lul_SnapShot, lstr_ProcEntry)
LOOP


CloseHandle(lul_SnapShot)
END IF


Return rb_Return


/*
_________________________________________________________________________


<< Copyright (c) 2009 M&P Inc. >>
담당자 : 정보전략 팀장 왕희복(02-564-7331)
_________________________________________________________________________
Description : 중복실행확인...

Argument : strint as_exe_name : 중복실행인지 찾을 프로그램
boolean ab_process_kill : 해당프로그램 실행중지 시킬지 확인..


Return : boolean : TRUE(중복프로그램 존재함)


Change List:
Name Date Descriptions
_________________________________________________________________________


왕희복 2017/01/23 최초작성 시작


*/