Страница 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, а потом в самом конце переименовать его обратно.
Работает прикольно: если в приложении открыто несколько окон, то открывается не все приложение, а только обозначенное окно (как если бы мы на ярлычок нажали). Возможно, это то, что нужно
Еще раз спасибо!!!
Форум работает