워낙 허접이라 무식한 질문이지만.....^^;
간단한 프로그램을 만들었는데요...
하나의 프로그램에서 다른 프로그램을 실행 시키는 프로그램입니다.
(예를들어, 창하나를 띄워서 버튼을 만들고 각각의 버튼에 다른 실행 화일을
연결하면 해당 프로그램이 실행 되는겁니다.)
그런데 문제는 같은 버튼을 여러번 누를 경우 해당 프로그램이 여러개 실행 된다는거져...;;
이걸 바꾸고 싶은데요...
이미 실행되고 있는 프로그램은 새롭게 실행되는것이 아니라
기존에 실행되고 있는 프로그램 창에 포커스만 넘겨주도록 하고 싶거든여.
어떤 방법으로 해야 될런지여...?
고수님의 고견 부탁드립니다.
FindWindow를 사용해서 해결할 수 있습니다.
각 버튼에서 실행시킬 프로그램의 클래스명을 이용하여, FindWindow(클래스명, nil); 로 윈도우 핸들이 제대로 넘어오면, 그 윈도우를 표시하면 되겠죠.
hwnd:=FindWindow('클래스명', nil);
if hwnd<>0 then
begin
ShowWindow(hwnd, SW_SHOW);
SetForegroundWindow(hwnd);
end
else
WinExec(프로그램, SW_SHOWNORMAL);
그런데, ShowWindow를 사용하실 때, 주의하실 점이 한가지 있습니다. 보통 델파이를 이용하지 않은 다른 프로그램의 경우, ShowWindow를 직접 사용해도 별문제가 없지만, 델파이로 컴포넌트를 복잡하게 사용한 프로그램을 ShowWindow로 화면에 나타내면, 올바론 모습으로 나타나지 않는 경우가 있습니다. 이런 경우 별도의 사용자 메시지를 선언하고, 해당 메시지 핸들러에서 Show 메소드를 호출해주면, 정상적으로 화면에 나타납니다. 참고하세요. ^^