在C#应用程序中嵌入MS Word
问题描述:
我在程序中打开MS Word文档。对于面板的MS字一个在C#应用程序中嵌入MS Word
System.Diagnostics.Process pr = System.Diagnostics.Process.GetProcessById(pid);
MainWindowHandleS = pr.MainWindowHandle;
SetParent(MainWindowHandleS, panel.Handle);
MoveWindow(MainWindowHandleS, 0, 0, panel.Width, panel.Height, false);
问题:点击“文件”菜单栏上的设置父 - MS Word中打开了我的应用,不仅面板的整个区域。 任何人都可以提供一些建议吗?
答
我解决了问题(意思是破解)。 通过Spy++ 在文件菜单中创建的搜索表单MS Office应用程序 - 具有空名称的“FullPageUiHost”类。并与winapi重新在新的领域。
IntPtr FileMenuHandle = (IntPtr)0;
private void Timer_Tick(object sender, EventArgs e)
{
IntPtr tmpHndl = FindWindowEx(MainForm.Handle, IntPtr.Zero, "FullPageUIHost", null);
if (tmpHndl != IntPtr.Zero && FileMenuHandle == IntPtr.Zero)
{
FileMenuHandle = tmpHndl;
SetParent(FileMenuHandle, Panel.Handle);
MoveWindow(FileMenuHandle, 0, 0, Panel.Width, panel.Height, false);
}
else if (tmpHndl == IntPtr.Zero && FileMenuHandle != IntPtr.Zero)
FileMenuHandle = IntPtr.Zero;
}
你会放弃这个想法。使用'SetParent'使一个进程的窗口成为另一个进程的子窗口是在16位Windows中完成的。今天仍然可以完成的纯粹是那些日子的宿醉。你没有希望将这项工作做好。找到不同的解决方案。 – 2014-10-09 08:21:15
作为寻找不同解决方案的一种潜在方法,Word是否导出任何OLE对象? – andlabs 2014-10-09 15:18:37
你是对的,但它必须解决 这么多遗留代码 – ars 2014-10-10 12:41:16