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
[50306] Re:다른프로그램 윈도우 사이즈를 변경하려면..
장성호 [nasilso] 2259 읽음    2007-08-17 11:21
질문에 대해?
1.윈도우 size변경하는 함수를 모르신건가요?
2.아니면 다른프로그램의 윈도우 핸들 찾는방법을 모르시나요?


[답변]
1.윈도우 size변경함수는 ?
   SetWindowPos로 하면 됩니다.


2. 다른프로그램 프로세스명을 가지고 해당윈도우의 핸들을 찾는방법은?
    processname은  GetModuleBaseName 을 이용해서..
    윈도우 핸들은 EnumWindows를 통해서 찾는 함수샘플입니다.
   
  2.1 processid로 process 이름을 찾는 함수

#include <psapi.h>

String __fastcall GetModuleName(DWORD processID)
{
    char szProcessName[256];
    String ProgramName;
    HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,  FALSE, processID );
    if ( hProcess )
    {
        HMODULE hMod;
        DWORD cbNeeded;
        if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod),  &cbNeeded) )
        {
            GetModuleBaseName( hProcess, hMod, szProcessName, sizeof(szProcessName) );
        }

    }
    CloseHandle( hProcess );
    ProgramName=szProcessName;
    return ProgramName;

}


   2.2 ProdessID  pid로 해당 process main 윈도우 hwnd 찾기

HWND  hFindWnd;
bool __stdcall EnumWindowsProc(HWND Wnd,LPARAM pid)
{

    String caption;
    caption.SetLength(256);

    bool  Result = True;

    if( IsWindowVisible(Wnd) &&((GetWindowLong(Wnd, GWL_HWNDPARENT) == 0) ||
      (HWND(GetWindowLong(Wnd, GWL_HWNDPARENT)) == GetDesktopWindow)) &&
     ((GetWindowLong(Wnd, GWL_EXSTYLE) & WS_EX_TOOLWINDOW) == 0) )
    {

        DWORD ProcessID;
        GetWindowThreadProcessId(Wnd, &ProcessID);

        if(pid==ProcessID)
        {
               hFindWnd=Wnd; //ShowMessage("찾았다.");
               return false;
        }

    }
    return Result;
}


//===========사용예==============================

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    DWORD pid;
    pid=GetCurrentProcessId();
    EnumWindows((WNDENUMPROC)EnumWindowsProc,(LPARAM)pid);
   if(hFindWnd)
    {
           // .... SetWindowPos(hFindWnd,1,1,2,2,..);
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    DWORD pid=GetCurrentProcessId();
    ShowMessage(GetModuleName(pid));

}
//---------------------------------------------------------------------------

위 두함수를 잘 이용하면 됩니다.

쫌 조잡한 방법으로 했는데...
간단하게 하는 방법이 있을것 같은데...
시간이 없어서.....

그럼...

 
pili 님이 쓰신 글 :
: 안녕하세요.. 다름이 아니라 현재 윈도우 타이틀이 없는 프로그램의 윈도우 크기를 변경 하려고 합니다.
:
: 현재는 해당 프로세스명을 얻어 올 수 있는데..
:
: 해당 프로세스 명을 가지고 그 윈도우 크기를 변경하려면 어떤 방법으로 해야 하나요..
:
: 게시판을 찾아봐두 없는 것 같은 데.. 너무 간단해서 그러나요.... ^^;;;
:
: 답변 부탁드립니다.

+ -

관련 글 리스트
50302 다른프로그램 윈도우 사이즈를 변경하려면.. pili 1254 2007/08/17
50306     Re:다른프로그램 윈도우 사이즈를 변경하려면.. 장성호 2259 2007/08/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.