2015-07-24 5 views
0

Я ищу способ доступа к пользовательскому интерфейсу, к которому недоступен аппликатор. Я знаю, что applescript может получить доступ к элементу пользовательского интерфейса. Но иногда я встречаю случай, когда я не могу получить доступ к элементу пользовательского интерфейса с помощью applescript. Как внизу ...Как получить доступ к пользовательскому интерфейсу, к которому не удается получить доступ к applescript?

tell application "System Preferences" to activate 
delay 1 
tell application "System Events" 
    tell process "System Preferences" 
     set frontmost to true 
     click button 22 of scroll area 1 of window 1 
     delay 1 
     UI elements of last group of list 1 of window 1 
    end tell 
end tell 

Это просто возвращает 2 элементы пользовательского интерфейса изображения и статический текст.

{ 
image 1 of group 3 of list 1 of window "Users & Groups" of application process "System Preferences" of application "System Events", 
static text "Login Options" of group 3 of list 1 of window "Users & Groups" of application process "System Preferences" of application "System Events" 
} 

По-видимому, существует элемент с интерактивным интерфейсом, который имеет два элемента. Потому что я могу нажать «Параметры входа».

К счастью, отправив нажатие клавиши и клавиатурных команд кода были получены должным образом.

set DownArrow to 125 
set UpArrow to 126 
tell application "System Preferences" to activate 
delay 1 
tell application "System Events" 
    tell process "System Preferences" 
     set frontmost to true 
     click button 22 of scroll area 1 of window 1 
     delay 1 
     keystroke tab 
     repeat 3 times 
      delay 1 
      key code DownArrow 
      delay 1 
      key code UpArrow 
     end repeat 
    end tell 
end tell 
tell application "System Preferences" to quit 

Мой вопрос ...

  • Почему AppleScript, кажется, игнорируют "Логин" Параметры элемента пользовательского интерфейса?
  • Почему я не могу щелкнуть элемент пользовательского интерфейса «Login Options» с помощью мыши или трекпада?
  • Почему не может ключевой штрих и код ключа команда доступа к элементу пользовательского интерфейса «Вход в систему»?
  • Невозможно ли выбрать элемент пользовательского интерфейса «Вход в систему» ​​без использования ключевой штрих и код клавиши команды?
  • Как получить доступ к элементу пользовательского интерфейса applescript?

Подсказка приветствуется. Любой код (python, c, object-c и т. Д.) Более ценится. :)

Спасибо.

ответ

1

Для решения многих из этих проблем вам не нужны системные события. Например, System Preferences является скрипт-состоянии достаточно, по крайней мере, сделать это, который решает некоторые из ваших проблем:

tell application "System Preferences" 
    activate 
    set the current pane to pane id "com.apple.preference.users" 
    reveal anchor "loginOptionsPref" of current pane 
end tell 

Так,

  1. AppleScript не «игнорирование» контроль Вход Опции ;
  2. Вам не нужно нажимать, вы можете использовать «раскрывать» (вы хотите набрать «can not» вместо «can»?- Я отредактировал сообщение, чтобы правильно отформатировать ваши вопросы);
  3. Я думаю, что это делает третий вопрос спорным;
  4. Мой пример показывает, как сделать это без нажатия
  5. Как получить доступ к «не» пунктов, доступную - гораздо более важный вопрос:

Хотя это правда, что системные настройки является скрипт-состоянии , бывают случаи, когда вам могут понадобиться системные события. Например, у меня есть сценарий для панели Sound, который использует следующий обработчик (подпрограммы):

on doSysEvSelect(whatToSelect, whatWindow) 
    tell application "System Events" 
     tell process "System Preferences" 
      select (row 1 of table 1 of scroll area 1 of tab group 1 of window whatWindow whose value of text field 1 is whatToSelect) 
     end tell 
    end tell 
end doSysEvSelect 

, который я могу использовать, выполнив, например:

doSysEvSelect("Internal Microphone", "Sound") 

Использование системных событий может быть разочарование, чтобы понять. Но, конечно, есть много примеров, которые можно найти. И если вы действительно привязаны, вы можете использовать Sikuli (http://sikuli.org/) для автоматизации практически всего, но который полностью зависит от пользовательского интерфейса и нажатия.

[править]

А вот пример того, что делать с элементом Login Options когда вы там (это, где вы должны использовать системные события):

tell application "System Events" 
    tell process "System Preferences" 
     if value of checkbox "Show password hints" of group 1 of window "Users & Groups" is 0 then 
      click checkbox "Show password hints" of group 1 of window "Users & Groups" 
     end if 
    end tell 
end tell 
+0

Обратите внимание, что вы делаете такие вещи, как «имя якорей текущей панели», чтобы найти правильные имена привязок. – CRGreen

+0

Этот ответ почти решил мою проблему. Спасибо :) –

1

Вы можете имитировать клики, как вы делаете непосредственно при использовании системных настроек, но вам нужно знать, какой объект щелкнуть. Fyi, вот пример системных настроек, нажмите и выберите Bluetooth. он дает представление о том, как это сделать:

tell application "System Preferences" 
activate 
set current pane to pane "com.apple.preferences.Bluetooth" 
tell application "System Events" 
    tell process "System Preferences" 
     -- select row containing the word "mouse" 
     repeat with I from 1 to count of row of table 1 of scroll area 2 of group 1 of front window 
      set Nom_Perif to (description of static text 1 of row I of table 1 of scroll area 2 of group 1 of front window) as string 
      if Nom_Perif contains "Mouse" then 
       set selected of row I of table 1 of scroll area 2 of group 1 of front window to true 
       if Nom_Perif contains "not connected" then 
        -- sert connection via item 1 of menu 
        click menu button of group 1 of front window 
        delay 1 
        click menu item "Connect" of menu of menu button of group 1 of front window 
        delay 3 
       end if 
      end if 
     end repeat 
    end tell 
end tell 
end tell 
quit application "System Preferences" 
Смежные вопросы