如何在使用C#创建新网页时关闭打开的OneNote窗口?
我下载了马蒂亚斯' GetOCR C#项目(来自:Process f:viewParam only on page load)。但是,在执行GetOCR代码时,即使方法完成执行,OneNote窗口也会打开并保持打开状态。
我知道关闭此窗口的一种方法是使用下面的WindowHandle发送WM_CLOSE:
app.Windows.CurrentWindow
但是,我想知道是否有更好的"关闭OneNote窗口的方式(由OneNote API本机支持)。我似乎无法在OneNote API页面上找到任何指导(link)。
答案 0 :(得分:0)
除非您不尝试终止该过程,否则这应该有效。
Process[] p = Process.GetProcessesByName("onenote");
p[0].Kill();
我不确定进程名称。
答案 1 :(得分:0)
我知道这是一个老问题,但是最近我需要能够将OneNote Win32应用程序关闭,作为办公自动化的一部分。
使用OneNote互操作显然可以打开OneNote的单个部分(一个选项卡=扩展名为.one
的文件):
string sectionID = String.Empty;
var oneNoteApp = new Microsoft.Office.Interop.OneNote.Application();
oneNoteApp.OpenHierarchy(inputFile, null, out sectionID, CreateFileType.cftNone);
oneNoteApp.SyncHierarcy(sectionID);
oneNoteApp.NavigateTo(sectionID);
oneNoteApp.Publish(sectionID, outputFile, PublishFormat.pfPDF);
但是,即使获得笔记本的ID,也无法关闭该部分。
将WM_CLOSE
发送到oneNoteApp
的Windows句柄(如@pushpraj建议)将在头几次运行,但是在第二次或第三次关闭后,OneNote会抱怨该应用程序未关闭正确地。 “杀死”方法(如@DarkDragon所建议)也将导致相同的问题。
以下close
方法是我能够找到的唯一解决方法。它解决了我的问题。
var hWnd = oneNoteApp.Windows.CurrentWindows.WindowsHandle;
var phWnd = GetParent((IntPtr) hWnd);
var gphWnd = GetParent((IntPtr) phWnd);
PostMessage((IntPtr) gphWnd, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);
(GetParent
中PostMessage
和user32.dll
都可用。)