如何使用C#关闭OneNote窗口?

时间:2015-04-30 09:54:27

标签: c# onenote

如何在使用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)。

2 个答案:

答案 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);

GetParentPostMessageuser32.dll都可用。)