Форум сайта python.su
							
  0  
								
								Здравствуйте. Есть скрипт для OBS studio для переключения слайдов в презентации на кнопки PGUP\PGDN. Но при закрытии презентации и открытии другой при нажатии этих кнопок вылазит ошибка:
 Traceback (most recent call last):
   File “C
Program Files (x86)/obs-studio\ppt_slide.py”, line 99, in slideshow_view_next
     ssv = get_slideshow_view()
   File “C
Program Files (x86)/obs-studio\ppt_slide.py”, line 76, in get_slideshow_view
     ssw = powerpoint.SlideShowWindows
   File “C:\python36\lib\site-packages\win32com\client\dynamic.py”, line 516, in __getattr__
     ret = self._oleobj_.Invoke(retEntry.dispid,0,invoke_type,1)
 pywintypes.com_error: (-2147023174, ‘Сервер RPC недоступен.’, None, None)
пока не перезагрузиш OBS или не обновиш скрипт в программе. Установщик который сделал этот скрипт ничего не может исправить или не хочет. Возможно ли сделать так чтобы при каждом нажатии на кнопу обновлялся скрипт или еще какое нибудь решение?
сам скрипт такой:
import obspython as obs
# pip install pywin32
import win32com.client
powerpoint = None
hotkey_id_frst = None
hotkey_id_prev = None
hotkey_id_next = None
hotkey_id_last = None
HOTKEY_NAME_FRST = ‘powerpoint_slides.first’
HOTKEY_NAME_PREV = ‘powerpoint_slides.previous’
HOTKEY_NAME_NEXT = ‘powerpoint_slides.next’
HOTKEY_NAME_LAST = ‘powerpoint_slides.last’
HOTKEY_DESC_FRST = ‘Go to the first slide of active Powerpoint Presentation.’
HOTKEY_DESC_PREV = ‘Go to the previous slide of active Powerpoint Presentation.’
HOTKEY_DESC_NEXT = ‘Go to the next slide of active Powerpoint Presentation.’
HOTKEY_DESC_LAST = ‘Go to the last slide of active Powerpoint Presentation.’
# ————————————————————
# global functions for script plugins
def script_load(settings):
    global hotkey_id_frst
    global hotkey_id_prev
    global hotkey_id_next
    global hotkey_id_last
    hotkey_id_frst = register_and_load_hotkey(settings, HOTKEY_NAME_FRST, HOTKEY_DESC_FRST, slideshow_view_first)
    hotkey_id_prev = register_and_load_hotkey(settings, HOTKEY_NAME_PREV, HOTKEY_DESC_PREV, slideshow_view_previous)
    hotkey_id_next = register_and_load_hotkey(settings, HOTKEY_NAME_NEXT, HOTKEY_DESC_NEXT, slideshow_view_next)
    hotkey_id_last = register_and_load_hotkey(settings, HOTKEY_NAME_LAST, HOTKEY_DESC_LAST, slideshow_view_last)
def script_unload():
    obs.obs_hotkey_unregister(slideshow_view_first)
    obs.obs_hotkey_unregister(slideshow_view_previous)
    obs.obs_hotkey_unregister(slideshow_view_next)
    obs.obs_hotkey_unregister(slideshow_view_last)
def script_save(settings):
    save_hotkey(settings, HOTKEY_NAME_FRST, hotkey_id_frst)
    save_hotkey(settings, HOTKEY_NAME_PREV, hotkey_id_prev)
    save_hotkey(settings, HOTKEY_NAME_NEXT, hotkey_id_next)
    save_hotkey(settings, HOTKEY_NAME_LAST, hotkey_id_last)
def script_description():
    return ‘Navigate Powerpoint Slides.’
def script_defaults(settings):
    obs.obs_data_set_default_int(settings, ‘interval’, 10)
    obs.obs_data_set_default_string(settings, ‘source’, ‘')
def register_and_load_hotkey(settings, name, description, callback):
    hotkey_id = obs.obs_hotkey_register_frontend(name, description, callback)
    hotkey_save_array = obs.obs_data_get_array(settings, name)
    obs.obs_hotkey_load(hotkey_id, hotkey_save_array)
    obs.obs_data_array_release(hotkey_save_array)
    return hotkey_id
def save_hotkey(settings, name, hotkey_id):
    hotkey_save_array = obs.obs_hotkey_save(hotkey_id)
    obs.obs_data_set_array(settings, name, hotkey_save_array)
    obs.obs_data_array_release(hotkey_save_array)
def get_slideshow_view():
    global powerpoint
    if powerpoint is None:
        powerpoint = win32com.client.Dispatch(’Powerpoint.Application')
    if powerpoint is None:
        return
    ssw = powerpoint.SlideShowWindows
    if ssw.Count == 0:
        return
    # https://docs.microsoft.com/en-us/office/vba/api/powerpoint.slideshowwindow.view
    ssv = ssw.View
    return ssv
def slideshow_view_first(pressed):
    if pressed:
        ssv = get_slideshow_view()
        if ssv:
            ssv.First()
def slideshow_view_previous(pressed):
    if pressed:
        ssv = get_slideshow_view()
        if ssv:
            ssv.Previous()
def slideshow_view_next(pressed):
    if pressed:
        ssv = get_slideshow_view()
        if ssv:
            ssv.Next()
def slideshow_view_last(pressed):
    if pressed:
        ssv = get_slideshow_view()
        if ssv:
            ssv.Last()
Офлайн
							
  294  
								
								andrei_maleev ту надо понимать на какм этапе у вас запускается скрипт, на каком паверпоинт, к сожалению, с  OBS studio я не работал, как туда скрипты устанавливаются без понятия, но скорее всего после закрытия паверпоинта и открытия заново нужно снова делать 
powerpoint = win32com.client.Dispatch(’Powerpoint.Application') ... ssw = powerpoint.SlideShowWindows
[code python][/code]
Отредактировано PEHDOM (Сен. 11, 2021 10:35:17)
Офлайн