Страницы: 1
RSS
определить размеры активного окна другого приложения vba
 
Добрый вечер.

Подскажите пожалуйста, как можно определить размеры окна стороннего приложения, которое сейчас активно. Установить утилиты типа spy++ не представляется возможным. Нашла  Application.Width  и Application.Height.

В коде возникает ошибка:
Код
Option Explicit
Sub privet()
AppActivate "Internet Explorer"

X=Application.Width
Y=Application.Height

End Sub

Требуется ли для работы данного кода подключение библиотеки?

Заранее спасибо.
 
То, что Вы активировали окно приложение методом AppActivate не означает, что теперь все строки кода ниже будут обращаться к нему. Эта строка не делает ничего, кроме активации окна, если таковое будет найдено. Никакого подключения к приложению этого окна не происходит. Поэтому строки вроде X=Application.Width относятся все равно к Excel. Но у Application нет свойства Width, оно есть у объекта Window.
По сути, для получения размеров любого окна надо использовать API(что вероятно, будет не всегда просто). Сначала по заголовку приложения искать его дескриптор(а-ля FindWindow), потом уже на основании дескриптора считывать данные по размеру окна. примерно это будет выглядеть так:
Код
Option Explicit

Type Rect
  left As Long
  top As Long
  right As Long
  bottom As Long
End Type
Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
          ByVal lpClassName As Any, _
          ByVal lpWindowName As Any) As Long
Declare Function GetWindowRect Lib "user32" _
           (ByVal hwnd As Long, _
            lpRect As Rect) As Long

Sub GetWindowSize()
    Dim hwnd As Long        ' дескриптор окна
    Dim retval As Long      ' возвращаемое значение
    Dim winrect As Rect     ' прямоугольник окна

    ' пытаемся найти окно Калькулятора
    hwnd = FindWindow(vbNullString, "Калькулятор")
    'если Калькулятор запущен
    If hwnd <> 0 Then
        retval = GetWindowRect(hwnd, winrect)
        MsgBox "Ширина =" & winrect.right - winrect.left & _
               vbNewLine & "Высота =" & winrect.bottom - winrect.top
    End If
End Sub
но здесь мне лениво было учитывать разную разрядность ОС(для 64 бит придется допиливать типы, впрочем, темы подобные обсуждались).
Да и для примера взят Калькулятор, заголовок которого не изменяется. Но тот же Блокнот(как и многие другие приложения) добавляют в заголовок разные дописки(например, блокнот выглядит при создании примерно так: "Безымянный - Блокнот"). И если хоть один символ будет отличаться - код не сработает.
Изменено: Дмитрий Щербаков - 14.03.2018 20:06:18
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Здравствуйте, спасибо Вам за подробный ответ. Заголовок окна постоянно меняется (конкретно номер версии программы) - утром она v7, вечером v9. Буду искать список открытых приложений. Тему можно закрывать.
Страницы: 1
Наверх