Programming
No. | 686 | ||||
Name. | swindler | ||||
Subject. | 프로세스명으로 프로세스 종료(함수) | ||||
Main Cate. | Win32 | ||||
Sub Cate. | C/C++ | ||||
Date. | 2010-09-27 18:09 | ||||
Hit. | 5851 (211.36.27.8) | ||||
File. | |||||
psapi.h는 visual studio 2003에서는 그냥 컴파일이 되며 6.0에서는 SDK를 설치해야만 한다. projectsetting -> link -> Object/library modles에 Psapi.lib를 추가해주어야한다. afx.h를 psapi.h보다 먼저 선언해주어야하며, 이후 컴파일이 순조롭게 진행된다면 문제가 없지만 다음과 같은 에러가 날수가 있다. uafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex uafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex 위의 두가지 에러가 발생하였다면 Project > setting > General > Microsoft Foundation Classes: 에서 Use MFC in a Static Libary 선택하면 문제없이 컴파일 될것이다. #include <afx.h> #include <psapi.h> void ExixProcessName(CString strProcessName); int main(int argc, char** argv) { ExixProcessName("test.exe"); return 0; } void ExixProcessName(CString strProcessName) { DWORD aProcesses[1024], cbNeeded, cProcesses; unsigned int i; if( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded )) return; cProcesses = cbNeeded / sizeof(DWORD); for ( i = 0; i < cProcesses; i++ ) { char szProcessName[MAX_PATH] = "unknown"; HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, aProcesses[i] ); if (NULL != hProcess ) { HMODULE hMod; DWORD cbNeeded; if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded) ) { GetModuleBaseName( hProcess, hMod, szProcessName, sizeof(szProcessName) ); } } bool bRet; if(strcmp(szProcessName,(LPSTR)(LPCTSTR)strProcessName)==0) { HANDLE hProcess = NULL; hProcess = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, aProcesses[i]); if(hProcess != NULL) { DWORD ExitCode = 0; GetExitCodeProcess( hProcess, &ExitCode ); bRet = ::TerminateProcess(hProcess, ExitCode ); if( bRet ) { ::WaitForSingleObject(hProcess, INFINITE); } ::CloseHandle(hProcess); } } CloseHandle( hProcess ); } } [바로가기 링크] : http://coolx.net/cboard/develop/686 |
|||||
|
|||||
[Modify] [Delete] | [Reply] [List] |