Visual C#表单包含一个在按下特定按钮时创建空白的新Microsoft Document的功能。一旦用户单击此按钮,我需要检查是否已创建新的Microsoft Document并在创建之前仍然激活一个新的word文档,因此一次打开一个文档。
我正在尝试使用以下代码完成此操作: -
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool IsWindow(IntPtr hWnd);
这将返回一个bool。我不知道如何检查输出?我将检查哪个参数以及相应的语法是什么?可能出现的问题是用户可以打开记事本,这将是激活窗口,因此我需要具体,因为它只适用于word文档。通常,创建新文档时,默认名称是Document1,但用户可以选择保存和更改名称。
答案 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)正在运行。