Windows アプリを別のアプリからシャットダウンする方法を探しています。これを行う方法はありますか?
理想的には、基本的にALT-F4を模倣したり、右上隅の「X」を押すなどの何かが欲しい.
あるいは、すでにこれを行うアプリケーションはありますか? tskill は、私が考えているものには少し厳しすぎます。
編集:少し掘り下げて、Microsoftが推奨するアプローチのMSDN記事を見つけました。
これはWindowsアプリであるため、メインウィンドウにWM_CLOSEメッセージを送信できますが、アプリケーションがWM_CLOSEメッセージの処理をオーバーライドすると、予期しない結果が生じる可能性があることに注意してください。また、 TerminateProcessやExitProcessなどのwin32関数を使用すると、dllのグローバルデータが危険にさらされたり、デッドロックが発生したりするなど、不快な副作用(msdnの備考セクションを参照)が発生する可能性があることにも注意してください。
ターゲットアプリケーションをコーディングする責任がある場合は、外部でトリガーできる何らかの形式の組み込みターミネーションメカニズム(ループバックアドレスまたはパイプのマジックパケットなど)を追加することをお勧めします。これにより、アプリケーションが自動的にクリーンアップされたことを確認できます。適切に。
あなたの説明によると、これはウィンドウ化されたアプリのように聞こえます。その場合、WM_CLOSEメッセージを送信して、「X」ボタンを押したときの動作を模倣できます。
もう 1 つの方法はTerminateProcessを使用することですが、これはおそらく tskill も同様です。
アプリを閉じるためのより強力なコマンドは次のとおりです。
PostMessage (myhnd,WM_ENDSESSION,TRUE,ENDSESSION_LOGOFF);
まず、別の質問に対する私の回答を紹介します。それは Delphi とサービスに関するものでしたが、答えは Delphi 固有でもサービス固有でもありません。つまり、プログラムを正常に停止する一般的な方法はありません。その質問に対する受け入れられた回答は、wm_Close
メッセージをプログラムのウィンドウに投稿することを示しています。