Я работаю с Office с 1995 года, и каждый раз, когда появляется новая версия, возникает проблема с активацией документа из другого приложения.Теперь я снова здесь.
Я работаю с VS 2017 C # Office 2016, 64-битная
Это приложение C # Windows Form для templatemanager вместе с SharePoint.Я запускаю шаблон с ex.
bool YesNo = IsExcelFileOpened();
Microsoft.Office.Interop.Excel.Application ExcelObj;
Microsoft.Office.Interop.Excel.Workbook ExcelVbookObj;
if (YesNo==false)
{
ExcelObj = new App();
}
else
{
ExcelObj = (Microsoft.Office.Interop.Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
}
ExcelObj.Visible = true;
public bool IsExcelFileOpened()
{
bool isExist = false;
System.Diagnostics.Process[] prs = System.Diagnostics.Process.GetProcesses();
foreach (Process pr in prs)
{
if (pr.ProcessName == "EXCEL")
{
isExist = true;
break;
}
}
return isExist;
}
, который я пробовал;
1 обычная офисная команда, такая как Visisble Activate
2использование [DllImport ("user32.dll")]
public static void FocusWindow(IntPtr focusOnWindowHandle)
{
int style = GetWindowLong(focusOnWindowHandle, GWL_STYLE);
// Minimize and restore to be able to make it active.
if ((style & WS_MINIMIZE) == WS_MINIMIZE)
{
ShowWindow(focusOnWindowHandle, SW_RESTORE);
}
uint currentlyFocusedWindowProcessId = GetWindowThreadProcessId(GetForegroundWindow(), IntPtr.Zero);
int appThreadint = GetCurrentThreadId();
uint appThread = Convert.ToUInt32(appThreadint);
if (currentlyFocusedWindowProcessId != appThread)
{
AttachThreadInput(currentlyFocusedWindowProcessId, appThread, true);
BringWindowToTop(focusOnWindowHandle);
ShowWindow(focusOnWindowHandle, SW_SHOW);
AttachThreadInput(currentlyFocusedWindowProcessId, appThread, false);
}
else
{
BringWindowToTop(focusOnWindowHandle);
ShowWindow(focusOnWindowHandle, SW_SHOW);
}
}
Если я запускаю свое приложение из ex Word и из приложения запускаю, шаблон Excel все еще находится наверху, когда открывается документ Exel.
Пожалуйста, помогите мне.
Ола