1

開いているすべてのアプリケーションのリストと開いているすべてのファイルのリストを取得する方法はありますか?ファイルについては、OSの開いているシステムファイルではなく、開いたファイル(ドキュメントなど)のみが必要です。アプリケーション(ブラウザ、ドキュメントプロセッサなどのみ)についても同じです。

EnumWindowsのようなWindowsAPIのさまざまな関数をすでに試しましたが、必要なものを取得できませんでした。

私の最終的な目標の例は、次のようなリストを作成することです。

アプリケーション

Microsoft Word、メモ帳、Mozilla Firefox

ファイル

foo.txt、foo.mp3、foo.doc

必要なのは名前だけで、ハンドルなどは必要ありません(必要なものを取得するには、ハンドルを使用する必要があると確信していますが)

4

2 に答える 2

2

実行中のプロセスのリストとその情報を取得できます

public static string ListAllProcesses()
{
    StringBuilder sb = new StringBuilder();

    // list out all processes and write them into a stringbuilder
    ManagementClass MgmtClass = new ManagementClass("Win32_Process");

    foreach (ManagementObject mo in MgmtClass.GetInstances())
    {
        sb.Append("Name:\t" + mo["Name"] + Environment.NewLine);
        sb.Append("ID:\t" + mo["ProcessId"] + Environment.NewLine);
        sb.Append(Environment.NewLine);
    }
    return sb.ToString();
}

プロセスがユーザーまたはシステムによって開かれているかどうかを確認する唯一の方法(私が知っていること)は、その所有者を確認することです。システムの場合、ユーザーは実行しません。

//You will need to reference System.Management.Dll and use System.Management namespace
public string GetProcessOwner(string processName)
        {
            string query = "Select * from Win32_Process Where Name = \"" + processName + "\"";

            ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
            ManagementObjectCollection processList = searcher.Get();

            foreach (ManagementObject obj in processList)
            {
                string[] argList = new string[] { string.Empty, string.Empty };
                int returnVal = Convert.ToInt32(obj.InvokeMethod("GetOwner", argList));
                if (returnVal == 0)
                {
                    // return DOMAIN\user
                    string owner = argList[1] + "\\" + argList[0];
                    return owner;
                }
            }

            return "NO OWNER";
        }

開いているファイルの一覧は、なんとなく難しいマネージコードを使って行うことができます。これは同じ問題を示すcodeprojectの例です

于 2011-01-21T10:23:25.140 に答える
1

Process.GetProcesses()を使用して、実行中のプロセスのリストを作成できます。http://msdn.microsoft.com/en-us/library/1f3ys1f9.aspxただし 、自動化インターフェイスが公開されている場合は、開いているファイルを作成できます。知る。

于 2011-01-21T10:26:18.377 に答える