diff --git a/openlp/libraries/pptviewlib/README.TXT b/openlp/libraries/pptviewlib/README.TXT
deleted file mode 100644
index 43954d150..000000000
--- a/openlp/libraries/pptviewlib/README.TXT
+++ /dev/null
@@ -1,116 +0,0 @@
-
-PPTVIEWLIB - Control PowerPoint Viewer 2003/2007 (for openlp.org)
-Copyright (C) 2008 Jonathan Corwin (j@corwin.co.uk)
-
-This library wrappers the free Microsoft PowerPoint Viewer (2003/2007) program,
-allowing it to be more easily controlled from another program.
-
-The PowerPoint Viewer must already be installed on the destination machine, and is
-freely available at microsoft.com.
-
-The full Microsoft Office PowerPoint and PowerPoint Viewer 97 have a COM interface allowing
-automation. This ability was removed from the 2003+ viewer offerings.
-
-To developers: I am not a C/C++ or Win32 API programmer as you can probably tell.
-The code and API of this DLL could certainly do with some tidying up, and the
-error trapping, where it exists, is very basic. I'll happily accept patches!
-
-This library is covered by the GPL (http://www.gnu.org/licenses/)
-It is NOT covered by the LGPL, so can only be used in GPL compatable programs.
-(http://www.gnu.org/licenses/why-not-lgpl.html)
-
-This README.TXT must be distributed with the pptviewlib.dll
-
-This library has a limit of 50 PowerPoints which can be opened simultaneously.
-
-USAGE
------
-int OpenPPT(char *filename, HWND hParentWnd, RECT rect, char *previewpath);
-
- Opens the PowerPoint file, counts the number of slides, sizes and positions accordingly
- and creates preview images of each slide. Note PowerPoint Viewer only allows the
- slideshow to be resized whilst it is being loaded. It can be moved at any time however.
-
- The only way to count the number of slides is to step through the entire show. Therefore
- there will be a delay whilst opening large presentations for the first time.
- For pre XP/2003 systems, the slideshow will flicker as the screen snapshots are taken.
-
- filename: The PowerPoint file to be opened. Full path
- hParentWnd: The window which will become the parent of the slideshow window.
- Can be NULL.
- rect: The location/dimensions of the slideshow window.
- If all properties of this structure are zero, the dimensions of the hParentWnd
- are used.
- previewpath If specified, the prefix to use for snapshot images of each slide, in the
- form: previewpath + n + ".bmp", where n is the slide number.
- A file called previewpath + "info.txt" will also be created containing information
- about the PPT file, to speed up future openings of the unmodified file.
- Note it is up the calling program to directly access these images if they
- are required.
-
- RETURNS: An unique identifier to pass to other methods in this library.
- If < 0, then the PPT failed to open.
- If >=0, ClosePPT must be called when the PPT is no longer being used
- or when the calling program is closed to release resources/hooks.
-
-void ClosePPT(int id);
- Closes the presentation, releasing any resources and hooks.
-
- id: The value returned from OpenPPT.
-
-int GetCurrentSlide(int id);
- Returns the current slide number (from 1)
-
- id: The value returned from OpenPPT.
-
-int GetSlideCount(int id);
- Returns the total number of slides.
-
- id: The value returned from OpenPPT.
-
-void NextStep(int id);
- Advances one step (animation) through the slideshow.
-
- id: The value returned from OpenPPT.
-
-void PrevStep(int id);
- Goes backwards one step (animation) through the slideshow.
-
- id: The value returned from OpenPPT.
-
-void GotoSlide(int id, int slideno);
- Goes directly to a specific slide in the slideshow
-
- id: The value returned from OpenPPT.
- slideno: The number of the slide (from 1) to go directly to.
-
- If the slide has already been displayed, then the completed slide with animations performed
- will be shown. This is how the PowerPoint Viewer works so have no control over this.
-
-void RestartShow(int id);
- Restarts the show from the beginning. To reset animations, behind the scenes it
- has to travel to the end and step backwards though the entire show. Therefore
- for large presentations there might be a delay.
-
- id: The value returned from OpenPPT.
-
-void Blank(int id);
- Blanks the screen, colour black.
-
- id: The value returned from OpenPPT.
-
-void Unblank(int id)
- Unblanks the screen, restoring it to it's pre-blank state.
-
- id: The value returned from OpenPPT.
-
-void Stop(int id)
- Moves the slideshow off the screen. (There is no concept of stop show in the PowerPoint Viewer)
-
- id: The value returned from OpenPPT.
-
-void Resume(int id)
- Moves the slideshow display back onto the screen following a Stop()
-
- id: The value returned from OpenPPT.
-
diff --git a/openlp/libraries/pptviewlib/ppttest.py b/openlp/libraries/pptviewlib/ppttest.py
deleted file mode 100644
index 84f6fb527..000000000
--- a/openlp/libraries/pptviewlib/ppttest.py
+++ /dev/null
@@ -1,146 +0,0 @@
-import sys
-from PyQt4 import QtGui, QtCore
-from ctypes import *
-from ctypes.wintypes import RECT
-
-class PPTViewer(QtGui.QWidget):
- def __init__(self, parent=None):
- QtGui.QWidget.__init__(self, parent)
- self.pptid = -1
- self.setWindowTitle('PowerPoint Viewer Test')
-
- PPTLabel = QtGui.QLabel('Open PowerPoint file')
- slideLabel = QtGui.QLabel('Go to slide #')
- self.PPTEdit = QtGui.QLineEdit()
- self.slideEdit = QtGui.QLineEdit()
- self.total = QtGui.QLabel()
- PPTBtn = QtGui.QPushButton("Open")
- PPTDlgBtn = QtGui.QPushButton("...")
- slideBtn = QtGui.QPushButton("Go")
- prev = QtGui.QPushButton("Prev")
- next = QtGui.QPushButton("Next")
- blank = QtGui.QPushButton("Blank")
- unblank = QtGui.QPushButton("Unblank")
- restart = QtGui.QPushButton("Restart")
- close = QtGui.QPushButton("Close")
- resume = QtGui.QPushButton("Resume")
- stop = QtGui.QPushButton("Stop")
- pptwindow = QtGui.QWidget()
-
- grid = QtGui.QGridLayout()
- grid.addWidget(PPTLabel, 0, 0)
- grid.addWidget(self.PPTEdit, 0, 1)
- grid.addWidget(PPTDlgBtn, 0, 2)
- grid.addWidget(PPTBtn, 0, 3)
- grid.addWidget(slideLabel, 1, 0)
- grid.addWidget(self.slideEdit, 1, 1)
- grid.addWidget(slideBtn, 1, 3)
- grid.addWidget(prev, 2, 0)
- grid.addWidget(next, 2, 1)
- grid.addWidget(blank, 3, 0)
- grid.addWidget(unblank, 3, 1)
- grid.addWidget(restart, 4, 0)
- grid.addWidget(close, 4, 1)
- grid.addWidget(stop, 5, 0)
- grid.addWidget(resume, 5, 1)
- grid.addWidget(pptwindow, 6, 0, 10, 3)
- self.connect(PPTBtn, QtCore.SIGNAL('clicked()'), self.OpenClick)
- self.connect(PPTDlgBtn, QtCore.SIGNAL('clicked()'), self.OpenDialog)
- self.connect(slideBtn, QtCore.SIGNAL('clicked()'), self.GotoClick)
- self.connect(prev, QtCore.SIGNAL('clicked()'), self.PrevClick)
- self.connect(next, QtCore.SIGNAL('clicked()'), self.NextClick)
- self.connect(blank, QtCore.SIGNAL('clicked()'), self.BlankClick)
- self.connect(unblank, QtCore.SIGNAL('clicked()'), self.UnblankClick)
- self.connect(restart, QtCore.SIGNAL('clicked()'), self.RestartClick)
- self.connect(close, QtCore.SIGNAL('clicked()'), self.CloseClick)
- self.connect(stop, QtCore.SIGNAL('clicked()'), self.StopClick)
- self.connect(resume, QtCore.SIGNAL('clicked()'), self.ResumeClick)
-
- self.setLayout(grid)
-
- self.resize(300, 150)
-
- def PrevClick(self):
- if self.pptid<0: return
- pptdll.PrevStep(self.pptid)
- self.UpdateCurrSlide()
- app.processEvents()
-
- def NextClick(self):
- if(self.pptid<0): return
- pptdll.NextStep(self.pptid)
- self.UpdateCurrSlide()
- app.processEvents()
-
- def BlankClick(self):
- if(self.pptid<0): return
- pptdll.Blank(self.pptid)
- app.processEvents()
-
- def UnblankClick(self):
- if(self.pptid<0): return
- pptdll.Unblank(self.pptid)
- app.processEvents()
-
- def RestartClick(self):
- if(self.pptid<0): return
- pptdll.RestartShow(self.pptid)
- self.UpdateCurrSlide()
- app.processEvents()
-
- def StopClick(self):
- if(self.pptid<0): return
- pptdll.Stop(self.pptid)
- app.processEvents()
-
- def ResumeClick(self):
- if(self.pptid<0): return
- pptdll.Resume(self.pptid)
- app.processEvents()
-
- def CloseClick(self):
- if(self.pptid<0): return
- pptdll.ClosePPT(self.pptid)
- self.pptid = -1
- app.processEvents()
-
- def OpenClick(self):
- if(self.pptid>=0):
- self.CloseClick()
- rect = RECT(100,100,900,700)
- filename = str(self.PPTEdit.text())
- print filename
- self.pptid = pptdll.OpenPPT(filename, None, rect, "c:\\temp\\slide")
- print "id: " + str(self.pptid)
- slides = pptdll.GetSlideCount(self.pptid)
- print "slidecount: " + str(slides)
- self.total.setNum(pptdll.GetSlideCount(self.pptid))
- self.UpdateCurrSlide()
- app.processEvents()
-
- def UpdateCurrSlide(self):
- if(self.pptid<0): return
- slide = str(pptdll.GetCurrentSlide(self.pptid))
- print "currslide: " + slide
- self.slideEdit.setText(slide)
- app.processEvents()
-
- def GotoClick(self):
- if(self.pptid<0): return
- print self.slideEdit.text()
- pptdll.GotoSlide(self.pptid, int(self.slideEdit.text()))
- self.UpdateCurrSlide()
- app.processEvents()
-
- def OpenDialog(self):
- self.PPTEdit.setText(QtGui.QFileDialog.getOpenFileName(self, 'Open file'))
-
-if __name__ == '__main__':
- pptdll = cdll.LoadLibrary(r"C:\Documents and Settings\jonathan\My Documents\Personal\openlp\openlp-2\trunk\openlp\libraries\pptviewlib\pptviewlib.dll")
- pptdll.SetDebug(1)
- print "Begin..."
- app = QtGui.QApplication(sys.argv)
- qb = PPTViewer()
- qb.show()
- sys.exit(app.exec_())
-
diff --git a/openlp/libraries/pptviewlib/pptviewlib.cpp b/openlp/libraries/pptviewlib/pptviewlib.cpp
deleted file mode 100644
index 5e2f81d72..000000000
--- a/openlp/libraries/pptviewlib/pptviewlib.cpp
+++ /dev/null
@@ -1,738 +0,0 @@
-/*
- * PPTVIEWLIB - Control PowerPoint Viewer 2003/2007 (for openlp.org)
- * Copyright (C) 2008 Jonathan Corwin
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-
-#define WIN32_LEAN_AND_MEAN
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include "pptviewlib.h"
-
-// Because of the callbacks used by SetWindowsHookEx, the memory used needs to be
-// sharable across processes (the callbacks are done from a different process)
-// Therefore use data_seg with RWS memory.
-//
-// See http://msdn.microsoft.com/en-us/library/aa366551(VS.85).aspx for alternative
-// method of holding memory, removing fixed limits which would allow dynamic number
-// of items, rather than a fixed number. Use a Local\ mapping, since global has UAC
-// issues in Vista.
-#pragma data_seg(".PPTVIEWLIB")
-PPTVIEWOBJ pptviewobj[MAX_PPTOBJS] = {NULL};
-HHOOK globalhook = NULL;
-BOOL debug = FALSE;
-#pragma data_seg()
-#pragma comment(linker, "/SECTION:.PPTVIEWLIB,RWS")
-
-#define DEBUG(...) if(debug) printf(__VA_ARGS__)
-
-
-HINSTANCE hInstance = NULL;
-
-BOOL APIENTRY DllMain( HMODULE hModule,
- DWORD ul_reason_for_call,
- LPVOID lpReserved
- )
-{
- hInstance = (HINSTANCE)hModule;
- switch (ul_reason_for_call)
- {
- case DLL_PROCESS_ATTACH:
- case DLL_THREAD_ATTACH:
- case DLL_THREAD_DETACH:
- break;
- case DLL_PROCESS_DETACH:
- // Clean up... hopefully there is only the one process attached?
- // We'll find out soon enough during tests!
- for(int i = 0; i.bmp" will be appended to complete the path. E.g. "c:\temp\slide" would
-// create "c:\temp\slide1.bmp" slide2.bmp, slide3.bmp etc.
-// It will also create a *info.txt containing information about the ppt
-DllExport int OpenPPT(char *filename, HWND hParentWnd, RECT rect, char *previewpath)
-{
- STARTUPINFO si;
- PROCESS_INFORMATION pi;
- char cmdline[MAX_PATH * 2];
- int id;
-
- DEBUG("OpenPPT start: %s\n", filename);
- if(GetPPTViewerPath(cmdline, sizeof(cmdline))==FALSE)
- {
- DEBUG("OpenPPT: GetPPTViewerPath failed\n");
- return -1;
- }
- id = -1;
- for(int i = 0; ibottom-wndrect->top;
- pptviewobj[id].rect.right = wndrect->right-wndrect->left;
- }
- else
- {
- pptviewobj[id].rect.top = rect.top;
- pptviewobj[id].rect.left = rect.left;
- pptviewobj[id].rect.bottom = rect.bottom;
- pptviewobj[id].rect.right = rect.right;
- }
- strcat_s(cmdline, MAX_PATH * 2, "/S \"");
- strcat_s(cmdline, MAX_PATH * 2, filename);
- strcat_s(cmdline, MAX_PATH * 2, "\"");
- memset(&si, 0, sizeof(si));
- memset(&pi, 0, sizeof(pi));
- BOOL gotinfo = GetPPTInfo(id);
- if(!CreateProcess(NULL, cmdline, NULL, NULL, FALSE, 0, 0, NULL, &si, &pi))
- {
- DEBUG("OpenPPT: CreateProcess failed\n");
- ClosePPT(id);
- return -1;
- }
-
- pptviewobj[id].state = PPT_STARTED;
- pptviewobj[id].dwProcessId = pi.dwProcessId;
- pptviewobj[id].dwThreadId = pi.dwThreadId;
- pptviewobj[id].hThread = pi.hThread;
- pptviewobj[id].hProcess = pi.hProcess;
- /*
- * I'd really like to just hook on the new threadid. However this always gives
- * error 87. Perhaps I'm hooking to soon? No idea... however can't wait
- * since I need to ensure I pick up the WM_CREATE as this is the only
- * time the window can be resized in such away the content scales correctly
- *
- * hook = SetWindowsHookEx(WH_CBT,CbtProc,hInstance,pi.dwThreadId);
- */
- if(globalhook!=NULL)
- UnhookWindowsHookEx(globalhook);
- globalhook = SetWindowsHookEx(WH_CBT,CbtProc,hInstance,NULL);
- if(globalhook==0)
- {
- DEBUG("OpenPPT: SetWindowsHookEx failed\n");
- ClosePPT(id);
- return -1;
- }
- while(pptviewobj[id].state==PPT_STARTED)
- Sleep(10);
- if(gotinfo)
- {
- DEBUG("OpenPPT: Info loaded, no refresh\n");
- pptviewobj[id].state = PPT_LOADED;
- Resume(id);
- }
- else
- {
- //Resume(id);
- DEBUG("OpenPPT: Get info\n");
- pptviewobj[id].steps = 0;
- int steps = 0;
- while(pptviewobj[id].state!=PPT_LOADED&&pptviewobj[id].state!=PPT_CLOSED)
- {
- if(steps<=pptviewobj[id].steps)
- {
- Sleep(100);
- DEBUG("OpenPPT: Step %d/%d\n",steps,pptviewobj[id].steps);
- steps++;
- NextStep(id);
- }
- Sleep(10);
- }
- DEBUG("OpenPPT: Steps %d, first slide steps %d\n",pptviewobj[id].steps,pptviewobj[id].firstSlideSteps);
- SavePPTInfo(id);
- RestartShow(id);
- }
- if(pptviewobj[id].mhook!=NULL)
- UnhookWindowsHookEx(pptviewobj[id].mhook);
- pptviewobj[id].mhook = NULL;
- DEBUG("OpenPPT: Exit: id=%i\n", id);
- return id;
-}
-// Load information about the ppt from an info.txt file.
-// Format:
-// version
-// filedate
-// filesize
-// slidecount
-// first slide steps
-BOOL GetPPTInfo(int id)
-{
- struct _stat filestats;
- char info[MAX_PATH];
- FILE* pFile;
- char buf[100];
-
- DEBUG("GetPPTInfo: start\n");
- if(_stat(pptviewobj[id].filename, &filestats)!=0)
- return FALSE;
- sprintf_s(info, MAX_PATH, "%sinfo.txt", pptviewobj[id].previewpath);
- int err = fopen_s(&pFile, info, "r");
- if(err!=0)
- {
- DEBUG("GetPPTInfo: file open failed - %d\n", err);
- return FALSE;
- }
- fgets(buf, 100, pFile); // version == 1
- fgets(buf, 100, pFile);
- if(filestats.st_mtime!=atoi(buf))
- {
- fclose (pFile);
- return FALSE;
- }
- fgets(buf, 100, pFile);
- if(filestats.st_size!=atoi(buf))
- {
- fclose (pFile);
- return FALSE;
- }
- fgets(buf, 100, pFile); // slidecount
- int slidecount = atoi(buf);
- fgets(buf, 100, pFile); // first slide steps
- int firstslidesteps = atoi(buf);
- // check all the preview images still exist
- for(int i = 1; i<=slidecount; i++)
- {
- sprintf_s(info, MAX_PATH, "%s%i.bmp", pptviewobj[id].previewpath, i);
- if(GetFileAttributes(info)==INVALID_FILE_ATTRIBUTES)
- return FALSE;
- }
- fclose(pFile);
- pptviewobj[id].slideCount = slidecount;
- pptviewobj[id].firstSlideSteps = firstslidesteps;
- DEBUG("GetPPTInfo: exit ok\n");
- return TRUE;
-}
-
-BOOL SavePPTInfo(int id)
-{
- struct _stat filestats;
- char info[MAX_PATH];
- FILE* pFile;
-
- DEBUG("SavePPTInfo: start\n");
- if(_stat(pptviewobj[id].filename, &filestats)!=0)
- {
- DEBUG("SavePPTInfo: stat of %s failed\n", pptviewobj[id].filename);
- return FALSE;
- }
- sprintf_s(info, MAX_PATH, "%sinfo.txt", pptviewobj[id].previewpath);
- int err = fopen_s(&pFile, info, "w");
- if(err!=0)
- {
- DEBUG("SavePPTInfo: fopen of %s failed%i\n", info, err);
- return FALSE;
- }
- fprintf(pFile, "1\n");
- fprintf(pFile, "%u\n", filestats.st_mtime);
- fprintf(pFile, "%u\n", filestats.st_size);
- fprintf(pFile, "%u\n", pptviewobj[id].slideCount);
- fprintf(pFile, "%u\n", pptviewobj[id].firstSlideSteps);
- fclose (pFile);
- DEBUG("SavePPTInfo: exit ok\n");
- return TRUE;
-}
-
-// Get the path of the PowerPoint viewer from the registry
-BOOL GetPPTViewerPath(char *pptviewerpath, int strsize)
-{
- HKEY hkey;
- DWORD dwtype, dwsize;
- LRESULT lresult;
-
- DEBUG("GetPPTViewerPath: start\n");
- if(RegOpenKeyEx(HKEY_CLASSES_ROOT, "Applications\\PPTVIEW.EXE\\shell\\open\\command", 0, KEY_READ, &hkey)!=ERROR_SUCCESS)
- return FALSE;
- dwtype = REG_SZ;
- dwsize = (DWORD)strsize;
- lresult = RegQueryValueEx(hkey, NULL, NULL, &dwtype, (LPBYTE)pptviewerpath, &dwsize );
- RegCloseKey(hkey);
- if(lresult!=ERROR_SUCCESS)
- return FALSE;
- pptviewerpath[strlen(pptviewerpath)-4] = '\0'; // remove "%1" from end of key value
- DEBUG("GetPPTViewerPath: exit ok\n");
- return TRUE;
-}
-
-// Unhook the Windows hook
-void Unhook(int id)
-{
- DEBUG("Unhook: start\n");
- if(pptviewobj[id].hook!=NULL)
- UnhookWindowsHookEx(pptviewobj[id].hook);
- if(pptviewobj[id].mhook!=NULL)
- UnhookWindowsHookEx(pptviewobj[id].mhook);
- pptviewobj[id].hook = NULL;
- pptviewobj[id].mhook = NULL;
- DEBUG("Unhook: exit ok\n");
-}
-
-// Close the PowerPoint viewer, release resources
-DllExport void ClosePPT(int id)
-{
- DEBUG("ClosePPT: start\n");
- pptviewobj[id].state = PPT_CLOSED;
- Unhook(id);
- if(pptviewobj[id].hWnd==0)
- TerminateThread(pptviewobj[id].hWnd, 0);
- else
- PostMessage(pptviewobj[id].hWnd, WM_CLOSE, 0, 0);
- CloseHandle(pptviewobj[id].hThread);
- CloseHandle(pptviewobj[id].hProcess);
- memset(&pptviewobj[id], 0, sizeof(PPTVIEWOBJ));
- DEBUG("ClosePPT: exit ok\n");
- return;
-}
-// Moves the show back onto the display
-DllExport void Resume(int id)
-{
- DEBUG("Resume:\n");
- MoveWindow(pptviewobj[id].hWnd, pptviewobj[id].rect.left, pptviewobj[id].rect.top,
- pptviewobj[id].rect.right - pptviewobj[id].rect.left,
- pptviewobj[id].rect.bottom - pptviewobj[id].rect.top, TRUE);
- Unblank(id);
-}
-// Moves the show off the screen so it can't be seen
-DllExport void Stop(int id)
-{
- DEBUG("Stop:\n");
- MoveWindow(pptviewobj[id].hWnd, -32000, -32000,
- pptviewobj[id].rect.right - pptviewobj[id].rect.left,
- pptviewobj[id].rect.bottom - pptviewobj[id].rect.top, TRUE);
-}
-
-// Return the total number of slides
-DllExport int GetSlideCount(int id)
-{
- DEBUG("GetSlideCount:\n");
- if(pptviewobj[id].state==0)
- return -1;
- else
- return pptviewobj[id].slideCount;
-}
-
-// Return the number of the slide currently viewing
-DllExport int GetCurrentSlide(int id)
-{
- DEBUG("GetCurrentSlide:\n");
- if(pptviewobj[id].state==0)
- return -1;
- else
- return pptviewobj[id].currentSlide;
-}
-
-// Take a step forwards through the show
-DllExport void NextStep(int id)
-{
- DEBUG("NextStep:\n");
- if(pptviewobj[id].currentSlide>pptviewobj[id].slideCount)
- return;
- PostMessage(pptviewobj[id].hWnd2, WM_MOUSEWHEEL, MAKEWPARAM(0, -WHEEL_DELTA), 0);
-}
-
-// Take a step backwards through the show
-DllExport void PrevStep(int id)
-{
- DEBUG("PrevStep:\n");
- PostMessage(pptviewobj[id].hWnd2, WM_MOUSEWHEEL, MAKEWPARAM(0, WHEEL_DELTA), 0);
-}
-
-// Blank the show (black screen)
-DllExport void Blank(int id)
-{
- // B just toggles blank on/off. However pressing any key unblanks.
- // So send random unmapped letter first (say 'A'), then we can
- // better guarantee B will blank instead of trying to guess
- // whether it was already blank or not.
- DEBUG("Blank:\n");
- HWND h1 = GetForegroundWindow();
- HWND h2 = GetFocus();
- SetForegroundWindow(pptviewobj[id].hWnd);
- SetFocus(pptviewobj[id].hWnd);
- Sleep(50); // slight pause, otherwise event triggering this call may grab focus back!
- keybd_event((int)'A', 0, 0, 0);
- keybd_event((int)'A', 0, KEYEVENTF_KEYUP, 0);
- keybd_event((int)'B', 0, 0, 0);
- keybd_event((int)'B', 0, KEYEVENTF_KEYUP, 0);
- SetForegroundWindow(h1);
- SetFocus(h2);
- //PostMessage(pptviewobj[id].hWnd2, WM_KEYDOWN, 'B', 0x00300001);
- //PostMessage(pptviewobj[id].hWnd2, WM_CHAR, 'b', 0x00300001);
- //PostMessage(pptviewobj[id].hWnd2, WM_KEYUP, 'B', 0xC0300001);
-}
-// Unblank the show
-DllExport void Unblank(int id)
-{
- DEBUG("Unblank:\n");
- // Pressing any key resumes.
- // For some reason SendMessage works for unblanking, but not blanking.
-// SendMessage(pptviewobj[id].hWnd2, WM_KEYDOWN, 'A', 0);
- SendMessage(pptviewobj[id].hWnd2, WM_CHAR, 'A', 0);
-// SendMessage(pptviewobj[id].hWnd2, WM_KEYUP, 'A', 0);
-// HWND h1 = GetForegroundWindow();
-// HWND h2 = GetFocus();
-// Sleep(50); // slight pause, otherwise event triggering this call may grab focus back!
-// SetForegroundWindow(pptviewobj[id].hWnd);
-// SetFocus(pptviewobj[id].hWnd);
-// keybd_event((int)'A', 0, 0, 0);
-// SetForegroundWindow(h1);
-// SetFocus(h2);
-}
-
-// Go directly to a slide
-DllExport void GotoSlide(int id, int slideno)
-{
- DEBUG("GotoSlide %i:\n", slideno);
- // Did try WM_KEYDOWN/WM_CHAR/WM_KEYUP with SendMessage but didn't work
- // perhaps I was sending to the wrong window? No idea.
- // Anyway fall back to keybd_event, which is OK as long we makesure
- // the slideshow has focus first
- char ch[10];
-
- if(slideno<0) return;
- _itoa_s(slideno, ch, 10, 10);
- HWND h1 = GetForegroundWindow();
- HWND h2 = GetFocus();
- SetForegroundWindow(pptviewobj[id].hWnd);
- SetFocus(pptviewobj[id].hWnd);
- Sleep(50); // slight pause, otherwise event triggering this call may grab focus back!
- for(int i=0;i<10;i++)
- {
- if(ch[i]=='\0') break;
- keybd_event((BYTE)ch[i], 0, 0, 0);
- keybd_event((BYTE)ch[i], 0, KEYEVENTF_KEYUP, 0);
- }
- keybd_event(VK_RETURN, 0, 0, 0);
- keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0);
- SetForegroundWindow(h1);
- SetFocus(h2);
-
- //for(int i=0;i<10;i++)
- //{
- // if(ch[i]=='\0') break;
- // SendMessage(pptviewobj[id].hWnd2, WM_KEYDOWN, ch[i], 0);
- // SendMessage(pptviewobj[id].hWnd2, WM_CHAR, ch[i], 0);
- // SendMessage(pptviewobj[id].hWnd2, WM_KEYUP, ch[i], 0);
- //}
- //SendMessage(pptviewobj[id].hWnd2, WM_KEYDOWN, VK_RETURN, 0);
- //SendMessage(pptviewobj[id].hWnd2, WM_CHAR, VK_RETURN, 0);
- //SendMessage(pptviewobj[id].hWnd2, WM_KEYUP, VK_RETURN, 0);
- //keybd_event(VK_RETURN, 0, 0, 0);
-}
-
-// Restart the show from the beginning
-DllExport void RestartShow(int id)
-{
- // If we just go direct to slide one, then it remembers that all other slides have
- // been animated, so ends up just showing the completed slides of those slides that
- // have been animated next time we advance.
- // Only way I've found to get around this is to step backwards all the way through.
- // Lets move the window out of the way first so the audience doesn't see this.
- DEBUG("RestartShow:\n");
- Stop(id);
- GotoSlide(id, pptviewobj[id].slideCount);
- while(pptviewobj[id].currentSlide>1)
- {
- PrevStep(id);
- Sleep(10);
- }
- for(int i=0;i<=pptviewobj[id].firstSlideSteps;i++)
- {
- PrevStep(id);
- Sleep(10);
- }
- Resume(id);
-}
-
-// This hook is started with the PPTVIEW.EXE process and waits for the
-// WM_CREATEWND message. At this point (and only this point) can the
-// window be resized to the correct size.
-// Release the hook as soon as we're complete to free up resources
-LRESULT CALLBACK CbtProc(int nCode, WPARAM wParam, LPARAM lParam)
-{
- HHOOK hook = globalhook;
- if(nCode==HCBT_CREATEWND)
- {
- char csClassName[16];
- HWND hCurrWnd = (HWND)wParam;
- DWORD retProcId = NULL;
- GetClassName(hCurrWnd, csClassName, sizeof(csClassName));
- if((strcmp(csClassName, "paneClassDC")==0)
- ||(strcmp(csClassName, "screenClass")==0))
- {
- int id=-1;
- DWORD windowthread = GetWindowThreadProcessId(hCurrWnd,NULL);
- for(int i=0; i=0)
- {
- if(strcmp(csClassName, "paneClassDC")==0)
- pptviewobj[id].hWnd2=hCurrWnd;
- else
- {
- pptviewobj[id].hWnd=hCurrWnd;
- CBT_CREATEWND* cw = (CBT_CREATEWND*)lParam;
- if(pptviewobj[id].hParentWnd!=NULL)
- cw->lpcs->hwndParent = pptviewobj[id].hParentWnd;
- cw->lpcs->cy=(pptviewobj[id].rect.bottom-pptviewobj[id].rect.top);
- cw->lpcs->cx=(pptviewobj[id].rect.right-pptviewobj[id].rect.left);
- cw->lpcs->y=-32000;
- cw->lpcs->x=-32000;
- }
- if((pptviewobj[id].hWnd!=NULL)&&(pptviewobj[id].hWnd2!=NULL))
- {
- UnhookWindowsHookEx(globalhook);
- globalhook=NULL;
- pptviewobj[id].hook = SetWindowsHookEx(WH_CALLWNDPROC,CwpProc,hInstance,pptviewobj[id].dwThreadId);
- pptviewobj[id].mhook = SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,hInstance,pptviewobj[id].dwThreadId);
- Sleep(10);
- pptviewobj[id].state = PPT_OPENED;
- }
- }
- }
- }
- return CallNextHookEx(hook,nCode,wParam,lParam);
-}
-
-// This hook exists whilst the slideshow is loading but only listens on the
-// slideshows thread. It listens out for mousewheel events
-LRESULT CALLBACK GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam)
-{
- HHOOK hook = NULL;
- MSG *pMSG = (MSG *)lParam;
- DWORD windowthread = GetWindowThreadProcessId(pMSG->hwnd,NULL);
- int id=-1;
- for(int i=0; i=0&&nCode==HC_ACTION&&wParam==PM_REMOVE&&pMSG->message==WM_MOUSEWHEEL)
- {
- if(pptviewobj[id].state!=PPT_LOADED)
- {
- if(pptviewobj[id].currentSlide==1)
- pptviewobj[id].firstSlideSteps++;
- pptviewobj[id].steps++;
- }
- }
- return CallNextHookEx(hook, nCode, wParam, lParam);
-}
-// This hook exists whilst the slideshow is running but only listens on the
-// slideshows thread. It listens out for slide changes, message WM_USER+22.
-LRESULT CALLBACK CwpProc(int nCode, WPARAM wParam, LPARAM lParam){
- CWPSTRUCT *cwp;
- cwp = (CWPSTRUCT *)lParam;
- HHOOK hook = NULL;
- char filename[MAX_PATH];
-
- DWORD windowthread = GetWindowThreadProcessId(cwp->hwnd,NULL);
- int id=-1;
- for(int i=0; i=0)&&(nCode==HC_ACTION))
- {
- if(cwp->message==WM_USER+22)
- {
- if(pptviewobj[id].state != PPT_LOADED)
- {
- if((pptviewobj[id].currentSlide>0)
- && (pptviewobj[id].previewpath!=NULL&&strlen(pptviewobj[id].previewpath)>0))
- {
- sprintf_s(filename, MAX_PATH, "%s%i.bmp", pptviewobj[id].previewpath, pptviewobj[id].currentSlide);
- CaptureAndSaveWindow(cwp->hwnd, filename);
- }
- }
- if(cwp->wParam==0)
- {
- if(pptviewobj[id].currentSlide>0)
- {
- pptviewobj[id].state = PPT_LOADED;
- pptviewobj[id].currentSlide = pptviewobj[id].slideCount+1;
- }
- }
- else
- {
- pptviewobj[id].currentSlide = cwp->wParam - 255;
- if(pptviewobj[id].currentSlide>pptviewobj[id].slideCount)
- pptviewobj[id].slideCount = pptviewobj[id].currentSlide;
- }
- }
- if((pptviewobj[id].state != PPT_CLOSED)&&(cwp->message==WM_CLOSE||cwp->message==WM_QUIT))
- ClosePPT(id);
- }
- return CallNextHookEx(hook,nCode,wParam,lParam);
-}
-
-VOID CaptureAndSaveWindow(HWND hWnd, CHAR* filename)
-{
- HBITMAP hBmp;
- if ((hBmp = CaptureWindow(hWnd)) == NULL)
- return;
-
- RECT client;
- GetClientRect (hWnd, &client);
- UINT uiBytesPerRow = 3 * client.right; // RGB takes 24 bits
- UINT uiRemainderForPadding;
-
- if ((uiRemainderForPadding = uiBytesPerRow % sizeof (DWORD)) > 0)
- uiBytesPerRow += (sizeof (DWORD) - uiRemainderForPadding);
-
- UINT uiBytesPerAllRows = uiBytesPerRow * client.bottom;
- PBYTE pDataBits;
-
- if ((pDataBits = new BYTE [uiBytesPerAllRows]) != NULL)
- {
- BITMAPINFOHEADER bmi = {0};
- BITMAPFILEHEADER bmf = {0};
-
- // Prepare to get the data out of HBITMAP:
- bmi.biSize = sizeof (bmi);
- bmi.biPlanes = 1;
- bmi.biBitCount = 24;
- bmi.biHeight = client.bottom;
- bmi.biWidth = client.right;
-
- // Get it:
- HDC hDC = GetDC (hWnd);
- GetDIBits (hDC, hBmp, 0, client.bottom, pDataBits,
- (BITMAPINFO*) &bmi, DIB_RGB_COLORS);
- ReleaseDC (hWnd, hDC);
-
- // Fill the file header:
- bmf.bfOffBits = sizeof (bmf) + sizeof (bmi);
- bmf.bfSize = bmf.bfOffBits + uiBytesPerAllRows;
- bmf.bfType = 0x4D42;
-
- // Writing:
- FILE* pFile;
- int err = fopen_s(&pFile, filename, "wb");
- if (err == 0)
- {
- fwrite (&bmf, sizeof (bmf), 1, pFile);
- fwrite (&bmi, sizeof (bmi), 1, pFile);
- fwrite (pDataBits, sizeof (BYTE), uiBytesPerAllRows, pFile);
- fclose (pFile);
- }
- delete [] pDataBits;
- }
- DeleteObject (hBmp);
-}
-HBITMAP CaptureWindow (HWND hWnd) {
- HDC hDC;
- BOOL bOk = FALSE;
- HBITMAP hImage = NULL;
-
- hDC = GetDC (hWnd);
- RECT rcClient;
- GetClientRect (hWnd, &rcClient);
- if ((hImage = CreateCompatibleBitmap (hDC, rcClient.right, rcClient.bottom)) != NULL)
- {
- HDC hMemDC;
- HBITMAP hDCBmp;
-
- if ((hMemDC = CreateCompatibleDC (hDC)) != NULL)
- {
- hDCBmp = (HBITMAP) SelectObject (hMemDC, hImage);
- HMODULE hLib = LoadLibrary("User32");
- // PrintWindow works for windows outside displayable area
- // but was only introduced in WinXP. BitBlt requires the window to be topmost
- // and within the viewable area of the display
- if(GetProcAddress(hLib, "PrintWindow")==NULL)
- {
- SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE);
- BitBlt (hMemDC, 0, 0, rcClient.right, rcClient.bottom, hDC, 0, 0, SRCCOPY);
- SetWindowPos(hWnd, HWND_NOTOPMOST, -32000, -32000, 0, 0, SWP_NOSIZE);
- }
- else
- {
- PrintWindow(hWnd, hMemDC, 0);
- }
- SelectObject (hMemDC, hDCBmp);
- DeleteDC (hMemDC);
- bOk = TRUE;
- }
- }
- ReleaseDC (hWnd, hDC);
- if (! bOk)
- {
- if (hImage)
- {
- DeleteObject (hImage);
- hImage = NULL;
- }
- }
- return hImage;
-}
diff --git a/openlp/libraries/pptviewlib/pptviewlib.dll b/openlp/libraries/pptviewlib/pptviewlib.dll
deleted file mode 100644
index d5505fdaa..000000000
Binary files a/openlp/libraries/pptviewlib/pptviewlib.dll and /dev/null differ
diff --git a/openlp/libraries/pptviewlib/pptviewlib.h b/openlp/libraries/pptviewlib/pptviewlib.h
deleted file mode 100644
index ce011b8eb..000000000
--- a/openlp/libraries/pptviewlib/pptviewlib.h
+++ /dev/null
@@ -1,54 +0,0 @@
-
-#define DllExport extern "C" __declspec( dllexport )
-
-enum PPTVIEWSTATE { PPT_CLOSED, PPT_STARTED, PPT_OPENED, PPT_LOADED};
-
-DllExport int OpenPPT(char *filename, HWND hParentWnd, RECT rect, char *previewpath);
-DllExport void ClosePPT(int id);
-DllExport int GetCurrentSlide(int id);
-DllExport int GetSlideCount(int id);
-DllExport void NextStep(int id);
-DllExport void PrevStep(int id);
-DllExport void GotoSlide(int id, int slideno);
-DllExport void RestartShow(int id);
-DllExport void Blank(int id);
-DllExport void Unblank(int id);
-DllExport void Stop(int id);
-DllExport void Resume(int id);
-DllExport void SetDebug(BOOL onoff);
-
-LRESULT CALLBACK CbtProc(int nCode, WPARAM wParam, LPARAM lParam);
-LRESULT CALLBACK CwpProc(int nCode, WPARAM wParam, LPARAM lParam);
-LRESULT CALLBACK GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam);
-BOOL GetPPTViewerPath(char *pptviewerpath, int strsize);
-HBITMAP CaptureWindow (HWND hWnd);
-VOID SaveBitmap (CHAR* filename, HBITMAP hBmp) ;
-VOID CaptureAndSaveWindow(HWND hWnd, CHAR* filename);
-BOOL GetPPTInfo(int id);
-BOOL SavePPTInfo(int id);
-
-
-void Unhook(int id);
-
-#define MAX_PPTOBJS 50
-
-struct PPTVIEWOBJ
-{
- HHOOK hook;
- HHOOK mhook;
- HWND hWnd;
- HWND hWnd2;
- HWND hParentWnd;
- HANDLE hProcess;
- HANDLE hThread;
- DWORD dwProcessId;
- DWORD dwThreadId;
- RECT rect;
- int slideCount;
- int currentSlide;
- int firstSlideSteps;
- int steps;
- char filename[MAX_PATH];
- char previewpath[MAX_PATH];
- PPTVIEWSTATE state;
-};
\ No newline at end of file
diff --git a/openlp/libraries/pptviewlib/pptviewlib.vcproj b/openlp/libraries/pptviewlib/pptviewlib.vcproj
deleted file mode 100644
index 13a9e4282..000000000
--- a/openlp/libraries/pptviewlib/pptviewlib.vcproj
+++ /dev/null
@@ -1,203 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/openlp/libraries/pptviewlib/test.ppt b/openlp/libraries/pptviewlib/test.ppt
deleted file mode 100644
index 1d90168b1..000000000
Binary files a/openlp/libraries/pptviewlib/test.ppt and /dev/null differ