Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 10, 2021 17:03:37

andrei_maleev
Зарегистрирован: 2021-09-10
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

как обновить скрипт

Здравствуйте. Есть скрипт для 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()

Офлайн

#2 Сен. 11, 2021 10:34:53

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

как обновить скрипт

andrei_maleev ту надо понимать на какм этапе у вас запускается скрипт, на каком паверпоинт, к сожалению, с OBS studio я не работал, как туда скрипты устанавливаются без понятия, но скорее всего после закрытия паверпоинта и открытия заново нужно снова делать

 powerpoint = win32com.client.Dispatch(Powerpoint.Application') 
...
ssw = powerpoint.SlideShowWindows

потому как старого обьекта уже нету и оно вам выводит соответвующее сообщение.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Сен. 11, 2021 10:35:17)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version