MacCentre.ru Форум
Форум по компьютерам Mac, Mac OS X и продукции Apple
 
ПравилаПравила   FAQFAQ   ПоискПоиск  РегистрацияРегистрация   ПрофильПрофиль   Войти и проверить ЛСВойти и проверить ЛС   ВходВход 
Вопросы и ответы по AppleScript
На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8  След.
Начать новую тему   Ответить на тему Список форумов MacCentre.ru Форум » Программирование и Beta-тестирование   
Автор Сообщение
zztatarin



Репутация: +34    

Зарегистрирован: 04.08.2006
Сообщения: 4260

СообщениеДобавлено: Пн Окт 27, 2008 01:26
Ответить с цитатой

Что надо сделать? Отмонтировать все "внешние диски"?
_________________
Дайте мне единицу измерения и я смогу измерить ничтожность и бесконечность. А компьютер мне в х... не упёрся. Мне штангенциркуля хватит.
И ещё. Учу пользоваться документацией
Искренне Ваш ﺗﺘﺮ
Вернуться к началу
Посмотреть профиль Отправить личное сообщение ICQ Number
Art-Roman



Репутация: +21    

Зарегистрирован: 08.11.2006
Сообщения: 3071
Откуда: Казань

СообщениеДобавлено: Пн Окт 27, 2008 01:43
Ответить с цитатой

Перечислил в скрипте три тома на винте, при аккуратном еджекте с делеем винт останавливается (чего и требовалось). Сохранил как программу только для запуска, поместил на панель файндера. осталось приделать иконки, чтоб нагляднее было. Получилось почти то, что хотел, лишь неуневерсально немного (изменив имя тома, придётся изменять программу).

Цитата:
Что надо сделать? Отмонтировать все "внешние диски"?
Была поставлена задача отмонтировать внешний винт (отмонтировать тома на нём тоже подошло). Нет ли способа обратиться к винту и получить список его томов?
В /dev/ имеются
Код:
 disk0,  disk0s1,  disk0s2,  disk0s3,  disk1,  disk1s1,  disk1s2,  disk1s3,  disk2
и
Код:
rdisk0, rdisk0s1, rdisk0s2, rdisk0s3, rdisk1, rdisk1s1, rdisk1s2, rdisk1s3, rdisk2
соотв-но.
Но disk1sX после размонтирования томов не исчезает, только после отключения питания коробки.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
zztatarin



Репутация: +34    

Зарегистрирован: 04.08.2006
Сообщения: 4260

СообщениеДобавлено: Пн Окт 27, 2008 02:53
Ответить с цитатой

Код:
set tReturn to do shell script "diskutil list"
вернет список всех винтов в системе,
Код:
set tReturn to do shell script "diskutil list /dev/disk0"

всех партишенов на первом мастере
Код:
set tReturn to do shell script "diskutil list /dev/disk1"
всех партишенов на первом слейве соответственно.


Кроме того:
Код:
diskutil information /dev/disk0
вернет некоторое количество информации о первом мастере, а
Код:
diskutil information /dev/disk0sXXX
о соответствующем партишене включая имя, которое высвечивается на десктопе.


