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

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

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

Re[4]: 起動しているアプリ名(ファイル名も)の取得のや


(過去ログ 42 を表示中)

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

■21829 / inTopicNo.1)  起動しているアプリ名(ファイル名も)の取得のやりかた
  
□投稿者/ えるも (1回)-(2008/07/10(Thu) 13:43:30)

分類:[C#] 

言語はC#です。

起動しているすべてのアプリ名とウィンドウのファイル名の取得の
やり方をご存知の方がいればよろしくお願いします。

http://dobon.net/vb/bbs/log3-16/9325.htmlを見ていたのですが
中さんがリンクを張られていた先が削除されていたみたいで
よくわかりませんでした…。

素人なのでサンプルコードなどをお教えいただけるとありがたいです。
引用返信 編集キー/
■21831 / inTopicNo.2)  Re[1]: 起動しているアプリ名(ファイル名も)の取得のやりかた
□投稿者/ シャノン (530回)-(2008/07/10(Thu) 14:06:10)
No21829 (えるも さん) に返信
> 言語はC#です。
>
> 起動しているすべてのアプリ名とウィンドウのファイル名の取得の
> やり方をご存知の方がいればよろしくお願いします。
>
> http://dobon.net/vb/bbs/log3-16/9325.htmlを見ていたのですが
> 中さんがリンクを張られていた先が削除されていたみたいで
> よくわかりませんでした…。
>
> 素人なのでサンプルコードなどをお教えいただけるとありがたいです。

この場合のファイル名とは何ですか?
例えば、メモ帳で Hoge.txt を開いているとき、ファイル名とは Hoge.txt ですか? それとも Notepad.exe ですか?
引用返信 編集キー/
■21836 / inTopicNo.3)  Re[2]: 起動しているアプリ名(ファイル名も)の取得のやりかた
□投稿者/ えるも (3回)-(2008/07/10(Thu) 14:32:09)
お早いお返事ありがとうございます。

> この場合のファイル名とは何ですか?
> 例えば、メモ帳で Hoge.txt を開いているとき、ファイル名とは Hoge.txt ですか? それとも Notepad.exe ですか?

シャノンさんに言っていただいた例えだと、アプリケーション名をNotepad.exe、ファイル名はHoge.txtと取得したいです。
説明がいまいちでした。よろしくお願いします。
引用返信 編集キー/
■21838 / inTopicNo.4)  Re[3]: 起動しているアプリ名(ファイル名も)の取得のやりかた
□投稿者/ 小春 (64回)-(2008/07/10(Thu) 15:25:53)
No21836 (えるも さん) に返信
> お早いお返事ありがとうございます。
>
>>この場合のファイル名とは何ですか?
>>例えば、メモ帳で Hoge.txt を開いているとき、ファイル名とは Hoge.txt ですか? それとも Notepad.exe ですか?
>
> シャノンさんに言っていただいた例えだと、アプリケーション名をNotepad.exe、ファイル名はHoge.txtと取得したいです。
> 説明がいまいちでした。よろしくお願いします。

参考になりますか?
http://dobon.net/vb/dotnet/process/getprocesses.html
引用返信 編集キー/
■21839 / inTopicNo.5)  Re[3]: 起動しているアプリ名(ファイル名も)の取得のやりかた
□投稿者/ シャノン (532回)-(2008/07/10(Thu) 15:30:48)
No21836 (えるも さん) に返信
> お早いお返事ありがとうございます。
>
>>この場合のファイル名とは何ですか?
>>例えば、メモ帳で Hoge.txt を開いているとき、ファイル名とは Hoge.txt ですか? それとも Notepad.exe ですか?
>
> シャノンさんに言っていただいた例えだと、アプリケーション名をNotepad.exe、ファイル名はHoge.txtと取得したいです。
> 説明がいまいちでした。よろしくお願いします。

アプリケーション名(プロセス名)の取得は、(特殊な権限で動いている一部のプロセスを除いては)可能ですが、ファイル名は可能とは限りません。
電卓のように、ファイルを開かないアプリもありますし、プロセスから開いているファイルを取得するための統一的な方法はありません。
例えば、メインウィンドウのタイトルが <ファイル名> - <アプリ名> のようになっているとわかっていれば(メモ帳はこうなります)可能かもしれませんが、そうなると決まっているわけでもありません。
引用返信 編集キー/
■21841 / inTopicNo.6)  Re[1]: 起動しているアプリ名(ファイル名も)の取得のやりかた
□投稿者/ 魔界の仮面弁士 (782回)-(2008/07/10(Thu) 15:39:31)
No21829 (えるも さん) に返信
> 起動しているすべてのアプリ名とウィンドウのファイル名の取得の
> やり方をご存知の方がいればよろしくお願いします。

