From 0b827218bc1a0128a5053d2e95a66c787999ab52 Mon Sep 17 00:00:00 2001 From: Jonathan Corwin Date: Tue, 15 Mar 2011 00:10:40 +0000 Subject: [PATCH] ppt 2010 fix (hopefully). pptviewer tidyups --- .../presentations/lib/messagelistener.py | 3 +- .../presentations/lib/powerpointcontroller.py | 23 +- .../presentations/lib/pptviewcontroller.py | 3 +- .../presentations/lib/pptviewlib/ppttest.py | 2 +- .../lib/pptviewlib/pptviewlib.cpp | 724 +++++++++--------- .../lib/pptviewlib/pptviewlib.dll | Bin 78848 -> 78848 bytes .../presentations/lib/pptviewlib/pptviewlib.h | 61 +- 7 files changed, 431 insertions(+), 385 deletions(-) diff --git a/openlp/plugins/presentations/lib/messagelistener.py b/openlp/plugins/presentations/lib/messagelistener.py index 4db78f7a5..6554c033a 100644 --- a/openlp/plugins/presentations/lib/messagelistener.py +++ b/openlp/plugins/presentations/lib/messagelistener.py @@ -80,7 +80,8 @@ class Controller(object): if self.doc.is_active(): return if not self.doc.is_loaded(): - self.doc.load_presentation() + if not self.doc.load_presentation(): + return if self.is_live: self.doc.start_presentation() if self.doc.slidenumber > 1: diff --git a/openlp/plugins/presentations/lib/powerpointcontroller.py b/openlp/plugins/presentations/lib/powerpointcontroller.py index 4dc9e8f3a..f220f558a 100644 --- a/openlp/plugins/presentations/lib/powerpointcontroller.py +++ b/openlp/plugins/presentations/lib/powerpointcontroller.py @@ -77,8 +77,11 @@ class PowerpointController(PresentationController): """ Loads PowerPoint process """ - self.process = Dispatch(u'PowerPoint.Application') - self.process.Visible = True + log.debug(u'start_process') + if not self.process: + self.process = Dispatch(u'PowerPoint.Application') + if float(self.process.Version) < 13: + self.process.Visible = True self.process.WindowState = 2 def kill(self): @@ -120,13 +123,14 @@ class PowerpointDocument(PresentationDocument): ``presentation`` The file name of the presentations to run. """ - log.debug(u'LoadPresentation') + log.debug(u'load_presentation') if not self.controller.process or not self.controller.process.Visible: self.controller.start_process() try: self.controller.process.Presentations.Open(self.filepath, False, False, True) except pywintypes.com_error: + log.debug(u'PPT open failed') return False self.presentation = self.controller.process.Presentations( self.controller.process.Presentations.Count) @@ -145,6 +149,7 @@ class PowerpointDocument(PresentationDocument): However, for the moment, we want a physical file since it makes life easier elsewhere. """ + log.debug(u'create_thumbnails') if self.check_thumbnails(): return for num in range(0, self.presentation.Slides.Count): @@ -170,6 +175,7 @@ class PowerpointDocument(PresentationDocument): """ Returns ``True`` if a presentation is loaded. """ + log.debug(u'is_loaded') try: if not self.controller.process.Visible: return False @@ -186,6 +192,7 @@ class PowerpointDocument(PresentationDocument): """ Returns ``True`` if a presentation is currently active. """ + log.debug(u'is_active') if not self.is_loaded(): return False try: @@ -201,6 +208,7 @@ class PowerpointDocument(PresentationDocument): """ Unblanks (restores) the presentation. """ + log.debug(u'unblank_screen') self.presentation.SlideShowSettings.Run() self.presentation.SlideShowWindow.View.State = 1 self.presentation.SlideShowWindow.Activate() @@ -209,12 +217,14 @@ class PowerpointDocument(PresentationDocument): """ Blanks the screen. """ + log.debug(u'blank_screen') self.presentation.SlideShowWindow.View.State = 3 def is_blank(self): """ Returns ``True`` if screen is blank. """ + log.debug(u'is_blank') if self.is_active(): return self.presentation.SlideShowWindow.View.State == 3 else: @@ -224,6 +234,7 @@ class PowerpointDocument(PresentationDocument): """ Stops the current presentation and hides the output. """ + log.debug(u'stop_presentation') self.presentation.SlideShowWindow.View.Exit() if os.name == u'nt': @@ -231,6 +242,7 @@ class PowerpointDocument(PresentationDocument): """ Starts a presentation from the beginning. """ + log.debug(u'start_presentation') #SlideShowWindow measures its size/position by points, not pixels try: dpi = win32ui.GetActiveWindow().GetDC().GetDeviceCaps(88) @@ -253,30 +265,35 @@ class PowerpointDocument(PresentationDocument): """ Returns the current slide number. """ + log.debug(u'get_slide_number') return self.presentation.SlideShowWindow.View.CurrentShowPosition def get_slide_count(self): """ Returns total number of slides. """ + log.debug(u'get_slide_count') return self.presentation.Slides.Count def goto_slide(self, slideno): """ Moves to a specific slide in the presentation. """ + log.debug(u'goto_slide') self.presentation.SlideShowWindow.View.GotoSlide(slideno) def next_step(self): """ Triggers the next effect of slide on the running presentation. """ + log.debug(u'next_step') self.presentation.SlideShowWindow.View.Next() def previous_step(self): """ Triggers the previous slide on the running presentation. """ + log.debug(u'previous_step') self.presentation.SlideShowWindow.View.Previous() def get_slide_text(self, slide_no): diff --git a/openlp/plugins/presentations/lib/pptviewcontroller.py b/openlp/plugins/presentations/lib/pptviewcontroller.py index b97d22c03..e9130ea00 100644 --- a/openlp/plugins/presentations/lib/pptviewcontroller.py +++ b/openlp/plugins/presentations/lib/pptviewcontroller.py @@ -84,7 +84,8 @@ class PptviewController(PresentationController): dllpath = os.path.join(self.plugin.pluginManager.basepath, u'presentations', u'lib', u'pptviewlib', u'pptviewlib.dll') self.process = cdll.LoadLibrary(dllpath) - self.process.SetDebug(1) + if log.isEnabledFor(log.DEBUG): + self.process.SetDebug(1) def kill(self): """ diff --git a/openlp/plugins/presentations/lib/pptviewlib/ppttest.py b/openlp/plugins/presentations/lib/pptviewlib/ppttest.py index 1e10def7d..f8d0fabd9 100644 --- a/openlp/plugins/presentations/lib/pptviewlib/ppttest.py +++ b/openlp/plugins/presentations/lib/pptviewlib/ppttest.py @@ -133,7 +133,7 @@ class PPTViewer(QtGui.QWidget): def OpenClick(self): oldid = self.pptid; rect = RECT(100,100,900,700) - filename = unicode(self.PPTEdit.text()) + filename = str(self.PPTEdit.text().replace(u'/', u'\\')) print filename self.pptid = pptdll.OpenPPT(filename, None, rect, 'c:\\temp\\slide') print "id: " + unicode(self.pptid) diff --git a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp b/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp index de22e2d41..92b849797 100644 --- a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp +++ b/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.cpp @@ -27,31 +27,28 @@ #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) +// Because of the callbacks used by SetWindowsHookEx, the memory used needs to +// be sharable across processes (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. +// 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; +PPTVIEW pptviews[MAX_PPTS] = {NULL}; +HHOOK global_hook = NULL; BOOL debug = FALSE; #pragma data_seg() #pragma comment(linker, "/SECTION:.PPTVIEWLIB,RWS") -#define DEBUG(...) if(debug) printf(__VA_ARGS__) +HINSTANCE h_instance = NULL; - -HINSTANCE hInstance = NULL; - -BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, - LPVOID lpReserved) +BOOL APIENTRY DllMain(HMODULE h_module, DWORD ul_reason_for_call, + LPVOID lp_reserved) { - hInstance = (HINSTANCE)hModule; + h_instance = (HINSTANCE)h_module; switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: @@ -67,25 +64,25 @@ BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, // Clean up... hopefully there is only the one process attached? // We'll find out soon enough during tests! DEBUG("PROCESS_DETACH\n"); - 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) +DllExport int OpenPPT(char *filename, HWND h_parent_wnd, RECT rect, + char *preview_path) { int id; - DEBUG("OpenPPT start: %s; %s\n", filename, previewpath); - DEBUG("OpenPPT start: %u; %i, %i, %i, %i\n", hParentWnd, rect.top, + DEBUG("OpenPPT start: %s; %s\n", filename, preview_path); + DEBUG("OpenPPT start: %u; %i, %i, %i, %i\n", h_parent_wnd, rect.top, rect.left, rect.bottom, rect.right); id = -1; - for(int i = 0; i < MAX_PPTOBJS; i++) + for(int i = 0; i < MAX_PPTS; i++) { - if(pptviewobj[i].state == PPT_CLOSED) + if(pptviews[i].state == PPT_CLOSED) { id = i; break; @@ -116,39 +113,43 @@ DllExport int OpenPPT(char *filename, HWND hParentWnd, RECT rect, DEBUG("OpenPPT: Too many PPTs\n"); return -1; } - BOOL gotinfo = InitPPTObject(id, filename, hParentWnd, rect, previewpath); + BOOL got_info = InitPPTObject(id, filename, h_parent_wnd, rect, + preview_path); if(!StartPPTView(id)) { ClosePPT(id); return -1; } - if(!gotinfo) + if(!got_info) { DEBUG("OpenPPT: Get info\n"); - pptviewobj[id].steps = 0; + pptviews[id].steps = 0; int steps = 0; - while(pptviewobj[id].state == PPT_OPENED) + while(pptviews[id].state == PPT_OPENED) { - if(steps <= pptviewobj[id].steps) + if(steps <= pptviews[id].steps) { Sleep(20); - DEBUG("OpenPPT: Step %d/%d\n",steps,pptviewobj[id].steps); + DEBUG("OpenPPT: Step %d/%d\n", steps, pptviews[id].steps); steps++; NextStep(id); } Sleep(10); } DEBUG("OpenPPT: Steps %d, first slide steps %d\n", - pptviewobj[id].steps,pptviewobj[id].firstSlideSteps); + pptviews[id].steps, pptviews[id].first_slide_steps); SavePPTInfo(id); - if(pptviewobj[id].state == PPT_CLOSING || pptviewobj[id].slideCount <= 0) + if(pptviews[id].state == PPT_CLOSING + || pptviews[id].slide_count <= 0) { - // We've gone off the end and pptview is closing. We'll need to start again + // We've gone off the end and pptview is closing. + // We'll need to start again ClosePPT(id); - gotinfo = InitPPTObject(id, filename, hParentWnd, rect, previewpath); - if(gotinfo) - gotinfo = StartPPTView(id); - if(!gotinfo) + got_info = InitPPTObject(id, filename, h_parent_wnd, rect, + preview_path); + if(got_info) + got_info = StartPPTView(id); + if(!got_info) { ClosePPT(id); return -1; @@ -157,55 +158,55 @@ DllExport int OpenPPT(char *filename, HWND hParentWnd, RECT rect, else RestartShow(id); } - if(gotinfo) + if(got_info) { DEBUG("OpenPPT: Info loaded, no refresh\n"); - pptviewobj[id].state = PPT_LOADED; + pptviews[id].state = PPT_LOADED; Resume(id); } - if(pptviewobj[id].mhook != NULL) - UnhookWindowsHookEx(pptviewobj[id].mhook); - pptviewobj[id].mhook = NULL; + if(pptviews[id].mhook != NULL) + UnhookWindowsHookEx(pptviews[id].mhook); + pptviews[id].mhook = NULL; DEBUG("OpenPPT: Exit: id=%i\n", id); return id; } -BOOL InitPPTObject(int id, char *filename, HWND hParentWnd, - RECT rect, char *previewpath) +BOOL InitPPTObject(int id, char *filename, HWND h_parent_wnd, + RECT rect, char *preview_path) { - DEBUG("InitPPTObject\n"); - memset(&pptviewobj[id], 0, sizeof(PPTVIEWOBJ)); - strcpy_s(pptviewobj[id].filename, MAX_PATH, filename); - strcpy_s(pptviewobj[id].previewpath, MAX_PATH, previewpath); - pptviewobj[id].state = PPT_CLOSED; - pptviewobj[id].slideCount = 0; - pptviewobj[id].currentSlide = 0; - pptviewobj[id].firstSlideSteps = 0; - pptviewobj[id].guess = 1; + DEBUG("InitPPTObject %d\n", id); + memset(&pptviews[id], 0, sizeof(pptviews)); + strcpy_s(pptviews[id].filename, MAX_PATH, filename); + strcpy_s(pptviews[id].preview_path, MAX_PATH, preview_path); + pptviews[id].state = PPT_CLOSED; + pptviews[id].slide_count = 0; + pptviews[id].current_slide = 0; + pptviews[id].first_slide_steps = 0; + pptviews[id].guess = 1; for(int i = 0; i < MAX_SLIDES; i++) - pptviewobj[id].slideNo[i] = 0; - pptviewobj[id].hParentWnd = hParentWnd; - pptviewobj[id].hWnd = NULL; - pptviewobj[id].hWnd2 = NULL; - if(hParentWnd != NULL && rect.top == 0 && rect.bottom == 0 + pptviews[id].slide_no[i] = 0; + pptviews[id].h_parent_wnd = h_parent_wnd; + pptviews[id].h_wnd = NULL; + pptviews[id].h_wnd_input = NULL; + if(h_parent_wnd != NULL && rect.top == 0 && rect.bottom == 0 && rect.left == 0 && rect.right == 0) { - LPRECT wndrect = NULL; - GetWindowRect(hParentWnd, wndrect); - pptviewobj[id].rect.top = 0; - pptviewobj[id].rect.left = 0; - pptviewobj[id].rect.bottom = wndrect->bottom-wndrect->top; - pptviewobj[id].rect.right = wndrect->right-wndrect->left; + LPRECT wnd_rect = NULL; + GetWindowRect(h_parent_wnd, wnd_rect); + pptviews[id].rect.top = 0; + pptviews[id].rect.left = 0; + pptviews[id].rect.bottom = wnd_rect->bottom - wnd_rect->top; + pptviews[id].rect.right = wnd_rect->right - wnd_rect->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; + pptviews[id].rect.top = rect.top; + pptviews[id].rect.left = rect.left; + pptviews[id].rect.bottom = rect.bottom; + pptviews[id].rect.right = rect.right; } - BOOL gotinfo = GetPPTInfo(id); - return gotinfo; + BOOL got_info = GetPPTInfo(id); + return got_info; } BOOL StartPPTView(int id) { @@ -220,40 +221,41 @@ BOOL StartPPTView(int id) DEBUG("StartPPTView\n"); STARTUPINFO si; PROCESS_INFORMATION pi; - char cmdline[MAX_PATH * 2]; + char cmd_line[MAX_PATH * 2]; - if(globalhook != NULL) - UnhookWindowsHookEx(globalhook); - globalhook = SetWindowsHookEx(WH_CBT, CbtProc, hInstance, NULL); - if(globalhook == 0) + if(global_hook != NULL) + UnhookWindowsHookEx(global_hook); + global_hook = SetWindowsHookEx(WH_CBT, CbtProc, h_instance, NULL); + if(global_hook == 0) { DEBUG("OpenPPT: SetWindowsHookEx failed\n"); ClosePPT(id); return FALSE; } - if(GetPPTViewerPath(cmdline, sizeof(cmdline)) == FALSE) + if(GetPPTViewerPath(cmd_line, sizeof(cmd_line)) == FALSE) { DEBUG("OpenPPT: GetPPTViewerPath failed\n"); return FALSE; } - pptviewobj[id].state = PPT_STARTED; + pptviews[id].state = PPT_STARTED; Sleep(10); - strcat_s(cmdline, MAX_PATH * 2, "/F /S \""); - strcat_s(cmdline, MAX_PATH * 2, pptviewobj[id].filename); - strcat_s(cmdline, MAX_PATH * 2, "\""); + strcat_s(cmd_line, MAX_PATH * 2, "/F /S \""); + strcat_s(cmd_line, MAX_PATH * 2, pptviews[id].filename); + strcat_s(cmd_line, MAX_PATH * 2, "\""); memset(&si, 0, sizeof(si)); memset(&pi, 0, sizeof(pi)); - if(!CreateProcess(NULL, cmdline, NULL, NULL, FALSE, 0, 0, NULL, &si, &pi)) + DEBUG("Command: %s\n", cmd_line); + if(!CreateProcess(NULL, cmd_line, NULL, NULL, FALSE, 0, 0, NULL, &si, &pi)) { DEBUG("OpenPPT: CreateProcess failed\n"); ClosePPT(id); return FALSE; } - pptviewobj[id].dwProcessId = pi.dwProcessId; - pptviewobj[id].dwThreadId = pi.dwThreadId; - pptviewobj[id].hThread = pi.hThread; - pptviewobj[id].hProcess = pi.hProcess; - while(pptviewobj[id].state == PPT_STARTED) + pptviews[id].dw_process_id = pi.dwProcessId; + pptviews[id].dw_thread_id = pi.dwThreadId; + pptviews[id].h_thread = pi.hThread; + pptviews[id].h_process = pi.hProcess; + while(pptviews[id].state == PPT_STARTED) Sleep(10); return TRUE; } @@ -267,67 +269,67 @@ BOOL StartPPTView(int id) // first slide steps BOOL GetPPTInfo(int id) { - struct _stat filestats; + struct _stat file_stats; char info[MAX_PATH]; - FILE* pFile; + FILE* p_file; char buf[100]; DEBUG("GetPPTInfo: start\n"); - if(_stat(pptviewobj[id].filename, &filestats) != 0) + if(_stat(pptviews[id].filename, &file_stats) != 0) return FALSE; - sprintf_s(info, MAX_PATH, "%sinfo.txt", pptviewobj[id].previewpath); - int err = fopen_s(&pFile, info, "r"); + sprintf_s(info, MAX_PATH, "%sinfo.txt", pptviews[id].preview_path); + int err = fopen_s(&p_file, 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)) + fgets(buf, 100, p_file); // version == 1 + fgets(buf, 100, p_file); + if(file_stats.st_mtime != atoi(buf)) { - fclose (pFile); + fclose (p_file); return FALSE; } - fgets(buf, 100, pFile); - if(filestats.st_size != atoi(buf)) + fgets(buf, 100, p_file); + if(file_stats.st_size != atoi(buf)) { - fclose(pFile); + fclose(p_file); return FALSE; } - fgets(buf, 100, pFile); // slidecount - int slidecount = atoi(buf); - fgets(buf, 100, pFile); // first slide steps - int firstslidesteps = atoi(buf); + fgets(buf, 100, p_file); // slidecount + int slide_count = atoi(buf); + fgets(buf, 100, p_file); // first slide steps + int first_slide_steps = atoi(buf); // check all the preview images still exist - for(int i = 1; i <= slidecount; i++) + for(int i = 1; i <= slide_count; i++) { sprintf_s(info, MAX_PATH, "%s%i.bmp", - pptviewobj[id].previewpath, i); + pptviews[id].preview_path, i); if(GetFileAttributes(info) == INVALID_FILE_ATTRIBUTES) return FALSE; } - fclose(pFile); - pptviewobj[id].slideCount = slidecount; - pptviewobj[id].firstSlideSteps = firstslidesteps; + fclose(p_file); + pptviews[id].slide_count = slide_count; + pptviews[id].first_slide_steps = first_slide_steps; DEBUG("GetPPTInfo: exit ok\n"); return TRUE; } BOOL SavePPTInfo(int id) { - struct _stat filestats; + struct _stat file_stats; char info[MAX_PATH]; - FILE* pFile; + FILE* p_file; DEBUG("SavePPTInfo: start\n"); - if(_stat(pptviewobj[id].filename, &filestats) != 0) + if(_stat(pptviews[id].filename, &file_stats) != 0) { - DEBUG("SavePPTInfo: stat of %s failed\n", pptviewobj[id].filename); + DEBUG("SavePPTInfo: stat of %s failed\n", pptviews[id].filename); return FALSE; } - sprintf_s(info, MAX_PATH, "%sinfo.txt", pptviewobj[id].previewpath); - int err = fopen_s(&pFile, info, "w"); + sprintf_s(info, MAX_PATH, "%sinfo.txt", pptviews[id].preview_path); + int err = fopen_s(&p_file, info, "w"); if(err != 0) { DEBUG("SavePPTInfo: fopen of %s failed%i\n", info, err); @@ -337,48 +339,45 @@ BOOL SavePPTInfo(int id) { DEBUG("SavePPTInfo: fopen of %s succeeded\n", info); } - 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); + fprintf(p_file, "1\n"); + fprintf(p_file, "%u\n", file_stats.st_mtime); + fprintf(p_file, "%u\n", file_stats.st_size); + fprintf(p_file, "%u\n", pptviews[id].slide_count); + fprintf(p_file, "%u\n", pptviews[id].first_slide_steps); + fclose(p_file); DEBUG("SavePPTInfo: exit ok\n"); return TRUE; } // Get the path of the PowerPoint viewer from the registry -BOOL GetPPTViewerPath(char *pptviewerpath, int strsize) +BOOL GetPPTViewerPath(char *pptviewer_path, int str_size) { - HKEY hkey; - DWORD dwtype, dwsize; - LRESULT lresult; + HKEY h_key; + DWORD dw_type, dw_size; + LRESULT l_result; DEBUG("GetPPTViewerPath: start\n"); - if(RegOpenKeyEx(HKEY_CLASSES_ROOT, + if((RegOpenKeyEx(HKEY_CLASSES_ROOT, "PowerPointViewer.Show.12\\shell\\Show\\command", - 0, KEY_READ, &hkey)!=ERROR_SUCCESS) - { - if(RegOpenKeyEx(HKEY_CLASSES_ROOT, - "Applications\\PPTVIEW.EXE\\shell\\open\\command", - 0, KEY_READ, &hkey) != ERROR_SUCCESS) - { - if(RegOpenKeyEx(HKEY_CLASSES_ROOT, - "Applications\\PPTVIEW.EXE\\shell\\Show\\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) + 0, KEY_READ, &h_key) != ERROR_SUCCESS) + && (RegOpenKeyEx(HKEY_CLASSES_ROOT, + "Applications\\PPTVIEW.EXE\\shell\\open\\command", + 0, KEY_READ, &h_key) != ERROR_SUCCESS) + && (RegOpenKeyEx(HKEY_CLASSES_ROOT, + "Applications\\PPTVIEW.EXE\\shell\\Show\\command", + 0, KEY_READ, &h_key) != ERROR_SUCCESS)) + { + return FALSE; + } + dw_type = REG_SZ; + dw_size = (DWORD)str_size; + l_result = RegQueryValueEx(h_key, NULL, NULL, &dw_type, + (LPBYTE)pptviewer_path, &dw_size); + RegCloseKey(h_key); + if(l_result != ERROR_SUCCESS) return FALSE; - pptviewerpath[strlen(pptviewerpath)-4] = '\0'; // remove "%1" from end of key value + // remove "%1" from the end of the key value + pptviewer_path[strlen(pptviewer_path) - 4] = '\0'; DEBUG("GetPPTViewerPath: exit ok\n"); return TRUE; } @@ -387,12 +386,12 @@ BOOL GetPPTViewerPath(char *pptviewerpath, int strsize) void Unhook(int id) { DEBUG("Unhook: start %d\n", id); - 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; + if(pptviews[id].hook != NULL) + UnhookWindowsHookEx(pptviews[id].hook); + if(pptviews[id].mhook != NULL) + UnhookWindowsHookEx(pptviews[id].mhook); + pptviews[id].hook = NULL; + pptviews[id].mhook = NULL; DEBUG("Unhook: exit ok\n"); } @@ -400,15 +399,15 @@ void Unhook(int id) DllExport void ClosePPT(int id) { DEBUG("ClosePPT: start%d\n", id); - pptviewobj[id].state = PPT_CLOSED; + pptviews[id].state = PPT_CLOSED; Unhook(id); - if(pptviewobj[id].hWnd == 0) - TerminateThread(pptviewobj[id].hThread, 0); + if(pptviews[id].h_wnd == 0) + TerminateThread(pptviews[id].h_thread, 0); else - PostMessage(pptviewobj[id].hWnd, WM_CLOSE, 0, 0); - CloseHandle(pptviewobj[id].hThread); - CloseHandle(pptviewobj[id].hProcess); - memset(&pptviewobj[id], 0, sizeof(PPTVIEWOBJ)); + PostMessage(pptviews[id].h_wnd, WM_CLOSE, 0, 0); + CloseHandle(pptviews[id].h_thread); + CloseHandle(pptviews[id].h_process); + memset(&pptviews[id], 0, sizeof(pptviews)); DEBUG("ClosePPT: exit ok\n"); return; } @@ -416,59 +415,60 @@ DllExport void ClosePPT(int id) DllExport void Resume(int id) { DEBUG("Resume: %d\n", id); - 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); + MoveWindow(pptviews[id].h_wnd, pptviews[id].rect.left, + pptviews[id].rect.top, + pptviews[id].rect.right - pptviews[id].rect.left, + pptviews[id].rect.bottom - pptviews[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:%d\n", id); - MoveWindow(pptviewobj[id].hWnd, -32000, -32000, - pptviewobj[id].rect.right - pptviewobj[id].rect.left, - pptviewobj[id].rect.bottom - pptviewobj[id].rect.top, TRUE); + MoveWindow(pptviews[id].h_wnd, -32000, -32000, + pptviews[id].rect.right - pptviews[id].rect.left, + pptviews[id].rect.bottom - pptviews[id].rect.top, TRUE); } // Return the total number of slides DllExport int GetSlideCount(int id) { DEBUG("GetSlideCount:%d\n", id); - if(pptviewobj[id].state == 0) + if(pptviews[id].state == 0) return -1; else - return pptviewobj[id].slideCount; + return pptviews[id].slide_count; } // Return the number of the slide currently viewing DllExport int GetCurrentSlide(int id) { DEBUG("GetCurrentSlide:%d\n", id); - if(pptviewobj[id].state == 0) + if(pptviews[id].state == 0) return -1; else - return pptviewobj[id].currentSlide; + return pptviews[id].current_slide; } // Take a step forwards through the show DllExport void NextStep(int id) { - DEBUG("NextStep:%d (%d)\n", id, pptviewobj[id].currentSlide); - if(pptviewobj[id].currentSlide>pptviewobj[id].slideCount) + DEBUG("NextStep:%d (%d)\n", id, pptviews[id].current_slide); + if(pptviews[id].current_slide > pptviews[id].slide_count) return; - pptviewobj[id].guess = pptviewobj[id].currentSlide + 1; - PostMessage(pptviewobj[id].hWnd2, WM_MOUSEWHEEL, + pptviews[id].guess = pptviews[id].current_slide + 1; + PostMessage(pptviews[id].h_wnd_input, WM_MOUSEWHEEL, MAKEWPARAM(0, -WHEEL_DELTA), 0); } // Take a step backwards through the show DllExport void PrevStep(int id) { - DEBUG("PrevStep:%d (%d)\n", id, pptviewobj[id].currentSlide); - if(pptviewobj[id].currentSlide > 1) - pptviewobj[id].guess = pptviewobj[id].currentSlide - 1; - PostMessage(pptviewobj[id].hWnd2, WM_MOUSEWHEEL, MAKEWPARAM(0, WHEEL_DELTA), 0); + DEBUG("PrevStep:%d (%d)\n", id, pptviews[id].current_slide); + if(pptviews[id].current_slide > 1) + pptviews[id].guess = pptviews[id].current_slide - 1; + PostMessage(pptviews[id].h_wnd_input, WM_MOUSEWHEEL, + MAKEWPARAM(0, WHEEL_DELTA), 0); } // Blank the show (black screen) @@ -481,18 +481,22 @@ DllExport void Blank(int id) DEBUG("Blank:%d\n", id); 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! + SetForegroundWindow(pptviews[id].h_wnd); + SetFocus(pptviews[id].h_wnd); + // slight pause, otherwise event triggering this call may grab focus back! + Sleep(50); 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); + + // This is the preferred method, but didn't work. Keep it here for + // documentation if we revisit in the future + //PostMessage(pptviews[id].h_wnd_input, WM_KEYDOWN, 'B', 0x00300001); + //PostMessage(pptviews[id].h_wnd_input, WM_CHAR, 'b', 0x00300001); + //PostMessage(pptviews[id].h_wnd_input, WM_KEYUP, 'B', 0xC0300001); } // Unblank the show DllExport void Unblank(int id) @@ -500,38 +504,43 @@ DllExport void Unblank(int id) DEBUG("Unblank:%d\n", id); // 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); + // However keep the commented code for documentation in case we want + // to revisit later. + + //SendMessage(pptviews[id].h_wnd_input, WM_KEYDOWN, 'A', 0); + SendMessage(pptviews[id].h_wnd_input, WM_CHAR, 'A', 0); + //SendMessage(pptviews[id].h_wnd_input, WM_KEYUP, 'A', 0); + //HWND h1 = GetForegroundWindow(); + //HWND h2 = GetFocus(); + ////slight pause, otherwise event triggering this call may grab focus back! + //Sleep(50); + //SetForegroundWindow(pptviews[id].h_wnd); + //SetFocus(pptviews[id].h_wnd); + //keybd_event((int)'A', 0, 0, 0); + //SetForegroundWindow(h1); + //SetFocus(h2); } // Go directly to a slide -DllExport void GotoSlide(int id, int slideno) +DllExport void GotoSlide(int id, int slide_no) { - DEBUG("GotoSlide %i %i:\n", id, slideno); + DEBUG("GotoSlide %i %i:\n", id, slide_no); // 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) + if(slide_no < 0) return; - pptviewobj[id].guess = slideno; - _itoa_s(slideno, ch, 10, 10); + pptviews[id].guess = slide_no; + _itoa_s(slide_no, 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! + SetForegroundWindow(pptviews[id].h_wnd); + SetFocus(pptviews[id].h_wnd); + // slight pause, otherwise event triggering this call may grab focus back! + Sleep(50); for(int i = 0; i < 10; i++) { if(ch[i] == '\0') @@ -544,36 +553,40 @@ DllExport void GotoSlide(int id, int slideno) SetForegroundWindow(h1); SetFocus(h2); + // I don't know why the below didn't work. + // Kept here as documentation in case we want to try again in the future + // //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(pptviews[id].h_wnd_input, WM_KEYDOWN, ch[i], 0); + // SendMessage(pptviews[id].h_wnd_input, WM_CHAR, ch[i], 0); + // SendMessage(pptviews[id].h_wnd_input, 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); + //SendMessage(pptviews[id].h_wnd_input, WM_KEYDOWN, VK_RETURN, 0); + //SendMessage(pptviews[id].h_wnd_input, WM_CHAR, VK_RETURN, 0); + //SendMessage(pptviews[id].h_wnd_input, 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. + // 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:%d\n", id); Stop(id); - GotoSlide(id, pptviewobj[id].slideCount); - while(pptviewobj[id].currentSlide > 1) + GotoSlide(id, pptviews[id].slide_count); + while(pptviews[id].current_slide > 1) { PrevStep(id); Sleep(10); } - for(int i = 0; i <= pptviewobj[id].firstSlideSteps; i++) + for(int i = 0; i <= pptviews[id].first_slide_steps; i++) { PrevStep(id); Sleep(10); @@ -585,23 +598,23 @@ DllExport void RestartShow(int id) // 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) +LRESULT CALLBACK CbtProc(int n_code, WPARAM w_param, LPARAM l_param) { - HHOOK hook = globalhook; - if(nCode == HCBT_CREATEWND) + HHOOK hook = global_hook; + if(n_code == 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)) + char cs_class_name[16]; + HWND h_curr_wnd = (HWND)w_param; + DWORD ret_proc_id = NULL; + GetClassName(h_curr_wnd, cs_class_name, sizeof(cs_class_name)); + if((strcmp(cs_class_name, "paneClassDC") == 0) + ||(strcmp(cs_class_name, "screenClass") == 0)) { int id = -1; - DWORD windowthread = GetWindowThreadProcessId(hCurrWnd,NULL); - for(int i = 0; i < MAX_PPTOBJS; i++) + DWORD window_thread = GetWindowThreadProcessId(h_curr_wnd,NULL); + for(int i = 0; i < MAX_PPTS; i++) { - if(pptviewobj[i].dwThreadId == windowthread) + if(pptviews[i].dw_thread_id == window_thread) { id = i; break; @@ -609,177 +622,186 @@ LRESULT CALLBACK CbtProc(int nCode, WPARAM wParam, LPARAM lParam) } if(id >= 0) { - if(strcmp(csClassName, "paneClassDC") == 0) - pptviewobj[id].hWnd2=hCurrWnd; + if(strcmp(cs_class_name, "paneClassDC") == 0) + pptviews[id].h_wnd_input = h_curr_wnd; 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); + pptviews[id].h_wnd = h_curr_wnd; + CBT_CREATEWND* cw = (CBT_CREATEWND*)l_param; + if(pptviews[id].h_parent_wnd != NULL) + cw->lpcs->hwndParent = pptviews[id].h_parent_wnd; + cw->lpcs->cy = pptviews[id].rect.bottom + - pptviews[id].rect.top; + cw->lpcs->cx = pptviews[id].rect.right + - pptviews[id].rect.left; cw->lpcs->y = -32000; cw->lpcs->x = -32000; } - if((pptviewobj[id].hWnd != NULL) && (pptviewobj[id].hWnd2 != NULL)) + if((pptviews[id].h_wnd != NULL) + && (pptviews[id].h_wnd_input != 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); + UnhookWindowsHookEx(global_hook); + global_hook = NULL; + pptviews[id].hook = SetWindowsHookEx(WH_CALLWNDPROC, + CwpProc, h_instance, pptviews[id].dw_thread_id); + pptviews[id].mhook = SetWindowsHookEx(WH_GETMESSAGE, + GetMsgProc, h_instance, pptviews[id].dw_thread_id); Sleep(10); - pptviewobj[id].state = PPT_OPENED; + pptviews[id].state = PPT_OPENED; } } } } - return CallNextHookEx(hook, nCode, wParam, lParam); + return CallNextHookEx(hook, n_code, w_param, l_param); } // 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) +LRESULT CALLBACK GetMsgProc(int n_code, WPARAM w_param, LPARAM l_param) { HHOOK hook = NULL; - MSG *pMSG = (MSG *)lParam; - DWORD windowthread = GetWindowThreadProcessId(pMSG->hwnd, NULL); + MSG *p_msg = (MSG *)l_param; + DWORD window_thread = GetWindowThreadProcessId(p_msg->hwnd, NULL); int id = -1; - for(int i = 0; i < MAX_PPTOBJS; i++) + for(int i = 0; i < MAX_PPTS; i++) { - if(pptviewobj[i].dwThreadId == windowthread) + if(pptviews[i].dw_thread_id == window_thread) { id = i; - hook = pptviewobj[id].mhook; + hook = pptviews[id].mhook; break; } } - if(id >= 0 && nCode == HC_ACTION && wParam == PM_REMOVE - && pMSG->message == WM_MOUSEWHEEL) + if(id >= 0 && n_code == HC_ACTION && w_param == PM_REMOVE + && p_msg->message == WM_MOUSEWHEEL) { - if(pptviewobj[id].state != PPT_LOADED) + if(pptviews[id].state != PPT_LOADED) { - if(pptviewobj[id].currentSlide == 1) - pptviewobj[id].firstSlideSteps++; - pptviewobj[id].steps++; + if(pptviews[id].current_slide == 1) + pptviews[id].first_slide_steps++; + pptviews[id].steps++; } } - return CallNextHookEx(hook, nCode, wParam, lParam); + return CallNextHookEx(hook, n_code, w_param, l_param); } + // 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) +LRESULT CALLBACK CwpProc(int n_code, WPARAM w_param, LPARAM l_param) { CWPSTRUCT *cwp; - cwp = (CWPSTRUCT *)lParam; + cwp = (CWPSTRUCT *)l_param; HHOOK hook = NULL; char filename[MAX_PATH]; - DWORD windowthread = GetWindowThreadProcessId(cwp->hwnd, NULL); + DWORD window_thread = GetWindowThreadProcessId(cwp->hwnd, NULL); int id = -1; - for(int i = 0; i < MAX_PPTOBJS; i++) + for(int i = 0; i < MAX_PPTS; i++) { - if(pptviewobj[i].dwThreadId == windowthread) + if(pptviews[i].dw_thread_id == window_thread) { id = i; - hook = pptviewobj[id].hook; + hook = pptviews[id].hook; break; } } - if((id >= 0) && (nCode == HC_ACTION)) + if((id >= 0) && (n_code == HC_ACTION)) { if(cwp->message == WM_USER + 22) { - if(pptviewobj[id].state != PPT_LOADED) + if(pptviews[id].state != PPT_LOADED) { - if((pptviewobj[id].currentSlide > 0) - && (pptviewobj[id].previewpath != NULL - && strlen(pptviewobj[id].previewpath) > 0)) + if((pptviews[id].current_slide > 0) + && (pptviews[id].preview_path != NULL + && strlen(pptviews[id].preview_path) > 0)) { - sprintf_s(filename, MAX_PATH, "%s%i.bmp", pptviewobj[id].previewpath, - pptviewobj[id].currentSlide); + sprintf_s(filename, MAX_PATH, "%s%i.bmp", + pptviews[id].preview_path, + pptviews[id].current_slide); CaptureAndSaveWindow(cwp->hwnd, filename); } } if(cwp->wParam == 0) { - if(pptviewobj[id].currentSlide > 0) + if(pptviews[id].current_slide > 0) { - pptviewobj[id].state = PPT_LOADED; - pptviewobj[id].currentSlide = pptviewobj[id].slideCount + 1; + pptviews[id].state = PPT_LOADED; + pptviews[id].current_slide = pptviews[id].slide_count + 1; } } else { - if(pptviewobj[id].state != PPT_LOADED) + if(pptviews[id].state != PPT_LOADED) { - if((pptviewobj[id].currentSlide == 0) - ||(pptviewobj[id].slideNo[pptviewobj[id].currentSlide] != cwp->wParam)) + if((pptviews[id].current_slide == 0) + ||(pptviews[id].slide_no[pptviews[id].current_slide] + != cwp->wParam)) { - if(pptviewobj[id].slideNo[1] == cwp->wParam) + if(pptviews[id].slide_no[1] == cwp->wParam) { - pptviewobj[id].state = PPT_LOADED; + pptviews[id].state = PPT_LOADED; } else { - pptviewobj[id].currentSlide++; - pptviewobj[id].slideCount = pptviewobj[id].currentSlide; - pptviewobj[id].slideNo[pptviewobj[id].currentSlide] = cwp->wParam; + pptviews[id].current_slide++; + pptviews[id].slide_count + = pptviews[id].current_slide; + pptviews[id].slide_no[pptviews[id].current_slide] + = cwp->wParam; } } } else { - if(pptviewobj[id].guess > 0 - && pptviewobj[id].slideNo[pptviewobj[id].guess] == 0) + if(pptviews[id].guess > 0 + && pptviews[id].slide_no[pptviews[id].guess] == 0) { - pptviewobj[id].currentSlide = 0; + pptviews[id].current_slide = 0; } - for(int i = 1; i < pptviewobj[id].slideCount; i++) + for(int i = 1; i < pptviews[id].slide_count; i++) { - if(pptviewobj[id].slideNo[i] == cwp->wParam) + if(pptviews[id].slide_no[i] == cwp->wParam) { - pptviewobj[id].currentSlide = i; + pptviews[id].current_slide = i; break; } } - if(pptviewobj[id].currentSlide == 0) + if(pptviews[id].current_slide == 0) { - pptviewobj[id].slideNo[pptviewobj[id].guess] = cwp->wParam; - pptviewobj[id].currentSlide = pptviewobj[id].guess; + pptviews[id].slide_no[pptviews[id].guess] = cwp->wParam; + pptviews[id].current_slide = pptviews[id].guess; } } } } - if((pptviewobj[id].state != PPT_CLOSED) + if((pptviews[id].state != PPT_CLOSED) && (cwp->message == WM_CLOSE || cwp->message == WM_QUIT)) { - pptviewobj[id].state = PPT_CLOSING; + pptviews[id].state = PPT_CLOSING; } } - return CallNextHookEx(hook,nCode,wParam,lParam); + return CallNextHookEx(hook, n_code, w_param, l_param); } -VOID CaptureAndSaveWindow(HWND hWnd, CHAR* filename) +// Take a screenshot of the current slide, and create a .bmp +VOID CaptureAndSaveWindow(HWND h_wnd, CHAR* filename) { - HBITMAP hBmp; - if ((hBmp = CaptureWindow(hWnd)) == NULL) + HBITMAP h_bmp; + if ((h_bmp = CaptureWindow(h_wnd)) == NULL) return; RECT client; - GetClientRect (hWnd, &client); - UINT uiBytesPerRow = 3 * client.right; // RGB takes 24 bits - UINT uiRemainderForPadding; + GetClientRect(h_wnd, &client); + UINT ui_bytes_per_row = 3 * client.right; // RGB takes 24 bits + UINT ui_remainder_for_padding; - if ((uiRemainderForPadding = uiBytesPerRow % sizeof (DWORD)) > 0) - uiBytesPerRow += (sizeof (DWORD) - uiRemainderForPadding); + if ((ui_remainder_for_padding = ui_bytes_per_row % sizeof (DWORD)) > 0) + ui_bytes_per_row += (sizeof(DWORD) - ui_remainder_for_padding); - UINT uiBytesPerAllRows = uiBytesPerRow * client.bottom; - PBYTE pDataBits; + UINT ui_bytes_per_all_rows = ui_bytes_per_row * client.bottom; + PBYTE p_data_bits; - if ((pDataBits = new BYTE[uiBytesPerAllRows]) != NULL) + if ((p_data_bits = new BYTE[ui_bytes_per_all_rows]) != NULL) { BITMAPINFOHEADER bmi = {0}; BITMAPFILEHEADER bmf = {0}; @@ -792,75 +814,77 @@ VOID CaptureAndSaveWindow(HWND hWnd, CHAR* filename) bmi.biWidth = client.right; // Get it: - HDC hDC = GetDC(hWnd); - GetDIBits(hDC, hBmp, 0, client.bottom, pDataBits, + HDC h_dc = GetDC(h_wnd); + GetDIBits(h_dc, h_bmp, 0, client.bottom, p_data_bits, (BITMAPINFO*) &bmi, DIB_RGB_COLORS); - ReleaseDC(hWnd, hDC); + ReleaseDC(h_wnd, h_dc); // Fill the file header: bmf.bfOffBits = sizeof(bmf) + sizeof(bmi); - bmf.bfSize = bmf.bfOffBits + uiBytesPerAllRows; + bmf.bfSize = bmf.bfOffBits + ui_bytes_per_all_rows; bmf.bfType = 0x4D42; // Writing: - FILE* pFile; - int err = fopen_s(&pFile, filename, "wb"); + FILE* p_file; + int err = fopen_s(&p_file, 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); + fwrite(&bmf, sizeof(bmf), 1, p_file); + fwrite(&bmi, sizeof(bmi), 1, p_file); + fwrite(p_data_bits, sizeof(BYTE), ui_bytes_per_all_rows, p_file); + fclose(p_file); } - delete [] pDataBits; + delete [] p_data_bits; } - DeleteObject(hBmp); + DeleteObject(h_bmp); } -HBITMAP CaptureWindow(HWND hWnd) +HBITMAP CaptureWindow(HWND h_wnd) { - HDC hDC; - BOOL bOk = FALSE; - HBITMAP hImage = NULL; + HDC h_dc; + BOOL b_ok = FALSE; + HBITMAP h_image = NULL; - hDC = GetDC(hWnd); - RECT rcClient; - GetClientRect(hWnd, &rcClient); - if((hImage = CreateCompatibleBitmap(hDC, rcClient.right, rcClient.bottom)) - != NULL) + h_dc = GetDC(h_wnd); + RECT rc_client; + GetClientRect(h_wnd, &rc_client); + if((h_image = CreateCompatibleBitmap(h_dc, rc_client.right, + rc_client.bottom)) != NULL) { - HDC hMemDC; - HBITMAP hDCBmp; + HDC h_mem_dc; + HBITMAP h_dc_bmp; - if((hMemDC = CreateCompatibleDC (hDC)) != NULL) + if((h_mem_dc = CreateCompatibleDC (h_dc)) != NULL) { - hDCBmp = (HBITMAP)SelectObject(hMemDC, hImage); - HMODULE hLib = LoadLibrary("User32"); + h_dc_bmp = (HBITMAP)SelectObject(h_mem_dc, h_image); + HMODULE h_lib = 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) + // but was only introduced in WinXP. BitBlt requires the window + // to be topmost and within the viewable area of the display + if(GetProcAddress(h_lib, "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); + SetWindowPos(h_wnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE); + BitBlt (h_mem_dc, 0, 0, rc_client.right, rc_client.bottom, + h_dc, 0, 0, SRCCOPY); + SetWindowPos(h_wnd, HWND_NOTOPMOST, -32000, -32000, 0, 0, + SWP_NOSIZE); } else { - PrintWindow(hWnd, hMemDC, 0); + PrintWindow(h_wnd, h_mem_dc, 0); } - SelectObject (hMemDC, hDCBmp); - DeleteDC (hMemDC); - bOk = TRUE; + SelectObject(h_mem_dc, h_dc_bmp); + DeleteDC(h_mem_dc); + b_ok = TRUE; } } - ReleaseDC(hWnd, hDC); - if(!bOk) + ReleaseDC(h_wnd, h_dc); + if(!b_ok) { - if (hImage) + if (h_image) { - DeleteObject(hImage); - hImage = NULL; + DeleteObject(h_image); + h_image = NULL; } } - return hImage; + return h_image; } \ No newline at end of file diff --git a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.dll b/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.dll index 9c8240636cbf48c43c33e473f722f6420abc948c..d7d7c1fbad33102a7c2fbcddfad39ce06a606ba5 100644 GIT binary patch delta 7501 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 StguvA4q6WVtA`H#rusj<-TQO^ delta 7460 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 diff --git a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.h b/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.h index a45f3b4c2..6b98e329b 100644 --- a/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.h +++ b/openlp/plugins/presentations/lib/pptviewlib/pptviewlib.h @@ -1,60 +1,63 @@ -#define DllExport extern "C" __declspec( dllexport ) +#define DllExport extern "C" __declspec(dllexport) +#define DEBUG(...) if(debug) printf(__VA_ARGS__) -enum PPTVIEWSTATE { PPT_CLOSED, PPT_STARTED, PPT_OPENED, PPT_LOADED, PPT_CLOSING}; +enum PPTVIEWSTATE {PPT_CLOSED, PPT_STARTED, PPT_OPENED, + PPT_LOADED, PPT_CLOSING}; -DllExport int OpenPPT(char *filename, HWND hParentWnd, RECT rect, char *previewpath); +DllExport int OpenPPT(char *filename, HWND h_parent_wnd, RECT rect, + char *preview_path); DllExport BOOL CheckInstalled(); 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 GotoSlide(int id, int slide_no); 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); +DllExport void SetDebug(BOOL on_off); -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); +LRESULT CALLBACK CbtProc(int n_code, WPARAM w_param, LPARAM l_param); +LRESULT CALLBACK CwpProc(int n_code, WPARAM w_param, LPARAM l_param); +LRESULT CALLBACK GetMsgProc(int n_code, WPARAM w_param, LPARAM l_param); +BOOL GetPPTViewerPath(char *pptviewer_path, int str_size); +HBITMAP CaptureWindow (HWND h_wnd); +VOID SaveBitmap (CHAR* filename, HBITMAP h_bmp); +VOID CaptureAndSaveWindow(HWND h_wnd, CHAR* filename); BOOL GetPPTInfo(int id); BOOL SavePPTInfo(int id); -BOOL InitPPTObject(int id, char *filename, HWND hParentWnd, - RECT rect, char *previewpath); +BOOL InitPPTObject(int id, char *filename, HWND h_parent_wnd, + RECT rect, char *preview_path); BOOL StartPPTView(int id); void Unhook(int id); -#define MAX_PPTOBJS 16 +#define MAX_PPTS 16 #define MAX_SLIDES 256 -struct PPTVIEWOBJ +struct PPTVIEW { HHOOK hook; HHOOK mhook; - HWND hWnd; - HWND hWnd2; - HWND hParentWnd; - HANDLE hProcess; - HANDLE hThread; - DWORD dwProcessId; - DWORD dwThreadId; + HWND h_wnd; // The main pptview window + HWND h_wnd_input; // A child pptview window which takes windows messages + HWND h_parent_wnd; + HANDLE h_process; + HANDLE h_thread; + DWORD dw_process_id; + DWORD dw_thread_id; RECT rect; - int slideCount; - int currentSlide; - int firstSlideSteps; + int slide_count; + int current_slide; + int first_slide_steps; int steps; - int guess; + int guess; // What the current slide might be, based on the last action char filename[MAX_PATH]; - char previewpath[MAX_PATH]; - int slideNo[MAX_SLIDES]; + char preview_path[MAX_PATH]; + int slide_no[MAX_SLIDES]; PPTVIEWSTATE state; };