焦点的当前程序/文件名(Windows)

时间:2010-03-11 00:40:33

标签: c# windows sysinternals

我正在用C#编写一个应用程序,需要知道用户关注的当前程序和文件。

即。我想编写如下函数:

string GetProgramNameCurrentlyInFocus() { ... }
string GetFilenameCurrentlyInFocus() { ... }

返回当前程序可执行文件名(例如“word.exe”)或实际正式程序名称(例如“Microsoft Word 2007”),以及用户使用当前程序查看的当前文件(例如“C:\ Users \ Mat \ Documents \ essay.doc”),分别为。

像RescueTime和SysInternals这样的产品可以做这些事情,所以它是可能的。我可以获得当前程序的标题,但这还不够好,因为有些程序没有在标题中说出程序名称。

那么,有没有人知道如何编写这样的函数?我应该看看的任何提示或地点?

注意:我已经检查了SysInternal,尽管仍然是免费的,但自从微软收购它们以来,源代码已不再可用。

〜垫

4 个答案:

答案 0 :(得分:1)

您可以使用GetForgoundWindow使当前窗口成为焦点。我不知道如何获取打开的文件。

答案 1 :(得分:1)

可以枚举所有open handles。这将给出文件的名称(或者更确切地说是所有打开的文件,因为进程可能有多个)。

答案 2 :(得分:1)

    [DllImport("user32.dll")]
    private static extern IntPtr GetForegroundWindow();/
    public static string GetForegroundWindowsName()
    {
        Process[] allproc = Process.GetProcesses();
        IntPtr ii = GetForegroundWindow();
        foreach (Process proc in allproc)
        {
            if (ii == proc.MainWindowHandle)
            {
                return proc.ProcessName;
            }
        }
        return "";
    }

答案 3 :(得分:0)

您想要GetForegroundWindow然后从那里获得应用程序的主要模块(通常是启动它的应用程序)。

您可能能够确定用于查找打开文档的资源,但这将是一个高度手动的过程。