[파워빌더] 중복실행확인
------------------------------------------------------
스트럭처 생성
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 최초작성 시작
*/
스트럭처 생성
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 최초작성 시작
*/