C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: 他のプログラムのウィンドウを閉じる


(過去ログ 23 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■9983 / inTopicNo.1)  他のプログラムのウィンドウを閉じる
  
□投稿者/ れれれ (41回)-(2007/11/08(Thu) 15:29:11)

分類:[.NET 全般] 

お世話になっていますれれれです。

早速質問なのですが題名の通り他のプログラムのウィンドウを閉じるプログラムを考えています。
どうすればいいか皆目見当つかず質問させていただきました。

タスクマネージャに表示されているタスクを取得して実行中のタスクから閉じたいウィンドウのタスクを選ぶとそのウィンドウが閉じるという考えでいいのでしょうか

参考になるキーワードやサイトがあったら教えてください。
お願いします
引用返信 編集キー/
■9984 / inTopicNo.2)  Re[1]: 他のプログラムのウィンドウを閉じる
□投稿者/ れれれ (42回)-(2007/11/08(Thu) 15:30:31)
No9983 (れれれ さん) に返信
> お世話になっていますれれれです。
>
> 早速質問なのですが題名の通り他のプログラムのウィンドウを閉じるプログラムを考えています。
> どうすればいいか皆目見当つかず質問させていただきました。
>
> タスクマネージャに表示されているタスクを取得して実行中のタスクから閉じたいウィンドウのタスクを選ぶとそのウィンドウが閉じるという考えでいいのでしょうか
>
> 参考になるキーワードやサイトがあったら教えてください。
> お願いします
追記ですが、
C#でお願いします
引用返信 編集キー/
■9987 / inTopicNo.3)  Re[2]: 他のプログラムのウィンドウを閉じる
□投稿者/ カンタービレ (25回)-(2007/11/08(Thu) 16:31:51)
No9984 (れれれ さん) に返信
> ■No9983 (れれれ さん) に返信
>>参考になるキーワードやサイトがあったら教えてください。
>>お願いします
> 追記ですが、
> C#でお願いします

System.Diagnostics.Process.GetProcesses()
で起動中の全プロセス取れます。(Window持たないものも含まれますが)
MainWindowHandleがあればWindowがありマス。
取れたプロセスのCloseMainWindowメソッドを使えばウィンドウは閉じマス。

引用返信 編集キー/
■9988 / inTopicNo.4)  Re[3]: 他のプログラムのウィンドウを閉じる
□投稿者/ れれれ (43回)-(2007/11/08(Thu) 17:15:52)
No9987 (カンタービレ さん) に返信
> ■No9984 (れれれ さん) に返信
>>■No9983 (れれれ さん) に返信
> >>参考になるキーワードやサイトがあったら教えてください。
> >>お願いします
>>追記ですが、
>>C#でお願いします
>
> System.Diagnostics.Process.GetProcesses()
> で起動中の全プロセス取れます。(Window持たないものも含まれますが)
> MainWindowHandleがあればWindowがありマス。
> 取れたプロセスのCloseMainWindowメソッドを使えばウィンドウは閉じマス。
>

返信ありがとうございます。
これだと実行中の全プロセスなのですが、
私が欲しいのは、タスクマネージャに表示されたアプリケーションタグ内のタスクの一覧が欲しいのです。
引用返信 編集キー/
■9992 / inTopicNo.5)  Re[4]: 他のプログラムのウィンドウを閉じる
□投稿者/ カンタービレ (26回)-(2007/11/08(Thu) 17:49:48)
No9988 (れれれ さん) に返信

> 返信ありがとうございます。
> これだと実行中の全プロセスなのですが、
> 私が欲しいのは、タスクマネージャに表示されたアプリケーションタグ内のタスクの一覧が欲しいのです。

なので、MainWindowHandleを確認すればいいと書いたつもりでした。

http://www.atmarkit.co.jp/fdotnet/dotnettips/233enumwin/enumwin.html
にサンプルも列挙しているサンプルがありマス。
表示させてみて、タスクマネージャのアプリケーションタグ内のタスク一覧と比較してみてはどうでしょうか?
引用返信 編集キー/
■9993 / inTopicNo.6)  Re[4]: 他のプログラムのウィンドウを閉じる
□投稿者/ まどか (397回)-(2007/11/08(Thu) 17:56:34)
> これだと実行中の全プロセスなのですが、
> 私が欲しいのは、タスクマネージャに表示されたアプリケーションタグ内のタスクの一覧が欲しいのです。