PS. Имена дисков, кроме того, можно получить через Finder. Рекомендую "почитать" на эту тему /Library/Scripts/Finder Scripts/*.scpt

_________________
Дайте мне единицу измерения и я смогу измерить ничтожность и бесконечность. А компьютер мне в х... не упёрся. Мне штангенциркуля хватит.
И ещё. Учу пользоваться документацией
Искренне Ваш ﺗﺘﺮ
Вернуться к началу
Посмотреть профиль Отправить личное сообщение ICQ Number
6Ж1П



Репутация: 0    

Зарегистрирован: 27.08.2008
Сообщения: 3

СообщениеДобавлено: Вт Окт 28, 2008 22:27
Ответить с цитатой

Чего их получать
Цитата:
get every item of desktop
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Art-Roman



Репутация: +21    

Зарегистрирован: 08.11.2006
Сообщения: 3071
Откуда: Казань

СообщениеДобавлено: Вт Окт 28, 2008 23:30
Ответить с цитатой

У меня на десктопе много чего кроме дисков
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
zztatarin



Репутация: +34    

Зарегистрирован: 04.08.2006
Сообщения: 4260

СообщениеДобавлено: Чт Окт 30, 2008 01:38
Ответить с цитатой

Ну... Нет ничего сложного. Smile
Можно
Код:
tell application "Finder" to set tDiskList to every disk of desktop
получить список всех дисков. Или
Код:
tell application "Finder" to set tFolderList to every folder of desktop
получить список всех папок. Или
Код:
tell application "Finder" to set tFileList to every file of desktop
получить список всех файлов.
NOTE: Каждый смонтированый диск это FinderItem. Но не каждый Item – Disk. Кроме того, Disk обладает свойствами Folder-а. Поэтому в tFolderList будут не только папки, но и диски.


В случае нашей задачи мы можем сделать следующее:
1. Извлечь все диски которые извлечь возможно
Код:
tell application "Finder" to eject every disk of desktop
По идее это должно работать и с виртуальными, и с внешними, и сетевыми дисками. Проверить не могу, нет внешних.

2. Получить список всех точек монтирования
Код:
set tMountPointList to {}
tell application "Finder"
   set tURLList to URL of every disk of desktop
   
   repeat with i from 2 to number of items in the tURLList -- Первый элемент это загрузочный диск, его отмонировать не рекомендуется.
      set AppleScript's text item delimiters to {"/"}
      set tUrl to text items of (item i of the tURLList)
      set tMountPoint to {}
      
      repeat with j from 4 to (number of items in the tUrl) -- Первые три элемента это "file://localhost/"
         copy item j of the tUrl to end of tMountPoint
      end repeat
      set tMountPoint to tMountPoint as string
      set AppleScript's text item delimiters to {""}
      copy tMountPoint to end of tMountPointList
   end repeat
   
   return tMountPointList
   
end tell


Что делать с этим списком понятно?
PS. Немного подправил код. Так изящнее.

_________________
Дайте мне единицу измерения и я смогу измерить ничтожность и бесконечность. А компьютер мне в х... не упёрся. Мне штангенциркуля хватит.
И ещё. Учу пользоваться документацией
Искренне Ваш ﺗﺘﺮ


Последний раз редактировалось: zztatarin (Ср Фев 11, 2009 21:01), всего редактировалось 3 раз(а)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение ICQ Number
Art-Roman



Репутация: +21    

Зарегистрирован: 08.11.2006
Сообщения: 3071
Откуда: Казань

СообщениеДобавлено: Чт Окт 30, 2008 02:04
Ответить с цитатой

Обалдеть Smile
Спасибо за подробное разъяснение, пока просто через перечисление имён разделов отключаю через небольшие delay, подключаются тоже норм. Будет время, попробую сделать как положено, с получением имён разделов с диска Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
Aha_pupok



Репутация: 0    

Зарегистрирован: 14.07.2003
Сообщения: 139
Откуда: [мск]

СообщениеДобавлено: Чт Окт 30, 2008 18:42
Ответить с цитатой

блин, а я пропустил URL =) ну вот тогда
Код:
set tMountPoint to {}
repeat with j from 4 to (number of items in the tUrl) -- Первые три элемента это "file://localhost/"
      copy item j of the tUrl to end of tMountPoint
end repeat

можно заменить на
Код:
 set tMountPoint to (item 4 thru -1 of tUrl) as string

_________________
http://www.applescript.ru
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
zztatarin



Репутация: +34    

Зарегистрирован: 04.08.2006
Сообщения: 4260

СообщениеДобавлено: Чт Ноя 06, 2008 20:50
Просмотреть подсеть
Ответить с цитатой

Специально не стал кидать в курилку. Рекомендую к изучению. В выходные распишу коментарии.


ping.scpt.zip
 Описание:

Скачать
 Название файла:  ping.scpt.zip
 Размер файла:  2.63 кб
 Скачено:  41 раз(а)


_________________
Дайте мне единицу измерения и я смогу измерить ничтожность и бесконечность. А компьютер мне в х... не упёрся. Мне штангенциркуля хватит.
И ещё. Учу пользоваться документацией
Искренне Ваш ﺗﺘﺮ
Вернуться к началу
Посмотреть профиль Отправить личное сообщение ICQ Number
zztatarin



Репутация: +34    

Зарегистрирован: 04.08.2006
Сообщения: 4260

СообщениеДобавлено: Пт Ноя 07, 2008 01:59
Ответить с цитатой

Немного подправил скрипт, в результате чего он стал более универсальным и выполняется в ЛЮБОЙ системе
Код:
tell application "Finder" to set tHome to home as alias -- Узнать где у нас "дом"
set the error_log to (tHome as string) & "IP.txt" -- Направить туда вывод
set tResult to "" -- установить пустую строку
repeat with tHost from 1 to 254 -- переменная, последний байт адреса
   try -- попытка выполнить команду, игнорируя ошибку исполнения.
      do shell script "ping  -c1 -t3 " & "192.168.1." & tHost administrator privileges yes user name "root" password "" -- выполняем терминальную команду с соответствующими ключами и привилегиями. Вместо "192.168.1." поставить свою подсеть. -c4 и -t3 сейчас не помню, man поможет.
      set tResult to result -- результат "пинка" записываем в переменную.
   end try
   set tReturn to tHost & return & tResult & return & return & return as string -- Записываем номер хоста и переменную с результатом "пинка". Три пустых строки для разделения записей.
   set tResult to ""
   try
      -- Внимание! Следующие три строки позволяют записывать информацию в файл средствами AppleScript-а
      
      open for access file the error_log with write permission -- Открываем файл на запись
      write (tReturn & return) to file the error_log starting at eof -- Сбрасываем переменную с номером хоста и результатом "пинка" в конец файла.
      close access file the error_log -- Обязательно закрыть файл!
   on error
      display dialog "Can't write" & result buttons {"OK"} default button 1 -- в случае ошибки вывести диалог
      
      try
         close access file the error_log -- и еще раз закрыть файл.
      end try
   end try
   
end repeat -- Вуаля! Повторить 254 раза. Хост с номером 255 не существует, однако это броадкаст и возможно все что написано выше излишне. По идее запрос на этот адрес должен вернуть список всех хостов. Проверить не могу, ввиду наличия во внутренней сети всего двух хостов.

Да уЖ... Абсолютно не читаемо. Скопировать код и вставить в редактор. Нажать на молоток. Разбираться только после этого.

_________________
Дайте мне единицу измерения и я смогу измерить ничтожность и бесконечность. А компьютер мне в х... не упёрся. Мне штангенциркуля хватит.
И ещё. Учу пользоваться документацией
Искренне Ваш ﺗﺘﺮ


Последний раз редактировалось: zztatarin (Пт Ноя 07, 2008 02:06), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение ICQ Number
Art-Roman



Репутация: +21    

Зарегистрирован: 08.11.2006
Сообщения: 3071
Откуда: Казань

СообщениеДобавлено: Пт Ноя 07, 2008 02:05
Ответить с цитатой

Вот теперь работает замечательно Smile
Только не совсем понятно, какая цель, ибо пинг по каждому хосту идёт достаточно небыстро, а во время выполнения программа закрывается только принудительно.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
zztatarin



Репутация: +34    

Зарегистрирован: 04.08.2006
Сообщения: 4260

СообщениеДобавлено: Пт Ноя 07, 2008 02:07
Ответить с цитатой

Цель – обьяснить интересующимся как чего работает. Wink
Дабы работало быстрее менять ключи у ping-а. С -c1 -t1 работает весьма шустренько. Но не везде.

_________________
Дайте мне единицу измерения и я смогу измерить ничтожность и бесконечность. А компьютер мне в х... не упёрся. Мне штангенциркуля хватит.
И ещё. Учу пользоваться документацией
Искренне Ваш ﺗﺘﺮ
Вернуться к началу
Посмотреть профиль Отправить личное сообщение ICQ Number
zztatarin



Репутация: +34    

Зарегистрирован: 04.08.2006
Сообщения: 4260

СообщениеДобавлено: Вс Ноя 09, 2008 03:38
Каждые десять минут чего-нибудь делать.
Ответить с цитатой

Вот код, если автор разрешит, разберу по строчкам.
Код:
(* Good luck! e_s_m©2001 :) *)


property from_folder_path : ""
property to_folder_path : ""
property _timeout : 10 -- with interval 10*60seconds = 10 minutes

on idle
   --folder, from which copy files
   try
      tell application "Finder" to ¬
         set all_OK to exists folder from_folder_path
   on error
      set all_OK to false
   end try
   if not all_OK then ¬
      set from_folder_path to ¬
         choose folder with prompt "Show folder, from which I will be copying…"
   --folder, to one copying files
   try
      tell application "Finder" to ¬
         set all_OK to exists folder to_folder_path
   on error
      set all_OK to false
   end try
   if not all_OK then ¬
      set to_folder_path to ¬
         choose folder with prompt "Show folder, where I will be copying…"
   
   -- get files list in from_folder
   try
      tell application "Finder" to ¬
         set files_need_to_copy to files of folder from_folder_path as alias list
   on error -- if only one file
      tell application "Finder" to ¬
         set files_need_to_copy to 1st file of folder from_folder_path as alias
      set files_need_to_copy to files_need_to_copy as list
   end try
   
   set count_incoming_files to count files_need_to_copy
   try
      if count_incoming_files = 0 then ¬
         error -- no new files => simple exit idle
      activate me
      display dialog (count_incoming_files as string) & ¬
         " new file(s) are in my folder." & return & "Start copying?" with icon note giving up after 3
   on error
      return _timeout * 60
   end try
   
   --moving files
   repeat with i from 1 to count_incoming_files
      set file_i to item i of files_need_to_copy
      try
         tell application "Finder" to ¬
            copy file file_i to folder to_folder_path
         --tell application "Finder" to delete file file_i
      end try
   end repeat
   
   return _timeout * 60
end idle


_________________
Дайте мне единицу измерения и я смогу измерить ничтожность и бесконечность. А компьютер мне в х... не упёрся. Мне штангенциркуля хватит.
И ещё. Учу пользоваться документацией
Искренне Ваш ﺗﺘﺮ
Вернуться к началу
Посмотреть профиль Отправить личное сообщение ICQ Number
zztatarin



Репутация: +34    

Зарегистрирован: 04.08.2006
Сообщения: 4260

СообщениеДобавлено: Ср Ноя 12, 2008 23:51
Ответить с цитатой

Код:
property from_folder_path : ""
property to_folder_path : ""
property _timeout : 10 -- with interval 10*60seconds = 10 minutes
Начальная инициализация переменных

Конструкция типа
Код:
on idle

будет выполнять код, который Вы поместите сюда, между on idle и end idle
Код:
  return _timeout * 60
end idle
при бездействии скрипта _timeout * 60 секунд.

NOTE! Строка return _timeout * 60 обязательна! В противном случае конструкция вернет последнюю использованую переменную, значение которой заранее неизвестно, что приведет к непредсказуемому поведению скрипта.

_________________
Дайте мне единицу измерения и я смогу измерить ничтожность и бесконечность. А компьютер мне в х... не упёрся. Мне штангенциркуля хватит.
И ещё. Учу пользоваться документацией
Искренне Ваш ﺗﺘﺮ


Последний раз редактировалось: zztatarin (Чт Ноя 13, 2008 12:52), всего редактировалось 12 раз(а)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение ICQ Number
zztatarin



Репутация: +34    

Зарегистрирован: 04.08.2006
Сообщения: 4260

СообщениеДобавлено: Ср Ноя 12, 2008 23:52
Вытащить все адреса, на которые были отправлены письма.
Ответить с цитатой

Расписывать нечего, думайте сами.
Код:
set tPR to ""
tell application "Mail" to activate
tell application "System Events"
   
   tell process "Mail"
      click menu item "Previous Recipients" of menu 1 of menu bar item "Window" of menu bar 1
      repeat with i from 1 to number of rows of table 1 of scroll area 1 of window "Previous Recipients"
         set tPR to (tPR & i as text) & "." & tab
         -- set tPR to (tPR & value of text field 1 of row i of table 1 of scroll area 1 of window "Previous Recipients" as text) & tab
                 set tPR to (tPR & value of text field 2 of row i of table 1 of scroll area 1 of window "Previous Recipients" as text) & return
      end repeat
   end tell
end tell
set targetFile to ((path to desktop as text) & "MailRecents.txt")
set ff to open for access file targetFile with write permission
write tPR to ff
close access ff

_________________
Дайте мне единицу измерения и я смогу измерить ничтожность и бесконечность. А компьютер мне в х... не упёрся. Мне штангенциркуля хватит.
И ещё. Учу пользоваться документацией
Искренне Ваш ﺗﺘﺮ
Вернуться к началу
Посмотреть профиль Отправить личное сообщение ICQ Number
Показать сообщения:   
Начать новую тему   Ответить на тему Список форумов MacCentre.ru Форум » Программирование и Beta-тестирование Страница 3 из 8
На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8  След.

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы можете добавлять приложения в этом форуме
Вы можете скачивать файлы в этом форуме


Связь с администраторами

Powered by phpBB © 2001, 2005 phpBB Group