VBA - найти дескриптор окна, зная его заголовок, класс и владельца - PullRequest
0 голосов
/ 22 февраля 2019

Это должно быть легко, но не так, как я себе представлял ... Это окно «Мастер слияния печати» Corel DRAW.Я могу найти окно со Spy ++, его заголовком и его классом. Я не могу найти его дескриптор, используя API .Используя FindWindow, я могу получить только основное окно Corel:

TxtHwnd = FindWindow("CorelDRAW18", vbNullString)

Когда я пытаюсь сделать то же самое, используя заголовок и класс, он не может вернуть дескриптор:

hMerge = FindWindow("#32770 (Dialog)", "Print Merge Wizard")

Iпопытался использовать FindWindowEx следующим способом, но безуспешно:

TxtHwnd = FindWindow("CorelDRAW18", vbNullString): Debug.Print TxtHwnd
hMerge = FindWindowEx(TxtHwnd, ByVal CLngPtr(0), "#32770 (Dialog)", "Print Merge Wizard")

Я также попытался перебрать все открытые окна, используя:

    Sub ListWins(Optional Title = "*XYZ*", Optional Class = "*")
    Dim hWndThis As Long
    hWndThis = FindWindow(vbNullString, vbNullString)
    While hWndThis
        Dim sTitle As String, sClass As String
        sTitle = Space$(255)
        sTitle = Left$(sTitle, GetWindowText(hWndThis, sTitle, Len(sTitle)))
        sClass = Space$(255)
        sClass = Left$(sClass, GetClassName(hWndThis, sClass, Len(sClass)))
        If sTitle Like Title And sClass Like Class Then
            Debug.Print sTitle, sClass
            Stop
        End If
        hWndThis = GetWindow(hWndThis, GW_HWNDNEXT)
        Debug.Print sTitle, sClass, hWndThis
    Wend 
End Sub

Вызов функции следующим образом:

ListWins "Print Merge Wizard", "#32770 (Dialog)"

Обсуждаемое окно находится не между теми, что показаны в коде ... Изучая свойства окна Spy ++, я вижу, что Мастер печати слияния не является дочерним окном Corel.Он просто показывает, что Corel - его владелец ...

Зная все это, каким образом вы думаете, я могу поймать обработчик окна Print Merge Wizard ?

Спасибозаранее!

...