2

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

即我想编写如下函数:

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

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

像 RescueTime 和 SysInternals 这样的产品可以做这些事情,所以这是可能的。我可以重点关注当前节目的标题,但这还不够好,因为有些节目没有在标题中说出节目名称。

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

注意:我已经查看了 SysInternal,尽管仍然是免费的,但源代码已不再可用,因为 Microsoft 将它们买断了。

〜垫

4

4 回答 4

1

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

于 2010-03-11T00:50:37.883 回答
1

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

于 2010-03-11T00:51:18.790 回答
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 "";
    }
于 2016-07-12T06:57:44.277 回答
0

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

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

于 2010-03-11T00:51:56.963 回答