Есть ли какой-нибудь способ получить обратный звонок из PowerPoint при открытии любой презентации? (Powerpoint 2016 — версия для Mac)

#macos #vba #applescript #powerpoint #office-2016

#macos #vba #applescript #powerpoint #office-2016

Вопрос:

Мне нужно открыть приложение OS X при открытии любой презентации PowerPoint. Я получил обратный вызов VBA при открытии powerpoint (Auto_Open ()). Но мне нужен обратный звонок для каждой открытой презентации.

В Windows мы можем открывать каждую презентацию в отдельном приложении PowerPoint (экземпляр difference). На Mac приложение Powerpoint откроется один раз, и все презентации будут открываться в том же приложении PowerPoint (Powerpoint 2016- версия для Mac).

Мне нужен обратный вызов при открытии каждого файла презентации, и мне нужно выполнить фрагменты кода запуска в моем приложении cocoa.

Комментарии:

1. Возможно, вы сможете связать что-то вместе, используя fswatch (install with homebrew ) для рекурсивного просмотра пользовательских папок на предмет открытия файлов PDF-файлов. Или, может быть, что-то с или что-то подобное. sudo opensnoop -n PowerPoint

2. «В Windows мы можем открывать каждую презентацию в отдельном приложении PowerPoint (экземпляр difference)» На самом деле нет, вы не можете. Последние версии позволяют открывать несколько файлов в отдельных окнах, но есть только один экземпляр приложения. Возможно, ваше приложение может периодически запрашивать PPT для презентаций. Свойство Count, возможно, поддерживает массив / список имен каждой открытой презентации для проверки. В Windows PPT может перехватывать событие, возникающее при открытии презентаций, но, насколько я знаю, это не поддерживается в Mac PPT.

3. @SteveRindsberg: В Windows для меня это новая информация. Спасибо за обновление и в Mac PPT поддерживает только несколько событий. В приложении ppt есть одно событие. Событие PresentationOpen, я думаю, оно перезвонит при открытии каждой презентации. Но это событие не поддерживается в версии для Mac. Есть ли какой-либо другой способ определить, когда презентация открыта? Что-нибудь вроде мониторинга активности Mac или что-то в этом роде?

4. @SivaprasadKm Насколько я знаю, но я мало что знаю о Mac, кроме того, что происходит в VBA. Возможно, есть какой-то способ сделать это с помощью Applescript или тому подобного. Ах. Я вижу, что pbell привел вам возможный пример.

Ответ №1:

Идея возможного обхода заключается в циклической проверке открытых презентаций и сравнении ее с презентациями, уже открытыми ранее.

Во-первых, когда запускается этот скрипт, он проверяет, запущен ли PowerPoint (-> если нет, то завершите работу). Если запускается PP, скрипт записывает количество открытых презентаций.

Затем скрипт проходит цикл: в этом примере он повторяется 100 раз (только для моего теста, но он должен повторяться вечно!). Для каждой итерации он ищет список презентаций PP и сравнивает со списком ранее: если презентации нет в предыдущем списке, значит, она новая, просто откройте!

Сценарий также останавливается, когда вы выходите из PowerPoint, показывая предупреждение (попытка блокировки).

 tell application "System Events" to set PP_Running to exists (processes where name is "Microsoft PowerPoint")
if not PP_Running then return -- Power point is not launched !
tell application "Microsoft PowerPoint" to set Old_list to name of every presentation -- get initial list of open presentations

repeat with I from 1 to 100 -- for test, but it should be repeat with no limit

try
    tell application "Microsoft PowerPoint" to set New_list to name of every presentation
on error
    display alert "PowerPoint no longer launched"
    return -- quit the loop
end try
repeat with aDoc in New_list
    if not (Old_list contains aDoc) then -- new document has been opened !!
        set Old_list to New_list
        log "Open new document = " amp; aDoc -- do what ever you need to do !!
    end if
end repeat
delay 0.5
set I to I   1
end repeat
 

Проверено на El Capitain / PP 2011: но я думаю, что с PP 2011 по PP 2016 в «названии каждой презентации» ничего не изменилось.