|  | /************************************************************** | 
|  | * | 
|  | * Licensed to the Apache Software Foundation (ASF) under one | 
|  | * or more contributor license agreements.  See the NOTICE file | 
|  | * distributed with this work for additional information | 
|  | * regarding copyright ownership.  The ASF licenses this file | 
|  | * to you under the Apache License, Version 2.0 (the | 
|  | * "License"); you may not use this file except in compliance | 
|  | * with the License.  You may obtain a copy of the License at | 
|  | * | 
|  | *   http://www.apache.org/licenses/LICENSE-2.0 | 
|  | * | 
|  | * Unless required by applicable law or agreed to in writing, | 
|  | * software distributed under the License is distributed on an | 
|  | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
|  | * KIND, either express or implied.  See the License for the | 
|  | * specific language governing permissions and limitations | 
|  | * under the License. | 
|  | * | 
|  | *************************************************************/ | 
|  |  | 
|  |  | 
|  |  | 
|  | // MARKER(update_precomp.py): autogen include statement, do not remove | 
|  | #include "precompiled_desktop.hxx" | 
|  |  | 
|  | #include "launcher.hxx" | 
|  |  | 
|  |  | 
|  | #ifndef _WINDOWS_ | 
|  | #	define WIN32_LEAN_AND_MEAN | 
|  | #if defined _MSC_VER | 
|  | #pragma warning(push, 1) | 
|  | #endif | 
|  | #	include <windows.h> | 
|  | #	include <shellapi.h> | 
|  | #if defined _MSC_VER | 
|  | #pragma warning(pop) | 
|  | #endif | 
|  | #endif | 
|  |  | 
|  |  | 
|  | #include <stdlib.h> | 
|  | #include <malloc.h> | 
|  |  | 
|  |  | 
|  | #ifdef __MINGW32__ | 
|  | extern "C" int APIENTRY WinMain( HINSTANCE, HINSTANCE, LPSTR, int ) | 
|  | #else | 
|  | extern "C" int APIENTRY _tWinMain( HINSTANCE, HINSTANCE, LPTSTR, int ) | 
|  | #endif | 
|  | { | 
|  | // Retreive startup info | 
|  |  | 
|  | STARTUPINFO	aStartupInfo; | 
|  |  | 
|  | ZeroMemory( &aStartupInfo, sizeof(aStartupInfo) ); | 
|  | aStartupInfo.cb = sizeof( aStartupInfo ); | 
|  | GetStartupInfo( &aStartupInfo ); | 
|  |  | 
|  | // Retrieve command line | 
|  |  | 
|  | LPTSTR	lpCommandLine = GetCommandLine(); | 
|  |  | 
|  | LPTSTR	*ppArguments = NULL; | 
|  | int		nArguments = 0; | 
|  |  | 
|  | ppArguments = GetArgv( &nArguments ); | 
|  |  | 
|  | // if ( 1 == nArguments ) | 
|  | { | 
|  | lpCommandLine = (LPTSTR)_alloca( sizeof(_TCHAR) * (_tcslen(lpCommandLine) + _tcslen(APPLICATION_SWITCH) + 2) ); | 
|  |  | 
|  | _tcscpy( lpCommandLine, GetCommandLine() ); | 
|  | _tcscat( lpCommandLine, _T(" ") ); | 
|  | _tcscat( lpCommandLine, APPLICATION_SWITCH ); | 
|  | } | 
|  |  | 
|  |  | 
|  | // Calculate application name | 
|  |  | 
|  | TCHAR	szApplicationName[MAX_PATH]; | 
|  | TCHAR	szDrive[MAX_PATH]; | 
|  | TCHAR	szDir[MAX_PATH]; | 
|  | TCHAR	szFileName[MAX_PATH]; | 
|  | TCHAR	szExt[MAX_PATH]; | 
|  |  | 
|  | GetModuleFileName( NULL, szApplicationName, MAX_PATH ); | 
|  | _tsplitpath( szApplicationName, szDrive, szDir, szFileName, szExt ); | 
|  | _tmakepath( szApplicationName, szDrive, szDir, OFFICE_IMAGE_NAME, _T(".exe") ); | 
|  |  | 
|  | PROCESS_INFORMATION	aProcessInfo; | 
|  |  | 
|  | BOOL	fSuccess = CreateProcess( | 
|  | szApplicationName, | 
|  | lpCommandLine, | 
|  | NULL, | 
|  | NULL, | 
|  | TRUE, | 
|  | 0, | 
|  | NULL, | 
|  | NULL, | 
|  | &aStartupInfo, | 
|  | &aProcessInfo ); | 
|  |  | 
|  | if ( fSuccess ) | 
|  | { | 
|  | // Wait for soffice process to be terminated to allow other applications | 
|  | // to wait for termination of started process | 
|  |  | 
|  | WaitForSingleObject( aProcessInfo.hProcess, INFINITE ); | 
|  |  | 
|  | CloseHandle( aProcessInfo.hProcess ); | 
|  | CloseHandle( aProcessInfo.hThread ); | 
|  |  | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | DWORD	dwError = GetLastError(); | 
|  |  | 
|  | LPVOID lpMsgBuf; | 
|  |  | 
|  | FormatMessage( | 
|  | FORMAT_MESSAGE_ALLOCATE_BUFFER | | 
|  | FORMAT_MESSAGE_FROM_SYSTEM, | 
|  | NULL, | 
|  | dwError, | 
|  | MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language | 
|  | (LPTSTR)&lpMsgBuf, | 
|  | 0, | 
|  | NULL | 
|  | ); | 
|  |  | 
|  | // Display the string. | 
|  | MessageBox( NULL, (LPCTSTR)lpMsgBuf, NULL, MB_OK | MB_ICONERROR ); | 
|  |  | 
|  | // Free the buffer. | 
|  | LocalFree( lpMsgBuf ); | 
|  |  | 
|  | return GetLastError(); | 
|  | } | 
|  |  |