Applescript не работает при запуске OSX - PullRequest
0 голосов
/ 26 мая 2011

Я написал свое яблочное приложение, чтобы скрыть окно моей карты Wi-Fi.Я столкнулся с некоторой проблемой при проверке, является ли окно видимым или нет (чтобы избежать нажатия клавиши + h, не влияющих на результат), поэтому я решил использовать delay 15, чтобы убедиться (не совсем), что окно всплывает.Если я запускаю скрипт из редактора или дважды щелкаю файл приложения, он работает, но если я настрою его запуск при входе пользователя в систему (в меню «Настройки»> «Учетная запись> Элементы входа»), он не будет работать!Я попытался изменить флажок на странице Save as... редактора яблочного скрипта: я попробовал оба параметра для only execute, но что-то изменилось.С опцией start screen фактически она работает, но она спрашивает у меня подтверждение, и я не хочу его (я предпочитаю вместо этого нажимать cmd + h).Кто-нибудь может объяснить мне, почему у меня есть эта проблема?

tell application "System Events"
set progList to (name of every process)
set cond to false
repeat while cond is false
    if (progList contains "WirelessUtilityCardbusPCI") is true then
        delay 5
        activate application "WirelessUtilityCardbusPCI.app"
        tell application "System Events" to keystroke "h" using [command down]
        set cond to true
    else
        delay 5
        set progList to (name of every process)
    end if
end repeat
end tell

РЕДАКТИРОВАТЬ: Теперь, похоже, работает!Я забыл повторно set progList to (name of every process).Теперь код правильный.

Ответы [ 2 ]

2 голосов
/ 27 мая 2011

Я вижу, ваш код работает. Замечательно. Однако я публикую это, чтобы помочь вам учиться. Я вижу пару небольших проблем с вашим кодом. Например, в цикле повторения вы сообщаете системным событиям нажатие клавиши «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
0 голосов
/ 27 мая 2011

Я использовал элементы входа для запуска апплета AppleScript при успешном входе в систему, поэтому мое первое предложение - убедиться, что он не работает. Пусть он покажет пользовательский диалог или звуковой сигнал или что-то в этом роде, чтобы подтвердить, работает он или нет.

Кроме этого, я не уверен, какое предложение предложить, если вы не хотите опубликовать код, который выполняете в сценарии.

...