Mam następujący kod AppleScript, który otwiera określony plik w TextEdit w oknie z określonymi granicami:
set targetFilepath to "/Users/Me/Desktop/My Fruit Log.txt"
tell application "TextEdit"
activate
open targetFilepath
set bounds of front window to {279, 111, 1180, 719}
end tell
Problem z tym kodem polega na tym, że jeśli mam otwarte inne pliki TextEdit, kod przeniesie również inne dokumenty na pierwszy plan. Chciałbym jednak, aby tylko ten jeden, konkretny plik tekstowy został przeniesiony na pierwszy plan.
Kod nie spowoduje przeniesienia zminimalizowanego okna TextEdit na przód, ale przeniesie wszystkie ukryte, niezminimalizowane okna TextEdit na przód.
Kiedy usuwam activate
wiersz z kodu:
tell application "TextEdit"
open targetFilepath
set bounds of front window to {279, 111, 1180, 719}
end tell
plik jest otwarty, ale jego okno nie jest przenoszone na pierwszy plan.
OS X El Capitan, wersja 10.11.6.
Oto wizualna reprezentacja tego, co opisałem powyżej. Miałem zero okien zminimalizowane na moim komputerze, gdy te zrzuty ekranu zostały wykonane.
Tak wygląda mój ekran przed uruchomieniem AppleScript :
Tak chcę, aby mój ekran wyglądał po uruchomieniu AppleScript :
Oto jak obecnie wygląda mój ekran po uruchomieniu AppleScript :
W celu pełnego ujawnienia mój kod przesuwa także położenie kursora TextEdit po otwarciu pliku. Nie wiem, czy wpłynęłoby to na potencjalne rozwiązanie, ale oto dodatkowy kod, który następuje po powyższym fragmencie ( x
jest liczbą całkowitą, która jest wcześniej przypisywana):
tell application "TextEdit" to activate
tell application "System Events" to tell process "TextEdit"
repeat x times
key code 125
end repeat
end tell
end tell
źródło
activate
, nawet okno pliku, który jest otwarty.Odpowiedzi:
Myślę, że masz problem z tym, że źle zrozumiałeś, co się właściwie dzieje. Pozwól mi spróbować wyjaśnić ...
Pierwsze pytanie, na które należy odpowiedzieć, to dlaczego okna nie były widoczne na pierwszym zrzucie ekranu? Oczywiście plik My Fruit Log.txt nie był widoczny, ponieważ nie był jeszcze otwarty (tzn. Skrypt jeszcze się nie uruchomił). Ale co z innymi oknami? Istnieją tylko trzy możliwości:
W twoim scenariuszu jest prawie pewne, że zastosowanie ma Opcja 2. Tak więc, chociaż nie jest to, co chcesz usłyszeć, twój skrypt działa tak, jak powinien w macOS. Jedyny sposób mogę myśleć o chwili obecnej, aby osiągnąć to, co chcesz w sposób praktyczny, jest zapewnienie, że skrypt minimalizuje wszystkie inne okna, z wyjątkiem jednego, że właśnie otwarty. Na przykład można to osiągnąć za pomocą następującego kodu:
Jak widać, właśnie dodałem dwie linie kodu. Myślę, że są dość zrozumiałe - po prostu mówią TextEdit, aby zminimalizować każde okno, które spełnia te dwa warunki (1. nie jest to okno przednie i 2. jest widoczne).
Mam nadzieję, że to zadziała dla Ciebie - ale jeśli nie, może ktoś wymyśli lepsze rozwiązanie.
źródło
Co powiesz na to?
Jestem pewien, że istnieją inne metody identyfikacji okien. Możesz także zrobić coś takiego… gdzie używana jest lista okien od drugiej do ostatniej.
Kluczowym terminem jest tutaj „widoczny”.
źródło
open targetFilepath
linia powinna znajdować się przed czy po twoim kodzie? Kładę ten wiersz przed twoim kodem. Nie zauważam żadnej różnicy w twoim pierwszym rozwiązaniu; ukryte okna TextEdit nadal stają się widoczne. Drugie rozwiązanie całkowicie zamyka ukryte okna, zamiast po prostu je ukryć.visible (boolean) : Whether the window is currently visible.