main.c
资源名称:tcpmp.rar [点击查看]
上传用户:wstnjxml
上传日期:2014-04-03
资源大小:7248k
文件大小:5k
源码类别:
Windows CE
开发平台:
C/C++
- /*****************************************************************************
- *
- * 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, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id: main.c 341 2005-11-16 00:15:54Z picard $
- *
- * The Core Pocket Media Player
- * Copyright (c) 2004-2005 Gabor Kovacs
- *
- ****************************************************************************/
- #include "../common/common.h"
- static const tchar_t ProgramName[] = T("TCPMP");
- static const tchar_t ProgramVersion[] =
- #include "../version"
- ;
- #ifndef STRICT
- #define STRICT
- #endif
- #include <windows.h>
- #if defined(TARGET_WINCE)
- #define TWIN(a) L ## a
- extern int ProgramId;
- #else
- #define TWIN(a) a
- static int ProgramId = 0;
- #endif
- // don't want to use common.dll, but don't want to collide with DLL import function either
- #define tcscpy_s _tcscpy_s
- #if !defined(NO_PLUGINS) || defined(NDEBUG)
- static void tcscpy_s(tchar_t* Out,int OutLen,const tchar_t* In)
- {
- if (OutLen>0)
- {
- int n = min((int)tcslen(In),OutLen-1);
- memcpy(Out,In,n*sizeof(tchar_t));
- Out[n] = 0;
- }
- }
- #endif
- #ifdef NDEBUG
- static BOOL CALLBACK EnumWindowsProc(HWND Wnd,LPARAM Param)
- {
- HWND* p = (HWND*)Param;
- if (GetWindow(Wnd,GW_OWNER) == *p)
- {
- *p = Wnd;
- return 0;
- }
- return 1;
- }
- static bool_t FindRunning(const tchar_t* CmdLine)
- {
- HWND Wnd;
- tchar_t ClassName[32];
- int n = tcslen(ProgramName);
- tcscpy_s(ClassName,TSIZEOF(ClassName),ProgramName);
- tcscpy_s(ClassName+n,TSIZEOF(ClassName)-n,T("_Win"));
- Wnd = FindWindow(ClassName, NULL);
- if (Wnd)
- {
- HWND WndMain = Wnd;
- while (!IsWindowEnabled(Wnd))
- {
- HWND Last = Wnd;
- EnumWindows(EnumWindowsProc,(LPARAM)&Wnd);
- if (Wnd == Last)
- break;
- }
- SetForegroundWindow(Wnd);
- if (CmdLine && CmdLine[0])
- {
- COPYDATASTRUCT Data;
- Data.dwData = 0;
- Data.cbData = (tcslen(CmdLine)+1)*sizeof(tchar_t);
- Data.lpData = (PVOID)CmdLine;
- SendMessage(WndMain,WM_COPYDATA,(WPARAM)WndMain,(LPARAM)&Data);
- }
- return 1;
- }
- return 0;
- }
- #endif
- #ifdef NO_PLUGINS
- extern void Main(const tchar_t* Name,const tchar_t* Version,int Id,const tchar_t* CmdLine);
- #else
- static HANDLE Load(const tchar_t* Name)
- {
- HANDLE Module;
- tchar_t Path[MAXPATH];
- tchar_t *s;
- GetModuleFileName(NULL,Path,MAXPATH);
- s = tcsrchr(Path,'\');
- if (s) s[1]=0;
- tcscpy_s(Path+tcslen(Path),TSIZEOF(Path)-tcslen(Path),Name);
- Module = LoadLibrary(Path);
- if (!Module)
- Module = LoadLibrary(Name);
- return Module;
- }
- #endif
- #if !defined(TARGET_WINCE) && defined(UNICODE)
- int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hParent,LPSTR CmdA,int CmdShow)
- {
- WCHAR Cmd[2048];
- mbstowcs(Cmd,CmdA,sizeof(Cmd)/sizeof(WCHAR)); //!!!
- #else
- int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hParent,TCHAR* Cmd,int CmdShow)
- {
- #endif
- #ifndef NDEBUG
- // DLLTest(); // just to help debugging plugins. comment out if not needed
- Context();
- #endif
- #if defined(TARGET_WINCE) && defined(ARM)
- if (ProgramId == 2)
- {
- OSVERSIONINFO Ver;
- Ver.dwOSVersionInfoSize = sizeof(Ver);
- GetVersionEx(&Ver);
- if (Ver.dwMajorVersion*100 + Ver.dwMinorVersion >= 421)
- {
- // old shell menu not supported after WM2003SE
- MessageBox(NULL,T("This ARM_CE2 version of the player is not compatible with this device. Please install ARM_CE3 version."),NULL,MB_OK|MB_ICONERROR);
- return 1;
- }
- }
- #endif
- #ifdef NDEBUG
- if (!FindRunning(Cmd))
- {
- HANDLE Handle = CreateMutex(NULL,FALSE,ProgramName);
- if (GetLastError() != ERROR_ALREADY_EXISTS)
- #endif
- {
- #ifndef NO_PLUGINS
- HMODULE Module;
- SetCursor(LoadCursor(NULL, IDC_WAIT));
- Module = Load(T("interface.plg"));
- if (Module)
- {
- void (*Main)(const tchar_t* Name,const tchar_t* Version,int Id,const tchar_t* CmdLine);
- *(FARPROC*)&Main = GetProcAddress(Module,TWIN("Main"));
- if (!Main)
- *(FARPROC*)&Main = GetProcAddress(Module,TWIN("_Main@16"));
- if (Main)
- Main(ProgramName,ProgramVersion,ProgramId,Cmd);
- FreeLibrary(Module);
- }
- #else
- Main(ProgramName,ProgramVersion,ProgramId,Cmd);
- #endif
- #ifdef NDEBUG
- CloseHandle(Handle);
- #endif
- SetCursor(LoadCursor(NULL, IDC_ARROW));
- }
- #ifdef NDEBUG
- }
- #endif
- return 0;
- }