Я пытаюсь использовать API FindWindow, используя Visual Studio 2017 (.NET Framework 4.6.1) и VB.NET, чтобы получить дескриптор окна для текущего запущенного экземпляра Microsoft Word.Я обнаружил, что, хотя он работал в прошлом (и работает в другой области кода) в одном конкретном случае, хотя вызов FindWindow возвращает значение, я не могу назначить его переменной.Я проверил это в режиме отладки (доступны скриншоты).Я пытаюсь понять, почему вызов API не работает в данном конкретном случае.
Ссылка на снимок экрана: https://imgur.com/a/NuwpUyz
Я выполнил этот вызов в некоторых областях кода .NET, которым я являюсьработая, поэтому я знаю, что это работает.Я изменил тип в определении переменной "assignee" (с Object, на Integer, на IntPtr и т. Д. И т. Д.) И перезапустил приложение с теми же результатами (переменная "assignee" заканчиваетсянулевое значение, но сам вызов FindWindow возвращает целочисленное значение, которое выглядит как правильный дескриптор окна.
Определение API FindWindow:
<DllImport("user32.dll")>
Public Shared Function FindWindow(ByVal strclassName As String, ByVal strWindowName As String) As Integer
End Function
FindWindowВызов API:
.... Публичный hndMDIWord как целое число ... Если Word_Previously_Running, то попробуйте _mdiWordApp = GetObject (, "Word.Application") Поймать как исключение _mdiWordApp = New Word.Application End Try TryИначе _mdiWordApp = New Word.Application End If hndMDIWord = FindWindow ("Opusapp", "") Если hndMDIWord <> 0, то SetParent (hndMDIWord, Me.Handle.ToInt32 ()) End If
IЯ ожидаю, что FindWindow вернет целое число, представляющее дескриптор окна текущего запущенного экземпляра Word, и затем этот результат будет присвоен переменной hndMDIWord.ndow возвращает ожидаемый результат, но оператор присваивания для переменной hndMDIWord не выполняется должным образом;hndMDIWord заканчивается значением ноль.Нет ошибок и не возникает исключений.
Любые предложения и / или идеи, безусловно, будут высоко оценены.
С уважением,
Крис Флитвуд