2010-05-07 13 views
0

В моем WinForms приложение, взаимодействующего с Excel через COM Interop,Excel Interop: Восстановление свернутого окна

Я пытаюсь прикрепить к существующему процессу Excel, если есть один. Получение объекта, кажется, работает хорошо, но если приложение Excel сведено к минимуму (что вполне вероятно в моем случае использования), мне не удается восстановить окно и перенести его на передний план.

Я попытался следующие утверждения:

try 
    app = (Excel.Application)Marshal.GetActiveObject("Excel.Application"); 
catch (Exception) { /* ignore */ } 

if (app == null) 
{ 
    app = new Excel.Application(); 
    app.Visible = true; 
} 

if (app.ActiveWindow.WindowState == Excel.XlWindowState.xlMinimized) 
    app.ActiveWindow.WindowState = Excel.XlWindowState.xlNormal; 

wb = ... 

wb.Activate(); 

Ни один из них не имел никакого эффекта. Как я могу это достичь?

(Пожалуйста, обратите внимание: Моя проблема относится к случаю, когда является существующий экземпляр, так что «Visible = истина» не является необходимым и this thread не применяется.)

+0

http://stackoverflow.com/questions/19118881/force-to-bring-excel-window-to-the-front – Ryan

ответ

1

Вы хотите app.WindowState = xlNormal, как app.ActiveWindow - это текущий лист, а не главное окно экземпляров приложения.

+0

Alex, это не могло быть проще! Интересно, как я не смог найти это самостоятельно, так как я даже обыскал класс приложения сначала для соответствующего метода ... (вероятно, я искал метод «Активировать()») – chiccodoro

Смежные вопросы