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
[57799] Re:익스풀로러 끄는방법
외랑 [] 1831 읽음    2009-07-28 01:37
니라카 님이 쓰신 글 :
: HWND hWnd = FindWindow(NULL, ".* - Windows Internet Exploer");  
:  if(hWnd)  
:  {  
:      SendMessage(hWnd,WM_CLOSE,0,0);  
:  } 
:
: 이런식으로 하면될지알았더니 안되네요 ㅠ

FindWindow 라는  API 함수는 문자열이 완전해야만 찾을 수 있는 단점이 있습니다.
윈도우의 캡션 타이틀을 정확히 모른다면 당연히 안되겠지요?

www.winapi.co.kr 을 참고해서 보면 아래의 내용이 있습니다.
참고해 보시면 FindWindow는 안되지요..
참고함수에 EnumWindows라는 녀석이 캡션의 부분문자열로 검색가능한 함수라고 나옵니다.
EnumWindows 라는 API를 파헤쳐 보시기 바랍니다.

--------------------------------------------------------------------------
원형
HWND FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName);

MFC 원형
static CWnd* PASCAL CWnd::FindWindow( LPCTSTR lpszClassName, LPCTSTR lpszWindowName );

인수
▶lpClassName : 검색에 사용할 윈도우 클래스 이름, 또는 아톰값. NULL이면 모든 윈도우 클래스를 검색한다.
▶lpWindowName : 검색에 사용할 윈도우의 캡션 문자열. NULL이면 모든 캡션의 윈도우를 검색한다.

리턴
성공하면 검색한 윈도우의 핸들을 리턴하며 실패했을 경우 NULL을 리턴한다.

설명
윈도우 클래스와 캡션으로 윈도우를 검색하여 핸들을 얻는다. 윈도우간의 상호작용을 하기 위해서는 윈도우의 핸들이 필요한데 이 함수로 원하는 윈도우의 핸들을 조사할 수 있다. 윈도우 클래스 또는 윈도우 캡션 둘 중 하나의 조건으로 검색할 수 있다. 차일드 윈도우는 검색할 수 없으며 탑 레벨 윈도우만 검색 대상이 된다. 윈도우 클래스와 캡션 문자열은 대소문자를 가리지는 않지만 부분 문자열을 검색할 수는 없다. 따라서 캡션이 가변적으로 변하는 윈도우를 검색하는 목적으로는 이 함수를 사용할 수 없으며 우연히 같은 캡션을 가지는 윈도우가 있을 경우 잘못된 검색을 할 위험도 있다.

두 프로그램이 상호 작용을 하고자 할 때 미리 캡션을 정해 놓고 정해진 캡션으로 상대방을 찾는 용도로 주로 많이 사용된다. 이 경우 윈도우의 캡션은 항상 고정되어 있어야 한다는 제약이 있다.

예제 1

다음 예제는 지뢰 찾기 윈도우를 검색한다. 만약 지뢰 찾기 윈도우가 발견되면 윈도우의 위치를 강제로 (10,10)으로 옮긴다. 일단 윈도우의 핸들을 얻었으면 윈도우 이동, 파괴, 숨김, 메시지 전달 등의 모든 작업을 할 수 있다.

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
    HDC hdc;
    PAINTSTRUCT ps;
    HWND hMine;
    LPCTSTR Mes=TEXT("지뢰 찾기를 실행시킨 후 마우스 오른쪽 버튼을 누르십시오");

    switch(iMessage) {
    case WM_LBUTTONDOWN:
        hMine=FindWindow(NULL,"지뢰 찾기");
        if (hMine == NULL) {
            MessageBox(hWnd,"지뢰 찾기가 실행중이지 않습니다","알림",MB_OK);
        } else {
            SetWindowPos(hMine,HWND_NOTOPMOST,10,10,0,0,SWP_NOSIZE);
        }
        return TRUE;
    case WM_PAINT:
        hdc=BeginPaint(hWnd, &ps);
        TextOut(hdc,10,10,Mes,lstrlen(Mes));
        EndPaint(hWnd, &ps);
        return 0;
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }
    return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

참고함수
FindWindowEx : 차일드 윈도우를 검색한다.
EnumWindows : 생성되어 있는 모든 윈도우를 열거한다. 이 함수를 사용하면 캡션에 대해 부분 문자열 검색이 가능하다.

플랫폼 95이상

참조 본문의 IPC 관련 예제들은 통신 대상을 찾기 위해 주로 이 함수를 많이 사용한다.
----------------------------------------------------------------------------

+ -

관련 글 리스트
57797 익스풀로러 끄는방법 니라카 1294 2009/07/27
57801     Re:익스풀로러 끄는방법 박진수 1289 2009/07/28
57799     Re:익스풀로러 끄는방법 외랑 1831 2009/07/28
57813         답변해주신 두분 감사합니다 니라카 910 2009/07/28
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.