TlHelp32 를 이용해서 구하면 편리합니다.
#include "TlHelp32.h"
DWORD __fastcall TMainForm::FindProcessPid(String sExeFullName)
{
String sExeName=ExtractFileName(sExeFullName);
sExeName=sExeName.LowerCase();
PROCESSENTRY32 pe32 = {0} ;
pe32.dwSize = sizeof(PROCESSENTRY32);
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0) ;
if (hSnapshot == INVALID_HANDLE_VALUE) return 0;
if (!Process32First(hSnapshot, &pe32))return 0;
do
{
String sProcessName=pe32.szExeFile;
sProcessName=sProcessName.LowerCase();
if(sProcessName==sExeName)
{
DWORD pid=pe32.th32ProcessID ;
CloseHandle(hSnapshot);
return pid;
}
} while(Process32Next(hSnapshot, &pe32));
CloseHandle(hSnapshot);
return NULL;
}
EnumWindows , EnumDesktopWindow등을 통해 현재 윈도우에 윈도우전체를 확인해 봐도되구요
그럼..
터미네이트 님이 쓰신 글 :
: 보내주신 답변 감사합니다.
:
: TeminateProcess을 사용하기위해서는 죽여야할 Process의 PID를 알아야할것 같은데
: 죽여야할 프로그램의 PID를 어떻게 받아야할지????
:
: HWND hWnd = FindWindow(NULL, "제목 없음 - 메모장");
: if(hWnd)
: {
: DWORD ProcessId;
: GetWindowThreadProcessId(hWnd, &ProcessId); // hWnd로 프로세스 ID를 얻음..
: HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessId);
: if(hProcess)
: {
: TerminateProcess(hProcess,0);//또는 ExitProcess 사용해서 죽임..
: }
: }
:
: 위와같이 Setting을 하면 메모장이 죽어지지만 제가 죽여야되는 프로그램은 d:\\NanoLoader.exe파일을
: 종료해야하는데 Window작업관리자에서 PID를 받아야하는데...어떻게 받죠?
: =>HWND hWnd = FindWindow(NULL, "NanoLoader.exe");
:
:
:
:
:
:
: 장성호 님이 쓰신 글 :
: : 1. 프로그램 종료
: : TeminateProcess 를 이용하면 될것이구
: :
: : 윈도우 어플이면
: : WM_CLOSE , WM_QUIT 를 날린후에 종료 안되면 강제종료하는것이 좋을수도...
: :
: :
: :
: : 2. 프로그램 실행
: : ShellExecute 또는 CreateProcess를 이용하여..
: :
: :
: : 그럼..
: :
: :
: : 터미네이트 님이 쓰신 글 :
: : : 버튼두개있는 프로그램을 만들어서
: : : 1번 버튼을 누르면 D:\\Loader.exe파일을 죽이고(동료하고)
: : : 2번 버튼을 누르면 D:\\Loader.exe파일을 실행시키는 프로그램을 만들고 싶은데 알려주세요.
: : :
: : : 프로세스를 죽이려면 PID를 받고 그 핸들로 프로세스를 죽인다고하는데....
: : :
: : :
: : : 감사합니다.