한원희님 답변 감사합니다.
허접 초보에게는 아직 어려운 문제네여...^^;
원희님께서 알려주신 방법으로 해보았는데
정상 작동이 안되네여...
특정 버튼을 눌렀을때 버튼에 연결된 프로그램을 실행하고
중복 실행을 방지 하려고 합니다.
////////////////////////////////////////////////////////////////
var hwnd : Integer;
if 버튼 = 2 then
begin
hwnd := FindWindow('Application.exe', nil);
if hwnd <> 0 then
begin
ShowWindow(hwnd, SW_SHOW);
SetForegroundWindow(hwnd);
end
else
WinExec('Application.exe', SW_SHOWNORMAL);
end;
////////////////////////////////////////////////////////////////
위와 같은 소스에서 문제가 무엇인지 아직 파악이 안되네여..;;;
고수님들 도움 부탁드립니다.
클래스의 이름이 잘못되어 있네요.
실행시킬 프로그램의 클래스 이름을 정확하게 아시려면, 스파이나 Winsight를 이용해서 프로그램의 클래스 이름을 얻을 수 있습니다.
참고로, 델파이의 클래스 이름은 "TAppBuilder" 이고, 인터넷 익스플로러의 클래스 이름은 "IFrame"입니다.
또 한가지, FindWindow의 두 번째 파라미터 즉, 윈도우 타이틀의 캡션을 통해서도 얻을 수 있습니다. 캡션에 나타나는 문자열이 "Application"이라면,
hwnd:=FindWindow(nil, "Application");
과 같이 대체하시면 되겠죠. 하지만, 클래스 이름으로 하는 것이 확실하죠. 윈도우 타이틀의 캡션은 상황에 따라 바뀌기 때문에 정확한 윈도우의 핸들을 얻기가 어렵죠.
참, 만약 실행시키실 프로그램이 델파이로 자작한 것이라면, 클래스 이름은 매우 쉽게 얻을 수 있습니다. 자신이 정한 이름이 클래스 이름이 되죠.
TForm1=class(TForm)
...
end;
식으로 메인폼을 선언했다면 클래스 이름은 "TForm1"이 됩니다.