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