アプリによってファイルの扱いは異なるので、完全な方法は無いと思います。

たとえば Excel で xls ファイルを開くと、閉じるまでファイルはロックされていますが、
メモ帳の場合、txt ファイルを開いてもロックされませんよね。(開いたらすぐに閉じられている)



起動時のコマンドライン パラメータ程度で良ければ、下記のようにして得られますけれども。


// using System.Management
private void Form1_Load(object sender, EventArgs e)
{
    listView1.View = View.Details;
    listView1.Columns.Clear();
    listView1.Columns.Add("Caption", 100);
    listView1.Columns.Add("Application", 100);
    listView1.Columns.Add("Command", 300);
    listView1.FullRowSelect = true;

    string query = @"SELECT * FROM Win32_Process";
    using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
    using (ManagementObjectCollection list = searcher.Get())
    {
        foreach (ManagementObject o in list)
        {
            string cap = (string)o.GetPropertyValue("Caption");
            string app = (string)o.GetPropertyValue("ExecutablePath");
            string cmd = (string)o.GetPropertyValue("CommandLine");

            listView1.Items.Add(cap).SubItems.AddRange(new string[] { app, cmd });
        }
    }
}

引用返信 編集キー/
■21878 / inTopicNo.7)  Re[2]: 起動しているアプリ名(ファイル名も)の取得のや
□投稿者/ えるも (4回)-(2008/07/11(Fri) 12:05:30)
2008/07/11(Fri) 12:28:13 編集(投稿者)
2008/07/11(Fri) 12:28:06 編集(投稿者)

No21838 (小春 さん) に返信
> ■No21836 (えるも さん) に返信
>>お早いお返事ありがとうございます。
>>
> >>この場合のファイル名とは何ですか?
> >>例えば、メモ帳で Hoge.txt を開いているとき、ファイル名とは Hoge.txt ですか? それとも Notepad.exe ですか?
>>
>>シャノンさんに言っていただいた例えだと、アプリケーション名をNotepad.exe、ファイル名はHoge.txtと取得したいです。
>>説明がいまいちでした。よろしくお願いします。
>
> 参考になりますか?
> http://dobon.net/vb/dotnet/process/getprocesses.html

ありがとうございます。
起動しているプロセス名をとることができました。


No21839 (シャノン さん) に返信
> ■No21836 (えるも さん) に返信
>>お早いお返事ありがとうございます。
>>
> >>この場合のファイル名とは何ですか?
> >>例えば、メモ帳で Hoge.txt を開いているとき、ファイル名とは Hoge.txt ですか? それとも Notepad.exe ですか?
>>
>>シャノンさんに言っていただいた例えだと、アプリケーション名をNotepad.exe、ファイル名はHoge.txtと取得したいです。
>>説明がいまいちでした。よろしくお願いします。
>
> アプリケーション名(プロセス名)の取得は、(特殊な権限で動いている一部のプロセスを除いては)可能ですが、ファイル名は可能とは限りません。
> 電卓のように、ファイルを開かないアプリもありますし、プロセスから開いているファイルを取得するための統一的な方法はありません。
> 例えば、メインウィンドウのタイトルが <ファイル名> - <アプリ名> のようになっているとわかっていれば(メモ帳はこうなります)可能かもしれませんが、そうなると決まっているわけでもありません。

そうなんですか…知りませんでした。ありがとうございます。

