4

我想知道如何使用 C# 获取当前活动窗口的路径。

我得到了当前活动窗口的句柄

        const int nChars = 256;
        int handle = 0;
        StringBuilder Buff = new StringBuilder(nChars);

        handle = GetForegroundWindow(); 

现在我如何获得这个窗口的路径?

即:“我的文档”窗口的路径是

C:\Users\User\Documents

-=-=-==-=-=edit-=-=-=-=-=-
我想编写程序来监控“windows explorer”并查看用户去哪里?
(即:用户转到 c:\,然后转到程序文件,然后转到 Internet Explorer,我想获取此路径:C:\Program Files\Internet Explorer。 在此处输入图像描述

4

2 回答 2

7

添加对“Microsoft Internet 控件”的引用 (COM)

var explorer = new SHDocVw.ShellWindowsClass().Cast<SHDocVw.InternetExplorer>().Where(hwnd => hwnd.HWND == handle).FirstOrDefault();
if (explorer != null) {
    string path = new Uri(explorer.LocationURL).LocalPath;
    Console.WriteLine("name={0}, path={1}", explorer.LocationName, path);
}

打印explorer.exe实例的标题/路径,主窗口句柄位于handle.

于 2012-07-14T18:04:41.697 回答
-1

使用线程...

                Exception threadEccezione = null;

                System.Threading.Thread staThread = new System.Threading.Thread(
                        delegate()
                        {
                            try
                            {
                                //SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindows();
                                var explorer = new SHDocVw.ShellWindowsClass().Cast<SHDocVw.InternetExplorer>().Where(hwnd => hwnd.HWND == handle).FirstOrDefault();

                                if (explorer != null)
                                {
                                    string path = new Uri(explorer.LocationURL).LocalPath;
                                    MessageBox.Show(path);
                                }
                            }
                            catch (Exception ex)
                            {
                                threadEccezione = ex;
                            }
                        }
                    );
                ;
                staThread.Start();
                staThread.Join();
于 2015-06-30T20:01:24.280 回答