human/action_handler/ppt/ppt_controller.py

93 lines
2.8 KiB
Python
Raw Normal View History

2024-12-23 23:37:03 +00:00
#encoding = utf8
import time
import logging
import win32com.client
import win32api
import win32con
import pythoncom
logger = logging.getLogger(__name__)
VK_CODE = {
'spacebar': 0x20,
'down_arrow': 0x28,
}
class PPTController:
def __init__(self):
pythoncom.CoInitialize()
self.app = win32com.client.Dispatch("PowerPoint.Application")
self.app.Visible = True
def __del__(self):
self.app.Quit()
pythoncom.CoUninitialize()
def open(self, path):
self.app.Presentations.Open(path)
def full_screen(self):
if self.has_active_presentation():
self.app.ActivePresentation.SlideShowSettings.Run()
return self.get_active_presentation_slide_index()
def click(self):
win32api.keybd_event(VK_CODE['spacebar'], 0, 0, 0)
win32api.keybd_event(VK_CODE['spacebar'], 0 , win32con.KEYEVENTF_KEYUP, 0)
return self.get_active_presentation_slide_index()
def goto_slide(self, index):
if self.has_active_presentation():
try:
self.app.ActiveWindow.View.GotoSlide(index)
return self.app.ActiveWindow.View.Slide.SlideIndex
except Exception as e:
self.app.SlideShowWindows(1).View.GotoSlide(index)
return self.app.SlideShowWindows(1).View.CurrentShowPosition
def next_page(self):
if self.has_active_presentation():
count = self.get_active_presentation_slide_count()
index = self.get_active_presentation_slide_index()
return index if index >= count else self.goto_slide(index+1)
def pre_page(self):
if self.has_active_presentation():
index = self.get_active_presentation_slide_index()
return index if index <= 1 else self.goto_slide(index-1)
def get_active_presentation_slide_index(self):
if self.has_active_presentation():
try:
index = self.app.ActiveWindow.View.Slide.SlideIndex
return index
except Exception as e:
print(e)
index = self.app.SlideShowWindows(1).View.CurrentShowPosition
return index
def get_active_presentation_slide_count(self):
return self.app.ActivePresentation.Slides.Count
def get_presentation_count(self):
return self.app.Presentations.Count
def has_active_presentation(self):
return True if self.get_presentation_count() > 0 else False
2025-01-07 13:52:15 +00:00
#
# if __name__ == '__main__':
# ppt = PPTControler()
# ppt.open(r'D:\Project\LLV\pptAgnet\ppt_test.pptx')
# time.sleep(2)
# ppt.full_screen()
# time.sleep(2)
# ppt.goto_slide(6)
# time.sleep(2)
# ppt.next_page()
# time.sleep(2)
# ppt.pre_page()
# time.sleep(2)