Страница 1 из 1

Activate Window (FileMaker)

Добавлено: 09 ноя 2019, 05:06
andrey volkov
Дано. Работает файлмейкер, его окна - в фоне. На переднем плане какой-нибудь хром.
Некое внешнее приложение запускает на файлмейкере скрипт.
Нужно, чтобы файлмейкер после этого активировался и отобразился поверх всех окон (поверх браузера, например).
Пока это не удается сделать. Лишь ярлычки в панели задач начинают мигать, но файлмейкер как спрятался, так и прячется.

Найти: способ активировать приложение Файлмейкер, вывести его на передний план.

Re: Activate Window (FileMaker)

Добавлено: 09 ноя 2019, 19:47
Arcady
Обычный Select Window в скрипте FM не помогает?

Re: Activate Window (FileMaker)

Добавлено: 10 ноя 2019, 08:41
andrey volkov
к сожалению, нет
что испробовано:
Select Window
Adjust Window (restore)
New window

В какой-то момент один из этих методов в сочетании с другими дает нужный результат, но потом эффект теряется
и становится понятно, что это все ненадежно :(

можно попытаться активировать через Send Event. Но для этого нужно знать путь к приложению FileMaker. А вычислить его тоже никак :(

Re: Activate Window (FileMaker)

Добавлено: 13 ноя 2019, 09:46
Alexei Sytch
Когда-то была похожая проблема, удалось побороть вызовом нужного файла через промежуточный файл:
1 сначала вызывался FM - файл "контроллер.fmp12" с названием скрипта на открытие другого файла
2 Скрипт в файле контроллер.fmp12 открывал файл командой OpenFile (убиралась галка OpenHidden и потом при необходимости SelectWindow)
В хелпе про Select window script step - много в комментах написано о ньюансах вызова скрытых окон/файлов

Альтернативный вариант через файл с VBScript (работает)

Код: Выделить всё

Set WshShell = CreateObject("WScript.Shell") 
WScript.Sleep 2000 
Res = WshShell.AppActivate("MyWindow")  -- название нужного окна в FileMaker
WScript.Sleep 2000 
If Res Then WshShell.SendKeys("^1") -- (необязательная строчка) запустить скрипт по комбинации клавиш "Ctrl + 1"

Re: Activate Window (FileMaker)

Добавлено: 13 ноя 2019, 15:11
andrey volkov
Алексей, спасибо огромное. Похоже с вашей помощью задача, наконец, решается.

первый вариант показался чересчур сложным. хотя он кроссплатформенный. Но там нужно много колдовать с передачей параметров.

второй вариант - реализовал в виде одной-единственной команды Send Event, в которую в текст пишу следующее

Код: Выделить всё

powershell -windowstyle hidden -ExecutionPolicy ByPass -noexit  (New-Object -ComObject WScript.Shell).AppActivate('run');
где 'run' - это имя окна, которое хочу активировать (название может быть любым, можно сделать уникальным).
все это можно задать и калькуляцией, поэтому имя окна может быть любым нужным именем.
Либо наоборот, можно в скрипте перед тем как вызвать Send Event переименовать окно в run, а потом в самом конце переименовать его обратно.


Работает прикольно: если в приложении открыто несколько окон, то открывается не все приложение, а только обозначенное окно (как если бы мы на ярлычок нажали). Возможно, это то, что нужно
Еще раз спасибо!!!

Форум работает