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

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[804] 현재 실행된 창이 있는 프로그램을 스캔하기.
김태선 [cppbuilder] 7407 읽음    2008-09-13 15:52
//---------------------------------------------------------------------------
// 현재 실행된 창이 있는 프로그램을 스캔한다.
// 결과 윈도 제목과 핸들은 ListBox에 세팅한다.

void    TFormMain::ReScan()
{
    TListBox *LB = ListBox1;
    LB->Items->Clear();

    char  szText[400];
    HWND  hwnd = GetTopWindow(NULL);
    while(hwnd != NULL)
    {
        if (::GetParent(hwnd) != NULL) ;
        else if (GetWindowLong(hwnd, GWL_EXSTYLE) & WS_EX_TOOLWINDOW) ;
        else if (! IsWindowVisible(hwnd)) ;
        else if ((hwnd == Application->Handle) || (hwnd == Handle)) ; // 자신 제외
        else
        {
            GetWindowText(hwnd, szText, 400);
            LB->Items->AddObject(szText, (TObject*)hwnd);
        }
        hwnd = GetWindow(hwnd, GW_HWNDNEXT);
    }
}
//---------------------------------------------------------------------------
장성호 [nasilso]   2008-09-16 13:53 X
"현재 실행된 창이 있는 프로그램을 스캔한다" 고 하셨는데...
목적이 Windows 작업관리자의 응용 프로그램 탭에 리스트처럼 나오도록 하는것이 목적이죠?

위코드로 하면 Builder 6 의 경우 3개 이상 뜨네요  (Windows XP)

Delphi나 Builder로 만든 프로그램에서 메인폼 이외에 Form을 Show 해놓은 상태라면..
Show해놓은 갯수만큼...

if (::GetParent(hwnd) != NULL) ; 
생각건데 GetParent 가 NULL인것 중에 찾을것이 아니라
GetWindowLong(hwnd,GWL_HWNDPARENT) 가 NULL 인것 중에서 찾아야 할것 같구..

자신을 제외 하는것두..
자신에 MainForm 이외에 sub폼이 있을수 있으니 바로밑에 팁에
GetWindowThreadProcessId 함수를 이용하여
Processid가  GetCurrentProcessId 같지 않는지 비교하는것이 확실할듯 합니다.

그렇게 하니 XP에서는 작업관리자의 응용 프로그램 탭에 있는것과 비슷하게 나오네요
그럼
김태선 [cppbuilder]   2008-09-30 12:35 X
이건 그냥 하나의 팁일 뿐이니
쓰는 것은 각자 알아서.

+ -

관련 글 리스트
804 현재 실행된 창이 있는 프로그램을 스캔하기. 김태선 7407 2008/09/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.