2010-04-07 4 views
1

C에서 전에 콘솔 응용 프로그램에서 system() 함수를 사용했고 system()을 사용하여 다른 프로세스를 시작하면이를 호출 한 프로세스의 콘솔 창을 상속합니다.원래 콘솔을 상속 한 프로세스에서 Delphi의 ShellExecute()를 사용 하시겠습니까?

델파이에서는 system()이 존재하지 않으므로 ShellExecute()을 사용하여 새 프로세스를 만들었지 만 새 프로세스가 새 콘솔 창에 나타납니다. 그것을 호출하는 창 핸들을 상속받을 수있는 방법이 있습니까?

은 내가 콘솔 창을 얻을 ShellExecute()HWND 부분을 통과하는

function GetConsoleWindow(): HWND; stdcall; external 'kernel32.dll'; 

을 사용했지만, 그것은 작동하지 않았다.

+0

나는 다음과 같이 사용했다 : function GetConsoleWindow() : HWND; stdcall; 외부 'kernel32.dll'; 이 함수는 콘솔 창을 ShellExecute의 HWID 부분에 전달하려고 시도하지만 작동하지 않습니다. – Phil

+0

나는 그것을 당신의 질문에 추가했습니다, 당신이 그것을 의미하는대로 잘하면. – mghie

+0

Phil, "작동하지 않는다"고 말할 때 그 의미는 무엇입니까? 대신 무엇을 했습니까? –

답변

5

ShellExecute()을 사용하면 스폰 된 응용 프로그램이 동일한 콘솔을 사용할 수 없게됩니다. ShellExecute() 호출의 HWND 요소는 다음과 같이 문서화됩니다.

상위 창을 지정합니다. 이 창은 응용 프로그램이 생성하는 모든 메시지 상자를받습니다. 예를 들어 응용 프로그램에서 메시지 상자를 생성하여 오류를보고 할 수 있습니다.

콘솔 응용 프로그램에는 아무런 영향을 미치지 않습니다.

대신 CreateProcess()을 사용하면 생성 된 프로세스를 훨씬 제어 할 수 있습니다. dwCreationFlags 매개 변수를 사용하면 새 프로세스가 자신의 콘솔 (강제로 CREATE_NEW_CONSOLE 플래그 사용)을 갖도록 강제 할 수 있지만 기본적으로 상위 프로세스의 콘솔도 상속합니다.

+1

위대한, 나는 그것을 시험해 볼 예정이다. 도움이된다면 실제로 비슷한 기사를 찾았습니다. http://stackoverflow.com/questions/340356/making-createprocess-inherit-the-console-of-the-calling-process – Phil

관련 문제