Получение определенного дескриптора окна с помощью взаимодействия с Office

Я создаю новый экземпляр Word с помощью взаимодействия с Office, выполнив следующие действия:

var word = Microsoft.Office.Interop.Word.Application();
word.Visible = true;
word.Activate;

Я могу получить дескриптор окна вроде этого:

var wordHandle = Process.GetProcessesByName("winword")[0].MainWindowHandle;

Проблема в том, что код работает в предположении, что другой экземпляр Word не запущен. Если их несколько, нельзя гарантировать, что возвращаемый дескриптор относится к экземпляру, который я запустил. Я пробовал использовать GetForegroundWindow после обнаружения события WindowActivate от моего объекта, но все это выполняется в приложении WPF, которое настроено на запуск как самое верхнее окно, поэтому я просто получаю дескриптор в окно WPF. Есть ли другие способы получить дескриптор моего экземпляра слова?

6
задан HotN 29 December 2011 в 21:33
поделиться

1 ответ

Начиная с Word 2013 можно использовать Hwnd свойство Window, который выставляется от Application

var windowHandle = wordApplication.ActiveWindow.Hwnd;

, Hwnd возвращает Целое число, которое указывает на дескриптор окна указанного окна. С этим int можно использовать NativeWindow, который обеспечивает инкапсуляцию низкого уровня дескриптора окна.

var nativeWindow = new NativeWindow();
nativeWindow.AssignHandle(new IntPtr(windowHandle));
0
ответ дан 15 December 2019 в 16:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: