Активировать документ Office (Word, Excel и PP) из приложения Windows Form - PullRequest
0 голосов
/ 25 сентября 2018

Я работаю с 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.

Пожалуйста, помогите мне.

Ола

...