たとえば、タスクトレイにいるアプリケーションがあります。
通常ウィンドウがありませんが、アイコン操作すると設定画面などが出てアプリケーションタブに追加されます。
それを閉じればタブからも消えます。
通常バックグラウンドプロセスは対話インターフェースを持ちません。
それらを考えるとウィンドウハンドルを得ることが出来たものと等価と考えるしかないのではないでしょうか。

いずれにしろ、ウィンドウを閉じたいのかアプリケーションを終了させたいのかが不明です。
それにより回答も微妙に変わります。>私が答えられるかは別(汗
まずは、それと、あなたが前提条件にしている「アプリケーションタブに表示されているもの」の定義をはっきりさせる必要があるでしょう。
引用返信 編集キー/
■9994 / inTopicNo.7)  Re[5]: 他のプログラムのウィンドウを閉じる
□投稿者/ カンタービレ (27回)-(2007/11/08(Thu) 18:53:37)
No9993 (まどか さん) に返信
> いずれにしろ、ウィンドウを閉じたいのかアプリケーションを終了させたいのかが不明です。
> それにより回答も微妙に変わります。>私が答えられるかは別(汗

ある特定のウィンドウを閉じたいと仮定すると、CloseMainWindowで閉じるは不適切な場合もありマスからね。
後学のために便乗質問させてください。
もしデスクトップ上のすべてのWindowを列挙したい場合、APIのEnumWindows関数を使うしかないでしょうか?
引用返信 編集キー/
■9996 / inTopicNo.8)  Re[6]: 他のプログラムのウィンドウを閉じる
□投稿者/ まどか (398回)-(2007/11/08(Thu) 22:04:48)
> もしデスクトップ上のすべてのWindowを列挙したい場合、APIのEnumWindows関数を使うしかないでしょうか?

いわゆるウィンドウ(フォームではない)はそれが唯一の概念のはずなので、APIとしても概念がひとつでしょう。
ということは複数のAPIを使い分けるといったことにはならないんじゃないかと。
つまりEnumWindowsでいいというか、アプリケーションタブ用のAPIとかは無いんじゃないかな。
#Shell系にあったりして。。。

昔VB6で作ったときもEnumWindowsしながらGetWindowTextがNullじゃないものを列挙対象にしてたりしてましたし。
引用返信 編集キー/
■10004 / inTopicNo.9)  Re[7]: 他のプログラムのウィンドウを閉じる
□投稿者/ カンタービレ (28回)-(2007/11/09(Fri) 01:02:10)
No9996 (まどか さん) に返信
>>もしデスクトップ上のすべてのWindowを列挙したい場合、APIのEnumWindows関数を使うしかないでしょうか?
>
> いわゆるウィンドウ(フォームではない)はそれが唯一の概念のはずなので、APIとしても概念がひとつでしょう。
> ということは複数のAPIを使い分けるといったことにはならないんじゃないかと。
> つまりEnumWindowsでいいというか、アプリケーションタブ用のAPIとかは無いんじゃないかな。
> #Shell系にあったりして。。。
>
> 昔VB6で作ったときもEnumWindowsしながらGetWindowTextがNullじゃないものを列挙対象にしてたりしてましたし。

なるほどデス。対応したクラスがあるか探してみてなさそうだったので同じような手法を取るしかなさそうですね。
#Shell系って・・・Shell32.dllかしらん?ちなみにShell32にはなさそうデス。

スレ主サマの主題に戻ると、プロセスではなくタスクマネージャの云々ということではメインウィンドウを持たないプロセスは
一覧から消えることは確認しました。ダイアログだけ・・というのは未確認ですが出ないっぽいデス。
ちなみにGoogleサイドバーもガジェットも出ませんね。
にしても、れれれサマのしたいウィンドウ一覧の列挙はProcessクラスで満たせると思いマス。
クローズに関しても基本的に同クラスのCloseMainWindowで十分可能だとは思いマスが、特殊なウィンドウでは
クローズを受け付けないこともあるかも知れません。(アプリ側がクローズメッセージを無視する作りの場合とかダイアログで待たされるとか)
http://support.microsoft.com/kb/305603/ja
も参考になると思いマス。

引用返信 編集キー/
■10016 / inTopicNo.10)  Re[8]: 他のプログラムのウィンドウを閉じる
□投稿者/ れれれ (45回)-(2007/11/09(Fri) 12:11:55)
No10004 (カンタービレ さん) に返信
No9996 (まどか さん) に返信
返信ありがとうございます。
タスクマネージャに表示されているアプリケーションのウィンドウを閉じることが出来ました。
ありがとうございます。
listBox1.Items.Add(p.ProcessName + " : " + p.MainWindowTitle);
if (p.MainWindowTitle == "○○")
p.CloseMainWindow();
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -