如何获得与文件扩展名的活动文件/应用程序的完整路径

问题描述 投票:0回答:1

我试图跟踪使用Windows应用程序(C#)我的系统上启动的应用程序/文件。

        [DllImport("user32.dll")]
        static extern IntPtr GetForegroundWindow();

        [DllImport("user32.dll")]
        static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);

        private string GetActiveWindowTitle()
        {
            const int nChars = 256;
            StringBuilder Buff = new StringBuilder(nChars);
            IntPtr handle = GetForegroundWindow();

            if (GetWindowText(handle, Buff, nChars) > 0)
            {
                return Buff.ToString() + " " + handle;
            }
            return null;
        }


        private string GetActiveWindowPath()
        {
            const int nChars = 256;
            StringBuilder Buff = new StringBuilder(nChars);
            IntPtr handle = GetForegroundWindow();
            int handleint = int.Parse(handle + "");
            SHDocVw.ShellWindows explorer = new SHDocVw.ShellWindows();

            //var xy = new SHDocVw.InternetExplorerMedium();

            var xpl = explorer.Cast<SHDocVw.InternetExplorerMedium>().Where(hwnd => hwnd.HWND == handleint).FirstOrDefault();
            if (xpl != null)
            {
                string path = new Uri(xpl.LocationURL).LocalPath;
                return ("location:" + xpl.LocationName + " path:" + path);
            }
            return "HWND" + handleint;
        }

但是,通过使用上面的代码,我只获得了与扩展文件标题不完整的文件名,并通过使用其他方法,我刚开文件夹信息。

但我想获得与路径EG文件扩展名:d:\新建文件夹\ sampleFile.txt

c# directory winapp
1个回答
1
投票
 public static string GetMainModuleFilepath(int processId)
    {
        string wmiQueryString = "SELECT * FROM Win32_Process WHERE ProcessId = " + processId;
        using (var searcher = new ManagementObjectSearcher(wmiQueryString))
        {
            using (var results = searcher.Get())
            {
                ManagementObject mo = results.Cast<ManagementObject>().FirstOrDefault();
                if (mo != null)
                {
                    return (string)mo["CommandLine"];
                }
            }
        }
        Process testProcess = Process.GetProcessById(processId);
        return null;
    }

使用此功能,你会得到像绳子

“C:.. \ notepade.exe” d:\新建文件夹\ sampleFile.txt”

即拆分后,你希望得到的路径。我写了这个代码的Office 2007你们可以调试并找到正确的路径为更高版本。

© www.soinside.com 2019 - 2024. All rights reserved.