|
볼랜드 사용자 포럼에서 언제나 얻어 쓰기만 하는 사용자 입니다.
저도 이것 때문에 고생을 많이 해서....
오늘 적당한 자료를 찾아서... 만들었습니다.
프로그램의 실행파일명으로 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); //윈도우 객체를 잡아내면 됩니다...
:
|