No21841 (魔界の仮面弁士 さん) に返信
> ■No21829 (えるも さん) に返信
>>起動しているすべてのアプリ名とウィンドウのファイル名の取得の
>>やり方をご存知の方がいればよろしくお願いします。
>
> アプリによってファイルの扱いは異なるので、完全な方法は無いと思います。
>
> たとえば Excel で xls ファイルを開くと、閉じるまでファイルはロックされていますが、
> メモ帳の場合、txt ファイルを開いてもロックされませんよね。(開いたらすぐに閉じられている)
>
>
>
> 起動時のコマンドライン パラメータ程度で良ければ、下記のようにして得られますけれども。
>
>
> // using System.Management
> private void Form1_Load(object sender, EventArgs e)
> {
> listView1.View = View.Details;
> listView1.Columns.Clear();
> listView1.Columns.Add("Caption", 100);
> listView1.Columns.Add("Application", 100);
> listView1.Columns.Add("Command", 300);
> listView1.FullRowSelect = true;
>
> string query = @"SELECT * FROM Win32_Process";
> using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
> using (ManagementObjectCollection list = searcher.Get())
> {
> foreach (ManagementObject o in list)
> {
> string cap = (string)o.GetPropertyValue("Caption");
> string app = (string)o.GetPropertyValue("ExecutablePath");
> string cmd = (string)o.GetPropertyValue("CommandLine");
>
> listView1.Items.Add(cap).SubItems.AddRange(new string[] { app, cmd });
> }
> }
> }

ありがとうございます。ちゃんとパラメータが取得できました。


みなさんありがとうございます。
プロセス名を所得はできたのですが、私がやりたかったのは
タスクマネージャを開いたときにアプリケーションを表示しているように
すべてのアプリケーションではなく、ウィンドウ上で開いているものだけの
取得をしたいです。(タスクバーに表示されているアプリケーション名です)
できれば、タスクバー上に追加されるたびに表示も増えれれば最高です。(タスクマネージャみたいに)
私の説明のしかたがあいまいでした。
本当にすみません。
何度も申し訳ないのですが、ご存知の方がいればよろしくお願いします。
引用返信 編集キー/
■21882 / inTopicNo.8)  Re[3]: 起動しているアプリ名(ファイル名も)の取得のや
□投稿者/ 小春 (67回)-(2008/07/11(Fri) 13:32:18)
それっぽいのが、過去ログで見つかりました。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=243&KLOG=1
(WinAPIを使ってますね。)

-----------------------------------------------------------
ここからは、私のお遊びと思ってください。

タスクマネージャのアプリケーションタブに表示されている"タスク"とは、
ウィンドウタイトルなので、ウィンドウタイトルを保持しているプロセスを表示すれば
いいんじゃないのぉ?って思って、面白そうだったので、カリカリしてみました。


//ローカルコンピュータ上で実行されているすべてのプロセスを列挙
System.Diagnostics.Process[] proc = System.Diagnostics.Process.GetProcesses();
                            
foreach (System.Diagnostics.Process p in proc)
{
    //ウィンドウタイトルを保持しているもののみ表示
    if (p.MainWindowTitle != string.Empty)
    {
        Console.WriteLine("ウィンドウタイトル: " + p.MainWindowTitle);
        Console.WriteLine("パス: " + p.MainModule.FileName);
    }
}

これがうまいこと実現しちゃったので、参考程度に…。
(なにかしら弊害あるかもしれません。)

引用返信 編集キー/
■21887 / inTopicNo.9)  Re[4]: 起動しているアプリ名(ファイル名も)の取得のや
□投稿者/ えるも (5回)-(2008/07/11(Fri) 14:44:15)
No21882 (小春 さん) に返信
> それっぽいのが、過去ログで見つかりました。
> http://bbs.wankuma.com/index.cgi?mode=al2&namber=243&KLOG=1
> (WinAPIを使ってますね。)
>
> -----------------------------------------------------------
> ここからは、私のお遊びと思ってください。
>
> タスクマネージャのアプリケーションタブに表示されている"タスク"とは、
> ウィンドウタイトルなので、ウィンドウタイトルを保持しているプロセスを表示すれば
> いいんじゃないのぉ?って思って、面白そうだったので、カリカリしてみました。
>
>
> //ローカルコンピュータ上で実行されているすべてのプロセスを列挙
> System.Diagnostics.Process[] proc = System.Diagnostics.Process.GetProcesses();
>
> foreach (System.Diagnostics.Process p in proc)
> {
> //ウィンドウタイトルを保持しているもののみ表示
> if (p.MainWindowTitle != string.Empty)
> {
> Console.WriteLine("ウィンドウタイトル: " + p.MainWindowTitle);
> Console.WriteLine("パス: " + p.MainModule.FileName);
> }
> }
>
> これがうまいこと実現しちゃったので、参考程度に…。
> (なにかしら弊害あるかもしれません。)

小春さんありがとうございます!
私が思っていたとおりにアプリケーション名を取得することができました。
今までご協力していただいたみなさんありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -