Я вижу, ваш код работает. Замечательно. Однако я публикую это, чтобы помочь вам учиться. Я вижу пару небольших проблем с вашим кодом. Например, в цикле повторения вы сообщаете системным событиям нажатие клавиши «h». Нет необходимости сообщать системным событиям об этом в этой строке, потому что вы уже находитесь в блоке системных событий, сообщающем о коде, поэтому системные события уже знают об этом.
Вот как бы я написал ваш код. Это не требует нажатия клавиш, что всегда хорошо, и немного более эффективно. Это работает, потому что, если процесс не существует, то строка «устанавливает theProcess на» ошибки, код затем переходит в раздел «on error» с задержкой 5, затем цикл повторения пытается найти процесс снова. Если процесс найден, он устанавливает его свойство visible, то же самое, что скрывать его.
Он также имеет механизм тайм-аута для предотвращения вечного выполнения скрипта. Используйте это, если хотите. Удачи.
set processName to "WirelessUtilityCardbusPCI"
set maxTime to 180 -- we only check for 3 minutes, then end
set inTime to current date
repeat
try
tell application "System Events"
set theProcess to first process whose name is processName
set visible of theProcess to false
end tell
exit repeat
on error
if (current date) - inTime is greater than maxTime then
tell me
activate
display dialog "The process " & processName & " could not be found!" buttons {"OK"} default button 1 with icon 0
end tell
exit repeat
end if
delay 5
end try
end repeat
РЕДАКТИРОВАТЬ : я проверил приведенный выше код с помощью приложения TextEdit, и он работает нормально. Чтобы проверить это с вашим приложением, запустите следующее. Убедитесь, что приложение работает, когда вы запускаете этот код. Если есть ошибка, это покажет это. Если ошибки нет, отобразятся 2 диалоговых окна, показывающих прогресс. Сообщите, что вы найдете.
set processName to "WirelessUtilityCardbusPCI"
try
tell application "System Events"
set theProcess to first process whose name is processName
display dialog "I have found the process"
set visible of theProcess to false
display dialog "I just performed the \"set visible\" code"
end tell
on error theError number errorNumber
tell me
activate
display dialog "There was an error: " & (errorNumber as text) & return & return & theError buttons {"OK"} default button 1 with icon stop
return
end tell
end try