Что нового

[Окна, Диалоги] Не получается активировать одно конкретное окно

Voldemar

Новичок
Сообщения
3
Репутация
0
Здравствуйте! Столкнулся с такой проблемой. В начале скрипта мне нужно активировать главное окно программы "WIDI Professional" (распознавание музыки). Вроде бы должно быть все просто.
Код:
Global Const $MainWindowTitle = "WIDI Professional"
Global $MainWindowHandle

If WinExists($MainWindowTitle) Then
    $MainWindowHandle = WinActivate($MainWindowTitle)
EndIf

Но... Если окно этой WIDI уже было раскрыто на рабочем столе, оно действительно активируется, а вот если было свернуто в панель задач, ничего не происходит. Операционная система Win7. WinActivate в обоих случаях возвращает правильный хендл окна. Что странно, такой же код в AutoHotKey работает нормально. Следует сказать, что с другими программами (Проводник, Блокнот и т.д.) все идеально работает, но не с WIDI. Подскажите, в чем может быть проблема.
Что еще заметил... Если все программы при свертывании свертываются по направлению панели задач (анимация), то окно WIDI свертывается в направлении своего центра. Если я использую WinSetState и @SW_SHOW, свернутое окно активируется, но перестает работать его кнопка свертывания. Возможно ли, что программа сама программирует процесс свертывания/развертывания? Тогда возможно, что по WinSetState система покажет окно, но сама программа считает, что свернута и поэтому не реагирует на кнопку свертывания? Была у меня идея в скрипте просто кликнуть на значок этой WIDI в панели задач. Но для Win7 не нашел такой возможности. Кто-нибудь поможет?
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
Можно поиграться с функцией _WinAPI_ShowWindow

Код:
#include <WinAPI.au3>
$hwnd = WinGetHandle('WIDI Professional', '')
_WinAPI_ShowWindow($hWnd, @SW_RESTORE)


А у этой WIDI Professional в трее нет случайно значка? По нему в принципе кликать можно.
 
Автор
V

Voldemar

Новичок
Сообщения
3
Репутация
0
WSWR, попробовал _WinAPI_ShowWindow (с разными параметрами). Да, окно появляется, но как и в случае с WinSetState, после этого перестает работать кнопка свертывания окна. А вот если после этого кликнуть на значке WIDI в панели задач, ее окно "моргнет" и кнопка начинает работать.

В трее у проги значков нет.


Добавлено:
Сообщение автоматически объединено:

А вообще, интересно.... _WinAPI_ShowWindow($hWnd, @SW_RESTORE) должна же активировать и показывать окно? (@SW_RESTORE - Activates and displays the window) Поднять его на самый верх? У меня любые свернутые окна при ее вызове появляются, но под всеми другими. А несвернутые остаются там, где и были - где-то под другими окнами.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Voldemar [?]
в скрипте просто кликнуть на значок этой WIDI в панели задач. Но для Win7 не нашел такой возможности.
Если пишите скрипт для себя, то всё просто. Закрепите программу на панели задач и посылайте клавишу Win с цифрой закреплённой программы. Например, закрепили программу под номером 3 (после IE и проводника). Теперь посылаем Win+3
Код:
Send("#3")
 
Автор
V

Voldemar

Новичок
Сообщения
3
Репутация
0
InnI, огромное спасибо! Пишу для себя и этот метод решит проблему. Спасибо!
 
Верх