私はいくつかの名前(任意のアプリケーション、例えば電卓など)でウィンドウを閉じたいです。どのようにC#でそれを行うには? WinAPI関数をインポートしますか?ウィンドウを名前で閉じるにはどうすればいいですか?
答えて
はい、Windows API関数をインポートする必要があります。FindWindow()
、SendMessage()
;定数はWM_CLOSE
です。 Windows API関数の
ネイティブの定義:
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
/// <summary>
/// Find window by Caption only. Note you must pass IntPtr.Zero as the first parameter.
/// </summary>
[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
const UInt32 WM_CLOSE = 0x0010;
クライアントコード:
IntPtr windowPtr = FindWindowByCaption(IntPtr.Zero, "Untitled - Notepad");
if (windowPtr == IntPtr.Zero)
{
Console.WriteLine("Window not found");
return;
}
SendMessage(windowPtr, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);
はい、これはメモ帳でうまくいきます(もちろん、ウィンドウのタイトルはあなたがここで与えたものと完全に同じですが、おそらくこれは大部分ではありません)。しかし、単一のトップレベルウィンドウを閉じた後にアプリケーション全体を閉じるように特別に設計されていない限り、複数のトップレベルウィンドウを持つアプリケーションでは機能しません。それ以外の場合は、アプリが閉じられるように、最上位のウィンドウのそれぞれに 'WM_CLOSE'を送る必要があります。 –
さらに、アプリはWM_CLOSEに応答することもできますが、好きです。たとえば、一部のプログラムでは、実際に閉じるのではなく、このメッセージの受信時にタスクバーの通知領域に最小限に抑えることを選択します。アプリケーションがメッセージにどのように応答するかを制御することはできないので、このメソッドを広範囲にテストし、未知のアプリケーションや未テストのアプリケーションを扱う際に、脆弱な可能性を認識する必要があります。 –
この 'CloseWindow(windowPtr)'のように正しいですか? –
あなたが他のプロセスに属するウィンドウを閉じますしようとしています。それはあなたが信頼できると思うものではありません。まず、あなたはこれらのウィンドウを所有していないので、他のプロセスのウィンドウに移動して混乱させる自動資格はありません。
もう1つの答えが示すように、ウィンドウにWM_CLOSEを送信してみることはできますが、他のプロセスが実際にそれを尊重する権利がないという警告が付属しています。 WM_CLOSEへの応答は、受け入れられるものであれば何でもかまいません。後者の場合は、本当に選択肢がありません。それはあなたのプロセスではありません。間には、あなたが見たように、どんな種類の中間ウィンドウやダイアログボックスなどもあります。
ここで何を達成しようとしていますか?なぜ他のプロセスに属するウィンドウを閉じようとしていますか?目的が何であるかを明確にするのに役立つかもしれません。
- 1. PeopleCodeからウィンドウを閉じるにはどうすればいいですか?
- 2. vbaですでに開いているcmdウィンドウを閉じるにはどうすればよいですか?
- 3. 子ウィンドウから親ウィンドウを閉じるにはどうすればいいですか?
- 4. プログラムで開いていないタブ/ウィンドウを閉じるにはどうすればいいですか?
- 5. SaveFileDialogを閉じる前にファイル名を検証するにはどうすればよいですか?
- 6. 閉じる().executeUpdateはどうすればいいですか?
- 7. AIR:特定のウィンドウをプログラムで閉じるにはどうすればいいですか?
- 8. React Componentでウィンドウを閉じるにはどうしたらいいですか?
- 9. GTKでは、ウィンドウを閉じられないようにするにはどうしたらいいですか?
- 10. Word interop - すべてのウィンドウを閉じずに1つのWordウィンドウを閉じるにはどうすればいいですか?
- 11. iOSボタンでポップオーバーを閉じるにはどうすればいいですか?
- 12. RCPアプリケーションでビューを閉じるにはどうすればいいですか?
- 13. メッセージダイアログをプログラムで閉じるにはどうすればいいですか?
- 14. Jiraでプロジェクトを閉じるにはどうすればいいですか?
- 15. Androidでダイアログを閉じるにはどうすればいいですか?
- 16. モーダルでポップオーバーを閉じるにはどうすればいいですか
- 17. C#でXMLDocumentを閉じるにはどうすればいいですか
- 18. キャンバス内のウィンドウをクリックしてオフキャンバスメニューを閉じるにはどうすればいいですか?
- 19. アンカーポイントにスクロールする前にナビゲーションを閉じるにはどうすればいいですか?
- 20. WPFウィンドウのロードを防ぐ/閉じるにはどうすればいいですか?
- 21. cv2ウィンドウを閉じるにはどうしたらいいですか?
- 22. クライアントがログインする前にTcpListenerを閉じるにはどうすればいいですか? c#
- 23. InfoBubbleを閉じるにはどうすればいいですか? (Googleマップユーティリティライブラリv3)
- 24. Ciderスタックトレースバッファを閉じるにはどうすればいいですか
- 25. ClassLoaderを "閉じる"にはどうすればいいですか?
- 26. ウェブブラウザの配列を閉じるにはどうすればいいですか?
- 27. Objectboxを閉じるにはどうすればいいですか?
- 28. vscodeのミニチュアビューを閉じるにはどうすればいいですか?
- 29. HTTP接続を閉じるにはどうすればいいですか?
- 30. ログインリクエストウィンドウを閉じるにはどうすればいいですか?
http://www.codeproject.com/Articles/22257/Find-and-Close-the-Window-using-Win-API ... google roxあなたが知っている – m0s
重複している可能性があります。 http://stackoverflow.com/questions/116090/how-do-i-kill-a-process-using-vb-net-or-c – Lloyd
@Lloyd:重複ではなく、プロセスを強制終了することはウィンドウを閉じる。 –