1

C では、system()以前にコンソール アプリケーションで関数を使用したことがあり、それを使用して別のプロセスを開始するsystem()と、それを呼び出したプロセスのコンソール ウィンドウが継承されます。

Delphisystem()には存在しないためShellExecute()、新しいプロセスを作成するために使用していますが、新しいプロセスが新しいコンソール ウィンドウに表示されます。それを呼び出しているウィンドウのハンドルを継承させる方法はありますか?

私は使用しました

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

コンソールウィンドウを取得して のHWND部分で渡しましたShellExecute()が、うまくいきませんでした。

4

1 に答える 1

5

You を使用ShellExecute()すると、生成されたアプリケーションで同じコンソールを使用することはできません。呼び出しのHWND要素は次のShellExecute()ように文書化されています。

親ウィンドウを指定します。このウィンドウは、アプリケーションが生成するすべてのメッセージ ボックスを受け取ります。たとえば、アプリケーションはメッセージ ボックスを生成してエラーを報告する場合があります。

そのため、コンソール アプリケーションには何の影響もありません。

代わりに使用CreateProcess()すると、生成されたプロセスをより細かく制御できます。このdwCreationFlagsパラメーターを使用すると、新しいプロセスに独自のコンソールを強制的に取得させることができますが (CREATE_NEW_CONSOLEフラグを使用)、デフォルトでは、親プロセスのコンソールも継承します。

于 2010-04-07T22:15:53.293 に答える