Skip to content

Instantly share code, notes, and snippets.

@vinjn
Last active December 13, 2015 23:29
Show Gist options
  • Save vinjn/4992484 to your computer and use it in GitHub Desktop.
Save vinjn/4992484 to your computer and use it in GitHub Desktop.
ppt翻页服务端
#!D:/Python26/python.exe
# -*- coding:cp936 -*-
import socket
import sys
import wx
import win32api
import win32ui
import win32gui
import SocketServer
import threading
class MyHandler(SocketServer.BaseRequestHandler):
def _my_callback(self,hwnd, extra):
caption=win32gui.GetWindowText(hwnd)
if caption.find('PowerPoint 幻灯片放映')!=-1:
#win32gui.SetWindowText(hwnd, 'Powered by - Mozilla Firefox')
windowTitle = win32gui.GetWindowText(hwnd)
print windowTitle
self.pptWindow = win32ui.FindWindow(None, windowTitle)
def ppt_sendkey(self, key):
if None == self.pptWindow:
print "找不到正在播放的幻灯片"
return False
#win32gui.SetForegroundWindow(self.pptWindow)
#如何激活PowerPoint的子窗口?
print "Ready to SendKeys!!!"
print self.pptWindow,type(self.pptWindow)
win32api.Sleep(500) # 给个延时,用于窗口置顶后程序反应的延迟
win32api.keybd_event(key, 0, )
def enumWindows(self):
win32gui.EnumWindows(self._my_callback, ())
def ppt_process(self,cmd):#解析远程命令:上翻和下翻
#print cmd
if -1 != cmd.find("DOWN"):
self.ppt_sendkey(0x4e) # 'N'
if -1 != cmd.find("UP"):
self.ppt_sendkey(0x50) # 'P'
if -1 != cmd.find("BLACK"):
self.ppt_sendkey(0x42) # 'B'
if -1 != cmd.find("WHITE"):
self.ppt_sendkey(0x57) # 'W'
if -1 != cmd.find("HOME"):
self.ppt_sendkey(0x24) # 'HOME'
if -1 != cmd.find("END"):
self.ppt_sendkey(0x23) # 'END'
if -1 != cmd.find("QUIT"):
self.ppt_sendkey(0x1B) # 'ESC'
def printsocket(self):
self.pptWindow = None
self.enumWindows()
def finish(self):
self.request.close()
def handle(self):
self.printsocket()
while 1:
dataReceived = None
dataReceived = self.request.recv(10)
print dataReceived
if not dataReceived:
self.printsocket()
break
else:
self.ppt_process(dataReceived)
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, "WiFi手机PPT翻页器", size = (300, 100))
self.panel = wx.Panel(self, -1)
self.sizer = wx.BoxSizer(wx.HORIZONTAL)
self.panel.SetSizer(self.sizer)
self.txt = wx.StaticText(self.panel, -1, "监听端口:")
self.inputText = wx.TextCtrl(self.panel, -1, "80")
self.button = wx.Button(self.panel, -1, "开始")
self.Bind(wx.EVT_BUTTON, self.OnStart, self.button)
self.button.SetDefault()
self.sizer.Add(self.txt, 0, wx.TOP|wx.LEFT, 10)
self.sizer.Add(self.inputText, 0, wx.TOP|wx.LEFT, 10)
self.sizer.Add(self.button, 0, wx.TOP|wx.LEFT, 10)
self.Centre()
def OnStart(self, event):
self.port = int(self.inputText.GetValue())
wx.MessageBox("可以播放PPT幻灯片了:)", "注意")
th = threading.Thread(target=self.ppt_receiver,args=())
th.start()
def ppt_receiver(self):#启动监听器,等待命令
myServer = SocketServer.ThreadingTCPServer(('0.0.0.0',self.port), MyHandler)
myServer.serve_forever()
if __name__ == "__main__":
myApp = wx.PySimpleApp()
MyFrame().Show()
myApp.MainLoop()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment