2014-10-09 4 views
0

Я открываю документ MS Word в своей программе. Установить родительский для MS Word одной панелиВложено MS Word в приложении C#

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 открыть на всей площади моего приложения, а не только панель. Может ли кто-нибудь помочь с некоторыми предложениями?

+0

Вы хотите отказаться от этой идеи. Использование 'SetParent' для создания окна из одного процесса будет дочерним окном в другом процессе, это было сделано в 16-битной Windows. То, что это все еще можно сделать сегодня, - это просто похмелье с тех пор. У вас нет надежды сделать эту работу хорошо. Найдите другое решение. –

+0

Как один из возможных подходов к поиску другого решения, экспортирует ли Word какие-либо OLE-объекты? – andlabs

+0

Вы правы, но он должен решить Так много устаревшего кода – ars

ответ

0

I проблема решен (взломать в среднем). К Spy++ Форма поиска, созданная в меню «Файл» MS office app - с пустым именем, «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; 
} 
Смежные вопросы