Обнаружение открытого диалогового окна (Microsoft Word)
У Томаса есть макрос, который выполняет различные функции через определенные промежутки времени.
Некоторые из этих функций не следует выполнять, если на экране открыто диалоговое окно, поскольку попытка их выполнения вызовет ошибку в функциях. Он задается вопросом, есть ли в макросе какой-либо способ определить, открыто ли в настоящее время диалоговое окно — любое диалоговое окно. Томас предпочел бы обнаружить открытое диалоговое окно, а не обрабатывать сгенерированную ошибку.
Возможно, единственный способ сделать это — использовать FindWindow, который фактически является частью Windows API. Его цель — получить дескриптор конкретного открытого окна. (Диалоговое окно — это не что иное, как открытое окно, и каждое диалоговое окно имеет имя.) При таком подходе вы не узнаете, открыто ли _ любое_ диалоговое окно, но сообщит вам, открыто ли секретное диалоговое окно.
Вот краткий пример, показывающий, как можно использовать функцию FindWindow:
Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ (ByVal wClassName As Any, ByVal wWindowName As String) As Long Sub testDialogOpen() Dim wHandle As Long Dim wName As String wName = "Find and Replace" wHandle = FindWindow(0&, wName) If wHandle = 0 Then MsgBox "Dialog window is not open" Else MsgBox "Dialog window is open" End If End Sub
Обратите внимание, что функцию FindWindow необходимо объявить вне процедуры VBA. Затем в рамках процедуры вам нужно указать имя диалогового окна, о котором вы хотите узнать. Это имя, которое появляется в строке заголовка диалогового окна, а функция FindWindow не чувствительна к регистру. Возвращаемое значение для FindWindow будет дескриптором диалогового окна, если оно открыто. Если он не открыт, функция возвращает 0.
Помните также, что диалоговые окна могут быть двух типов: модальные и немодальные. Если конкретное диалоговое окно является модальным, его необходимо закрыть, прежде чем любые другие действия можно будет предпринять в системе. Вы захотите провести обширное тестирование диалоговых окон на данном этапе, так как вы можете получить разную производительность от вашего макроса в зависимости от того, является ли открытое диалоговое окно модальным или нет.
_Примечание: _
Если вы хотите знать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах WordTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / wordribbon-WordTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
WordTips — ваш источник экономичного обучения работе с Microsoft Word.
(Microsoft Word — самая популярная программа для обработки текстов в мире.) Этот совет (12355) применим к Microsoft Word 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Word (Word 2007 и позже) здесь:
link: / wordribbon-Detecting_an_Open_Dialog_Box [Обнаружение открытого диалогового окна]
.