Как использовать FindWindow для поиска видимого или невидимого windows с частичным именем в VBA

Я использую Windows API с Excel VBA для работы с конкретным окном, используя функцию FindWindow() , но FindWindow() требует полного названия / заголовка windows для поиска.

Вопрос 1

P_Win = FindWindow(vbNullString, "PlusApi_Excel Sample_17_39_12 Api Generated Orders") в моем случае окно изменит имя (динамическое) (некоторая часть имени windows будет исправлена, а какая-то часть будет динамической)

Ex. Имя windows в первый раз "PlusApi_Excel Sample_17_39_12 Api Generated Orders" а во второй раз это будет "PlusApi_Excel Sample_17_45_13 Api Generated Orders" Мне кажется, мне нужно позвонить в окно с именем части, но я не знаю, как сделать с любезной помощью мне

вопрос 2

Выше задачи У меня есть еще одна проблема, которая будет скрыта, но мой код показывает положительное значение.

Я думаю, что мне нужно вызвать только "visible" окно.

Я нашел следующий код в этом ответе vbforums.com и улучшил его, чтобы искать видимые или невидимые windows , поэтому, надеюсь, отвечая на оба вопроса:

 Option Explicit Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function GetWindowText Lib "User32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long Private Declare Function GetWindowTextLength Lib "User32" Alias "GetWindowTextLengthA" (ByVal hWnd As Long) As Long Private Declare Function GetWindow Lib "User32" (ByVal hWnd As Long, ByVal wCmd As Long) As Long Private Declare Function IsWindowVisible Lib "User32" (ByVal hWnd As Long) As Boolean Private Const GW_HWNDNEXT = 2 Private Sub Test() Dim lhWndP As Long If GetHandleFromPartialCaption(lhWndP, "Excel") = True Then If IsWindowVisible(lhWndP) = True Then MsgBox "Found VISIBLE Window Handle: " & lhWndP, vbOKOnly + vbInformation Else MsgBox "Found INVISIBLE Window Handle: " & lhWndP, vbOKOnly + vbInformation End If Else MsgBox "Window 'Excel' not found!", vbOKOnly + vbExclamation End If End Sub Private Function GetHandleFromPartialCaption(ByRef lWnd As Long, ByVal sCaption As String) As Boolean Dim lhWndP As Long Dim sStr As String GetHandleFromPartialCaption = False lhWndP = FindWindow(vbNullString, vbNullString) 'PARENT WINDOW Do While lhWndP <> 0 sStr = String(GetWindowTextLength(lhWndP) + 1, Chr$(0)) GetWindowText lhWndP, sStr, Len(sStr) sStr = Left$(sStr, Len(sStr) - 1) If InStr(1, sStr, sCaption) > 0 Then GetHandleFromPartialCaption = True lWnd = lhWndP Exit Do End If lhWndP = GetWindow(lhWndP, GW_HWNDNEXT) Loop End Function 

Код ищет окно с частичным названием «Excel» и сообщает вам, нашел ли он его, и если это видимое окно или нет. Вы должны уметь адаптировать его для своих целей.

  • Рабочий лист Excel VBA Load в функции
  • AndAlso / OrElse в VBA
  • Как создать пользовательское меню «Shapes» в Powerpoint
  • Округление номера до ближайшего 5 или 10 или X
  • Изменение цветов круговой диаграммы
  • Excel VBA - преобразовать текст в дату?
  • VBA ServerXMLHTTP запрос https с самозаверяющим сертификатом
  • Excel 2013 VBA Очистить все фильтры фильтров
  • Как использовать Excel 2010 Personal Macro Workbook?
  • VBA Macro для сортировки и применения условного форматирования к диапазону ячеек с динамическим числом строк
  • Бенчмаркинг кода VBA
  • Давайте будем гением компьютера.