繁体   English   中英

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

[英]How to close OneNote window using C#?

如何关闭使用 C# 创建新页面时打开的 OneNote 窗口?

我下载了 Matthias 的 GetOCR C# 项目(来自:链接)。 但是,在执行 GetOCR 代码时,OneNote 窗口会打开,并且即使方法完成执行也保持打开状态。

我知道关闭此窗口的一种方法可能是使用下面的 WindowHandle 发送 WM_CLOSE :

app.Windows.CurrentWindow

但是,我想知道是否有一种“更好”的方式(OneNote API 原生支持)关闭 OneNote 窗口。 我似乎在 OneNote API 页面( 链接)上找不到任何指导。

除非您不尝试终止该过程,否则这应该有效。

Process[] p = Process.GetProcessesByName("onenote");
p[0].Kill();

我不确定进程名称。

我知道这是一个老问题,但我最近需要能够关闭 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 建议)将在前几次工作,但在第 2 次或第 3 次关闭后,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);

(其中GetParentPostMessage都在user32.dll中可用。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM