C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[50760] 장성호님 답변해주셔서 고맙습니다.
구윤태 [] 1569 읽음    2007-10-08 13:23
장성호 님이 쓰신 글 :
: 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);
: :     }
: :
: : 외부 가상키보드를 실행 시키고 , 
: : 실행시킨 외부 실행프로그램을 닫고 , 다시 실행 시키고 싶습니다.

+ -

관련 글 리스트
50758 ShellExecute 로 실행된 외부 프로그램을 닫고 다시 시행 시킬려면 어떻게 하나요 구상모 1428 2007/10/08
50759     Re:ShellExecute 로 실행된 외부 프로그램을 닫고 다시 시행 시킬려면 어떻게 하나요 장성호 9930 2007/10/08
50760         장성호님 답변해주셔서 고맙습니다. 구윤태 1569 2007/10/08
50761             구상모님과 구윤태님은 무슨관계인가요? 장성호 1817 2007/10/08
50765                 Re:^^ (둘다 제 이름입니다 . 집에서 부르는 명칭이랑, 호적상 좀달라서 저도 섞어서 써요 ) 구윤태 1381 2007/10/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.