Форум сайта python.su
Здравствуйте. Есть скрипт для OBS studio для переключения слайдов в презентации на кнопки PGUP\PGDN. Но при закрытии презентации и открытии другой при нажатии этих кнопок вылазит ошибка:
Traceback (most recent call last):
File “CProgram Files (x86)/obs-studio\ppt_slide.py”, line 99, in slideshow_view_next
ssv = get_slideshow_view()
File “CProgram 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()
Офлайн
andrei_maleev ту надо понимать на какм этапе у вас запускается скрипт, на каком паверпоинт, к сожалению, с OBS studio я не работал, как туда скрипты устанавливаются без понятия, но скорее всего после закрытия паверпоинта и открытия заново нужно снова делать
powerpoint = win32com.client.Dispatch(’Powerpoint.Application') ... ssw = powerpoint.SlideShowWindows
[code python][/code]
Отредактировано PEHDOM (Сен. 11, 2021 10:35:17)
Офлайн