Last active
December 13, 2015 23:29
-
-
Save vinjn/4992484 to your computer and use it in GitHub Desktop.
ppt翻页服务端
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!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