如何确定用户是否已打开新的Microsoft Word文档?

时间:2013-11-05 18:49:20

标签: c# visual-studio-2010 msdn

Visual C#表单包含一个在按下特定按钮时创建空白的新Microsoft Document的功能。一旦用户单击此按钮,我需要检查是否已创建新的Microsoft Document并在创建之前仍然激活一个新的word文档,因此一次打开一个文档。

我正在尝试使用以下代码完成此操作: -

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool  IsWindow(IntPtr hWnd);

这将返回一个bool。我不知道如何检查输出?我将检查哪个参数以及相应的语法是什么?可能出现的问题是用户可以打开记事本,这将是激活窗口,因此我需要具体,因为它只适用于word文档。通常,创建新文档时,默认名称是Document1,但用户可以选择保存和更改名称。

2 个答案:

答案 0 :(得分:1)

IsWindow对你想要的东西不太有用(你没有hWnd,窗口的句柄)。 FindWindow会更有帮助;但问题是它(和其他等效的WinAPI调用)将给定窗口的名称作为参数,对于MS Word,这是文档的名称(我猜你不知道)。

一种简单可靠的方法是查看正在运行的流程:

System.Diagnostics.Process[] Procs = System.Diagnostics.Process.GetProcessesByName("winword");
if (Procs.Length >= 1)
{
    //There is an opened Word document
} 

答案 1 :(得分:0)

您可以检查流程检查运行流程并获取句柄ID。

System.Diagnostics.Process

Process[] allProcesses = Process.GetProcesses();
processName = <Todo: check process_name in the array for word document>
Regex r = WildcardToRegex(processName);

matching = allProcesses.Where((p) =>
            {
                try
                {
                    return r.IsMatch(p.MainModule.FileName);
                }
                catch
                {
                    return false;
                }
            }).Select((p) => p.Id);

找到process_name和Process ID后,您可以检查是否有新进程(在您的情况下为WordDocument)正在运行。