0

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

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

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

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

4

2 回答 2

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
} 
于 2013-11-05T19:07:03.930 回答
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)正在运行。

于 2013-11-05T19:03:25.487 回答