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
[36218] Re:Re:실행화일명 또는 프로세스 정보를 통해 윈도우 핸들을 가져올수있나요?
이봉근 [defuzzy] 2326 읽음    2004-07-12 13:32
볼랜드 사용자 포럼에서 언제나 얻어 쓰기만 하는 사용자 입니다.
저도 이것 때문에 고생을 많이 해서....
오늘 적당한 자료를 찾아서... 만들었습니다.
프로그램의 실행파일명으로 ProcessID 얻구요...(snapshot이용)
TProcessEntry32에서 실행파일명있습니다. 이것과 비교.
윈도우자체의 HWND을 얻은후에 (getwindow이용) Child Handle의 모든 함수를
얻은 후에 위에서 구한 ProcessID와 비교후에
SetForgroundWindow명령으로 포커스 하는 것까지의 소스 파일입니다.
저는 win2000이란 win2000이상에서는 지원하지만.. win98/95에 대해서는 ^^;;

void __fastcall TForm1::FindProcess(void)
{
    HANDLE  snapshot;
    PROCESSENTRY32 processinfo;
    AnsiString WindowCaption;

    WindowCaption.SetLength(256);

    processinfo.dwSize = sizeof(processinfo);
    snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (snapshot == NULL)   return;

    bool status = Process32First(snapshot, &processinfo);
    while(status)
    {
        String buffer;
        buffer.SetLength(512);
        sprintf(buffer.c_str(), "%d", processinfo.th32ProcessID);
        OpenProcess(PROCESS_ALL_ACCESS, false,processinfo.th32ProcessID);

        ListBox1->Items->Add(processinfo.szExeFile);
        ListBox2->Items->Add(buffer);

        if(strcmp(processinfo.szExeFile,"프로그램실행파일명") == 0)
            GetHwndFromProcessID( processinfo.th32ProcessID );

        status = Process32Next(snapshot, &processinfo);
    }
}
//---------------------------------------------------------------------------
bool __fastcall TForm1::GetHwndFromProcessID( DWORD processID )
{
    DWORD   dwProcID;

    HWND hWndPrevious = GetWindow(GetDesktopWindow(), GW_CHILD);

    while (IsWindow(hWndPrevious))
    {
           GetWindowThreadProcessId(hWndPrevious,&dwProcID);
        if (dwProcID == processID)
        {
            SetForegroundWindow(hWndPrevious);
            return true;
        }
        hWndPrevious = ::GetWindow(hWndPrevious, GW_HWNDNEXT);
    }

    return false;
}

그럼..


조건일 님이 쓰신 글 :
: TProcessEntry32 Process32; // tagPROCESSENTRY32 variable..
: TObject(Process32.th32ProcessID); //윈도우 객체를 잡아내면 됩니다...
:

+ -

관련 글 리스트
29538 실행화일명 또는 프로세스 정보를 통해 윈도우 핸들을 가져올수있나요? 공부하는 이 1554 2004/04/27
34935     Re:실행화일명 또는 프로세스 정보를 통해 윈도우 핸들을 가져올수있나요? 강재호.만해 1404 2004/04/28
34934     Re:실행화일명 또는 프로세스 정보를 통해 윈도우 핸들을 가져올수있나요? 강재호.만해 1381 2004/04/28
34933     Re:실행화일명 또는 프로세스 정보를 통해 윈도우 핸들을 가져올수있나요? 조건일 1435 2004/04/28
36218         Re:Re:실행화일명 또는 프로세스 정보를 통해 윈도우 핸들을 가져올수있나요? 이봉근 2326 2004/07/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.