我正在用C#编写一个应用程序,需要知道用户关注的当前程序和文件。
即。我想编写如下函数:
string GetProgramNameCurrentlyInFocus() { ... }
string GetFilenameCurrentlyInFocus() { ... }
返回当前程序可执行文件名(例如“word.exe”)或实际正式程序名称(例如“Microsoft Word 2007”),以及用户使用当前程序查看的当前文件(例如“C:\ Users \ Mat \ Documents \ essay.doc”),分别为。
像RescueTime和SysInternals这样的产品可以做这些事情,所以它是可能的。我可以获得当前程序的标题,但这还不够好,因为有些程序没有在标题中说出程序名称。
那么,有没有人知道如何编写这样的函数?我应该看看的任何提示或地点?
注意:我已经检查了SysInternal,尽管仍然是免费的,但自从微软收购它们以来,源代码已不再可用。
〜垫
答案 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然后从那里获得应用程序的主要模块(通常是启动它的应用程序)。
您可能能够确定用于查找打开文档的资源,但这将是一个高度手动的过程。