|
장성호 님이 쓰신 글 :
: clickey.exe 프로그램을 직접 만드시는것은 아니시죠?
: 직접 만드신것이라면 방법은 너무 많아서...
:
:
: 방법1.
: 일반적으로 윈도우는 WM_CLOSE 메세지에 윈도우를 닫습니다.
: 만약 그 윈도우가 메인 윈도우이면 보통 프로그램이 종료하게 되죠
:
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
: HWND hWnd = FindWindow(NULL, "제목 없음 - 메모장");
: if(hWnd)
: {
: SendMessage(hWnd,WM_CLOSE,0,0);
: }
: }
: //---------------------------------------------------------------------------
:
: 방법2.
: 하지만 WM_CLOSE 메세지는 프로그램에 따라 종료 확인 메세지를 띄워 준다던지,
: 프로그램을 hide시킨다던지 , 프로글램이 바로 종료되지 않을 수 있습니다.
:
: 그래서 HWND로 process정보를 찾을수 있다면
: TeminateProcess 로 종료시킬수 있죠
:
: void __fastcall TForm1::Button2Click(TObject *Sender)
: {
: 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 사용해서 죽임..
: }
: }
: }
: //---------------------------------------------------------------------------
:
:
: 방법3.
: FindWindow로 윈도우 핸들을 못 찾을 수 있습니다.
: 또한 똑같은 프로그램이 여러개 떠있다면 정확하게 내가 원하는 프로그램을 찾지 못할 수가 있죠
:
: ShellExecute 가 아닌 CreateProcess로 프로그램을 실행시키면 process정보를 받을 수 있습니다.
: 이 정보를 가지고 있다가 TerminateProcess로 프로그램 종료시키면 됩니다.
:
:
: PROCESS_INFORMATION pinfo;
: void __fastcall TForm1::Button3Click(TObject *Sender) //프로그램 실행
: {
: STARTUPINFO start;
: memset(&start, 0, sizeof(STARTUPINFO));
: start.cb = sizeof(start);
: start.wShowWindow = SW_SHOWDEFAULT;
: SECURITY_ATTRIBUTES sec;
: sec.nLength = sizeof(sec);
: sec.lpSecurityDescriptor = NULL;
: sec.bInheritHandle = TRUE;
:
: if(CreateProcess("c:\\Windows\\notepad.exe", NULL, &sec, &sec, TRUE,
: 0, NULL, NULL, &start, &pinfo) != TRUE)
: {
: ShowMessage(AnsiString("CreateProcess() failed: ") + GetLastError());
: return;
: }
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::Button4Click(TObject *Sender) //프로그램 종료
: {
: TerminateProcess(pinfo.hProcess,0);//또는 ExitProcess 사용해서 죽임..
: pinfo.hProcess=0;
: }
: //---------------------------------------------------------------------------
:
:
:
: 그럼...
:
:
:
:
:
: 구상모 님이 쓰신 글 :
: : --------------------------------------------------------------------------
: : HWND pHwnd = FindWindow(NULL, "클리키 1.5");
: :
: : if(pHwnd == NULL)
: : {
: : ShellExecute(NULL,"open",
: : "C:\\Program Files\\BMTECH\\VirtualKeyboard\\clickey.exe"
: : ,NULL
: : ,NULL
: : ,SW_NORMAL);
: : }
: :
: : 외부 가상키보드를 실행 시키고 ,
: : 실행시킨 외부 실행프로그램을 닫고 , 다시 실행 시키고 싶습니다.
|