3293 lines
88 KiB
C++
3293 lines
88 KiB
C++
// WINMPG.cpp : Defines the entry point for the application.
|
||
|
||
float PourcentConvertion = 0.0;
|
||
#define _WIN32_IE 0x0501
|
||
#define _WIN32_WINNT 0x0501
|
||
#include "SCENE.H"
|
||
|
||
//For session Notification
|
||
//#define _WIN32_IE 0x0501
|
||
//#define _WIN32_WINNT 0x0501
|
||
//#include "SCENE.H"
|
||
//#include "WtsApi32.h"
|
||
//WTSRegisterSessionNotification(hWnd, NOTIFY_FOR_ALL_SESSIONS);
|
||
//case WM_WTSSESSION_CHANGE:
|
||
|
||
//#define SOUND_ON
|
||
//#include "stdafx.h"
|
||
#include "resource.h"
|
||
#include <stdio.h>
|
||
#include <windows.h>
|
||
#include <COMMDLG.H>
|
||
#include <VFW.H>
|
||
#ifndef SKIMMED_NET
|
||
#include "NET.H"
|
||
#endif
|
||
#include "CODEC.H"
|
||
#include "rrasters.h"
|
||
|
||
#ifdef SOUND_ON
|
||
#include "CSound.h"
|
||
#endif
|
||
#ifdef ONLINE_MODE
|
||
#include "account.h"
|
||
#endif
|
||
|
||
#if _DEBUG
|
||
#define _CRTDBG_MAP_ALLOC
|
||
#include "crtdbg.h"
|
||
#endif
|
||
|
||
#include <WtsApi32.h>
|
||
|
||
//_ASSERTE( _CrtIsValidHeapPointer( ) );
|
||
|
||
HMODULE KeyboardDLL = 0;
|
||
|
||
HANDLE AppAccesMutex;
|
||
int aviEncoder = 0;
|
||
char *currentCursor = NULL;
|
||
int currentCursorType = NULL;
|
||
|
||
void UpdateAllBack(WORLD *pScene);
|
||
u32 IsMinimized = 0;
|
||
u32 IsMaximized = 0;
|
||
u32 VersionNumber = 0;
|
||
char CurrentDir[1024];
|
||
DWORD CurrentSessionID;
|
||
DWORD LaunchSessionID;
|
||
|
||
#define MYMSG_NOTIFYICON (WM_APP + 100)
|
||
|
||
WORLD *MyCreateWORLD(HWND hWnd, u32 SizeX,u32 SizeY, char *iniFile);
|
||
u32 DestroyWORLD(WORLD *TheScene);
|
||
|
||
WORLD *TheScene = NULL;
|
||
u32 modeHigh = 0;
|
||
int mainThread;
|
||
int sessionLocked = 0;
|
||
|
||
// If you want to run in D3D, you need to pass in 'd3d' as a commandline argument.
|
||
// Alternatively, just change the below to 1 to set D3D as default.
|
||
int D3DDisplay = -1;
|
||
u32 IsRestart = 0;
|
||
|
||
//*************** Reg INFO **************//
|
||
#define AUTORUN_KEY "Software\\Microsoft\\Windows\\CurrentVersion\\Run"
|
||
#define AUTORUN_KEY_CAMCAM "CamCam Driver"
|
||
#define CAMCAM_KEY_INSTALL "installdir"
|
||
#define CAMCAM_EXE "Camcam.exe"
|
||
#define CAMCAM_LUA "driver.LUA"
|
||
|
||
char xorCrypt[] = {-123,-112,-118,-33,-99,-123,-87,-47,-68,-67,-77,-68,-86,-99,-54,-55,-53,-119,-118,-106,-67,-81,-86,-50,-57,22,-101,-46,-57,-53,-105,-105,-116,22,-120,-58,-102,-103,-41,-46,-40,-54,-53,-123,-58,-57,-53,-103,-98,-103,-119,-101,-98,-58,-57,-46,23,-109,-109,-78,22,-57,-40,-41,-46};
|
||
char *xorBase = NULL;
|
||
|
||
void ProcessBase()
|
||
{
|
||
if (xorBase) return;
|
||
xorBase = (char *)CC_malloc(66);
|
||
for (int i=0; i<65; i++)
|
||
xorBase[i] = ~xorCrypt[i];
|
||
xorBase[65] = 0;
|
||
}
|
||
|
||
#ifdef USER_MODE
|
||
void displayIntegrityError(int num)
|
||
{
|
||
static bool displayed = false;
|
||
if (!displayed) // only display once (in case it's called by dofile() in lua, it might occur several times)
|
||
{
|
||
char title[30];
|
||
sprintf(title, "%s %d", "Integrity Error", num);
|
||
MessageBox(TheScene ? TheScene->OwnerHwnd : NULL, "Error while opening file, please reinstall", title, MB_OK|MB_SYSTEMMODAL|MB_ICONERROR);
|
||
displayed = true;
|
||
}
|
||
}
|
||
|
||
#include "FileAllowed.h"
|
||
|
||
#ifdef VERSION_STR
|
||
const char *VersionStr = VERSION_STR;
|
||
#else
|
||
#error "Missing VERSION_STR"
|
||
#endif
|
||
//static char *FileAllowed[] = {
|
||
// "camcam.luax",
|
||
// "sceneclass.luax",
|
||
// "driver.luax",
|
||
// "slot.luax",
|
||
// "studio.luax",
|
||
// "leftpanel.luax"};
|
||
//static char *FileAllowedMD5[] = {
|
||
// "8cec900ebda28e80fd242f75978854f6",
|
||
// "ad252982d55ddc4b792b7bc5c8450cb2",
|
||
// "e959b25f4ff66d3ef70fd9913d4c1357",
|
||
// "b3fc36864b4f0eb4dd56b0a97157a133",
|
||
// "2cdb7d127d37cffa49e620a24b7cdc85",
|
||
// "8975533c1140fa23e521184499ada140"};
|
||
|
||
BOOL IsFileAllowed(char *filename, bool fromLua)
|
||
{
|
||
#ifdef _DEBUG
|
||
// return true; // for testing purpose
|
||
#endif
|
||
char filenameX[1024];
|
||
if (!fromLua)
|
||
{
|
||
sprintf(filenameX, "%sx", filename);
|
||
filename = filenameX;
|
||
} else
|
||
{
|
||
if (*filename == '@') filename++;
|
||
}
|
||
|
||
char md5Base[64];
|
||
char fileBaseBuf[1024];
|
||
char *fileBase = fileBaseBuf;
|
||
strncpy(fileBase, filename, 1024);
|
||
if (fileBase && (fileBase[0] == '.') && (fileBase[1] = '/'))
|
||
fileBase += 2;
|
||
int pos = strlen(fileBase) - 1;
|
||
for (;pos >= 0 && fileBase[pos] != '.'; pos--);
|
||
fileBase[pos] = '\0'; // get rid of extension
|
||
//for (;pos >= 0 && filename[pos] != '\\' && filename[pos] != '/' && filename[pos] != ':'; pos--);
|
||
//strcpy(fileBase, filename + pos + 1);
|
||
strlwr(fileBase);
|
||
|
||
MDFile(filename, md5Base);
|
||
|
||
for (int i=0; i<NB_FILE_AUTORISED; i++)
|
||
{
|
||
if (!strcmp(fileBase, FileAllowed[i]))
|
||
{
|
||
char MD5[64];
|
||
memcpy(MD5, FileAllowedMD5[i], 32);
|
||
CryptBuffer(MD5, 32);
|
||
MD5[32] = 0;
|
||
if (!strcmp(md5Base, MD5))
|
||
return true;
|
||
else
|
||
{
|
||
char errorStr[1024];
|
||
sprintf(errorStr, "Invalid file %s.luax (modified)", fileBase);
|
||
extern void SaveDBGInfo(char *text);
|
||
SaveDBGInfo(errorStr);
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
// New: allow any files that are not registered in FileAllowed.h
|
||
// (but the list will include all Lua files in the installer)
|
||
// and the app checks that the list of files is unaltered
|
||
//char errorStr[1024];
|
||
//sprintf(errorStr, "Invalid file %s (not found)", fileBase);
|
||
//extern void SaveDBGInfo(char *text);
|
||
//SaveDBGInfo(errorStr);
|
||
//return false;
|
||
return true;
|
||
}
|
||
#else
|
||
const char *VersionStr = "DevNUM";
|
||
#endif //USER_MODE
|
||
|
||
|
||
HWND hWnd;
|
||
|
||
static int FinishApp = 1;
|
||
extern u32 GetFileNameExtend(char *TRACKqs);
|
||
static u32 IPConnection = 0;
|
||
static u32 bnoBlitte = 0;
|
||
|
||
int HideBorders = 0;
|
||
int AlwaysOnTop = 0;
|
||
int MustUpdate = 0;
|
||
int UpdateLocked = 0;
|
||
|
||
int mouseX = 0; // horizontal position of cursor
|
||
int mouseY = 0; // vertical position of cursor
|
||
|
||
#define MAX_LOADSTRING 100
|
||
TCHAR szTitle[MAX_LOADSTRING]; // The title bar text
|
||
TCHAR szWindowClass[MAX_LOADSTRING]; // The title bar text
|
||
|
||
int MenuListNb = 0;
|
||
MenuTextInfo MenuList[10];
|
||
|
||
|
||
// Foward declarations of functions included in this code module:
|
||
ATOM MyRegisterClass(HINSTANCE hInstance);
|
||
BOOL InitInstance(HINSTANCE, int);
|
||
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
|
||
|
||
u32 PauseVideo = 0;
|
||
|
||
u32 TEST_SX = 512+(512>>1);
|
||
u32 TEST_SY = 384+(384>>1);
|
||
//u32 TEST_SY = 352+(352>>1);
|
||
|
||
u32 IconTime = 0;
|
||
HINSTANCE hBigInstance = 0;
|
||
|
||
|
||
TCHAR AVICompressor[256] = "";
|
||
bool AVIMicroSound = false;
|
||
char CompressorsNames[64][256];
|
||
int NbCompressorsNames = 0;
|
||
TCHAR CurrWebCam[256] = "";
|
||
char WebCamNames[64][256];
|
||
int NbWebCams = 0;
|
||
char LuaDebugGotoLine[16];
|
||
|
||
char AppDataPath[MAX_PATH];
|
||
char MyDocsPath[MAX_PATH];
|
||
char MyMusicsPath[MAX_PATH];
|
||
char MyPicturesPath[MAX_PATH];
|
||
char CamcamCCM[MAX_PATH];
|
||
|
||
void TransparentWindowSet(bool enable, bool force = false);
|
||
|
||
int GetVideoEncodersNames(char compressors[][256], int *nbCompressors, int maxCompressors);
|
||
BOOL GetFilterPropertyByName(char *name, bool openPage);
|
||
int GetWebCamNames(char compressors[][256], int *nbCompressors, int maxCompressors);
|
||
BOOL GetWebCamFilterPropertyByName(char *name, bool openPage);
|
||
u32 FILEIO_DetectPackedExeMode(char *EXEname);
|
||
u32 FILEIO_IsModePackedEXE();
|
||
bool AddUserNameInRegistry();//PL
|
||
HKEY _RegGetHandleKey(int key);
|
||
char* _RegReadKeyValue(int HandleKey, const char* SubKey, const char* NameKey);
|
||
bool _RegSetKeyValue(int HandleKey, const char* SubKey, const char* NameKey, const char* Value);
|
||
|
||
#ifdef SOUND_ON
|
||
CSnd Audio;
|
||
#endif
|
||
|
||
#ifdef ONLINE_MODE
|
||
CCamCamAccount Account;
|
||
//extern HWND BrowserWnd;
|
||
#endif
|
||
|
||
void AnimateIcon(HINSTANCE hInstance, HWND hWnd, DWORD dwMsgType,UINT nIndexOfIcon,char *pInfoTexte)
|
||
{
|
||
static HICON hIconAtIndex = (HICON)0;
|
||
if (hInstance == NULL) hInstance = hBigInstance;
|
||
else hBigInstance = hInstance;
|
||
if (hIconAtIndex == (HICON)0)
|
||
hIconAtIndex = LoadIcon(hInstance, (LPCTSTR)IDI_ICON1);
|
||
IconTime = -1;
|
||
if (pInfoTexte[0]) IconTime = timeGetTime();
|
||
|
||
NOTIFYICONDATA IconData;
|
||
memset(&IconData, 0, sizeof(NOTIFYICONDATA));
|
||
|
||
IconData.cbSize = sizeof(NOTIFYICONDATA);
|
||
IconData.hIcon = hIconAtIndex;
|
||
IconData.hWnd = hWnd;
|
||
IconData.uID = 0xc0de2003;
|
||
strcpy(IconData.szTip, "YouUp");
|
||
|
||
IconData.uCallbackMessage = MYMSG_NOTIFYICON;
|
||
IconData.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP | NIF_INFO;
|
||
if (pInfoTexte[0])
|
||
IconData.uFlags |= NIF_INFO;
|
||
|
||
IconData.uVersion = 5;
|
||
IconData.uTimeout = 0;
|
||
sprintf(IconData.szInfo,pInfoTexte);
|
||
if (pInfoTexte[0])
|
||
sprintf(IconData.szInfoTitle,"YouUPApp");
|
||
else//*/
|
||
sprintf(IconData.szInfoTitle,"");
|
||
IconData.dwInfoFlags = NIIF_INFO;
|
||
|
||
Shell_NotifyIcon(dwMsgType, &IconData);
|
||
SendMessage(hWnd, WM_SETICON, NULL, (long) hIconAtIndex);
|
||
|
||
DestroyIcon(hIconAtIndex);
|
||
}
|
||
|
||
|
||
u32 bSurchargeMouseCursor = 0;
|
||
//u32 ResultBNitm[1024*1024];
|
||
|
||
|
||
void Blitte()
|
||
{
|
||
if (bnoBlitte) return;
|
||
bnoBlitte ++;
|
||
if (TheScene)
|
||
{
|
||
static void *H264 = NULL;
|
||
MAP SDF;
|
||
TheScene->FrameCall();
|
||
|
||
if ((TEST_SX != TheScene->XSize) || (TEST_SY != TheScene->YSize) || MustUpdate)
|
||
{
|
||
TEST_SX = TheScene->XSize;
|
||
TEST_SY = TheScene->YSize;
|
||
|
||
RECT Rect1,Rect2;
|
||
GetClientRect(hWnd , &Rect1);
|
||
GetWindowRect(hWnd , &Rect2);
|
||
Rect1 . bottom -= Rect1 . top;
|
||
Rect2 . bottom -= Rect2 . top;
|
||
Rect1 . right -= Rect1 . left;
|
||
Rect2 . right -= Rect2 . left;
|
||
SetWindowPos(hWnd , NULL , 0 , 0 , TEST_SX + Rect2 . right - Rect1 . right , TEST_SY + Rect2 . bottom - Rect1 . bottom , SWP_NOMOVE);
|
||
UpdateAllBack(TheScene);
|
||
|
||
MustUpdate = 0;
|
||
}
|
||
}
|
||
bnoBlitte --;
|
||
|
||
|
||
}
|
||
|
||
void API_EXIT()
|
||
{
|
||
// exec last events before exit ...
|
||
if (TheScene)
|
||
TheScene->LuaEventsExec();
|
||
|
||
#ifdef ONLINE_MODE
|
||
// Now the background thread will check a mutex in TheScene, so they must be gently exited before destroying TheScene
|
||
Account.release();
|
||
extern void releaseLuaHTTPClients();
|
||
releaseLuaHTTPClients();
|
||
#endif
|
||
|
||
DestroyWORLD(TheScene);
|
||
TheScene = NULL;
|
||
AnimateIcon(NULL, hWnd, NIM_DELETE,0,"");
|
||
|
||
extern HWND hSplashWnd;
|
||
if (hSplashWnd) DestroyWindow(hSplashWnd);
|
||
|
||
#ifdef SOUND_ON
|
||
Audio.Stop();
|
||
Audio.Liberations();
|
||
#endif
|
||
|
||
ReleaseMutex(AppAccesMutex);
|
||
exit(0);
|
||
}
|
||
|
||
void API_RESTART(char* luaFileToBoot)
|
||
{
|
||
int nArgs;
|
||
LPWSTR *szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs);
|
||
size_t size = wcslen(szArglist[0])+1;
|
||
char* exepathname = (char*)ZeroAlloc(size);
|
||
wcstombs(exepathname, szArglist[0], size);
|
||
exepathname[strlen(exepathname)-4] = 0;
|
||
char* exename = NULL;
|
||
if (strrchr(exepathname, '\\'))
|
||
exename = strrchr(exepathname, '\\')+1;
|
||
else
|
||
exename = exepathname;
|
||
|
||
char BATPath[2048];
|
||
FILE *BAT;
|
||
|
||
#if 1
|
||
char execData[2048];
|
||
sprintf(execData,"%s.EXE restart %s",exename, luaFileToBoot?luaFileToBoot:"");
|
||
STARTUPINFO si;
|
||
PROCESS_INFORMATION pi;
|
||
|
||
memset(&si, 0, sizeof(si));
|
||
si.cb = sizeof(si);
|
||
memset(&pi, 0, sizeof(pi));
|
||
if (!CreateProcess(NULL, execData, NULL, NULL, false, 0, NULL, NULL, &si, &pi))
|
||
{
|
||
char info[2048];
|
||
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(),
|
||
LANG_NEUTRAL, info, 2048, NULL);
|
||
}
|
||
API_EXIT();
|
||
#else
|
||
|
||
#ifndef USER_MODE
|
||
strcpy(BATPath, "U.BAT");
|
||
#else
|
||
sprintf(BATPath, "%s\\U.BAT", AppDataPath);
|
||
#endif
|
||
|
||
if (fileExists(BATPath))
|
||
{
|
||
SetFileAttributes(BATPath, GetFileAttributes(BATPath) & ~FILE_ATTRIBUTE_READONLY);
|
||
DeleteFile(BATPath);
|
||
}
|
||
BAT = CC_fopen(BATPath,"wt");
|
||
if (BAT)
|
||
{
|
||
fprintf(BAT,"XCOPY /Y %s.EXE *.BXE\n",exename);
|
||
fprintf(BAT,":start\n");
|
||
fprintf(BAT,"del /F /Q %s.EXE\n",exename);
|
||
fprintf(BAT,"if exist %s.EXE goto start\n",exename);
|
||
fprintf(BAT,"XCOPY /Y *.BXE *.EXE\n",exename);
|
||
fprintf(BAT,"del /F /Q *.BXE\n",exename);
|
||
fprintf(BAT,"START %s.EXE %s\n",exename, luaFileToBoot?luaFileToBoot:"");
|
||
fprintf(BAT,"\n",exename);
|
||
CC_fclose(BAT);
|
||
WinExec(BATPath,SW_HIDE);
|
||
API_EXIT();
|
||
}
|
||
|
||
CC_free(exepathname);
|
||
exepathname = 0;
|
||
exename = 0;
|
||
LocalFree(szArglist);
|
||
#endif
|
||
}
|
||
|
||
#ifndef USER_MODE
|
||
u32 CheckVer(char *FilnameA,char *FilnameServeur,char *StringDest)
|
||
{
|
||
static u32 Loosed = 0;
|
||
u32 Ret = 0;
|
||
if (Loosed) return 0;
|
||
FILE *F1,*F2;
|
||
F1 = CC_fopen(FilnameA,"rb");
|
||
F2 = CC_fopen(FilnameServeur,"rb");
|
||
if (F1 && F2)
|
||
{
|
||
u32 ValueF1;
|
||
do
|
||
{
|
||
ValueF1 = fread(StringDest,1,2047,F1);
|
||
fread(StringDest,1,ValueF1,F2);
|
||
} while (ValueF1);
|
||
memset(StringDest,0,2048);
|
||
Ret = fread(StringDest,1,2047,F2);
|
||
} else
|
||
Loosed = 1;
|
||
if (F1) CC_fclose(F1);
|
||
if (F2) CC_fclose(F2);
|
||
return Ret;
|
||
}
|
||
|
||
|
||
u32 NewVersionIsAvailable = 0;
|
||
char UpdateTextTEXT[2048*4] = "";
|
||
|
||
|
||
void API_UPDATE_EXE()
|
||
{
|
||
FILE *BAT;
|
||
#ifdef SIMUP
|
||
#define EXENAME "TestApp_FS"
|
||
#else
|
||
|
||
#ifdef _DEBUG
|
||
#define EXENAME "TestAppD"
|
||
#else
|
||
#define EXENAME "TestApp"
|
||
#endif
|
||
|
||
#endif //SIMUP
|
||
|
||
BAT = CC_fopen("U.BAT","wb");
|
||
if (BAT)
|
||
{
|
||
CC_fclose(BAT);
|
||
WinExec("del u.bat",SW_HIDE);
|
||
};
|
||
BAT = CC_fopen("U.BAT","wt");
|
||
if (BAT)
|
||
{
|
||
fprintf(BAT,"COPY /Y \\\\mtp-infr-data01\\Projets\\CamCam\\SimConnect.dll SimConnect.dll\n");
|
||
fprintf(BAT,"COPY /Y \\\\mtp-infr-data01\\Projets\\CamCam\\CamcamDLLHook.dll CamcamDLLHook.dll\n");
|
||
fprintf(BAT,":start\n");
|
||
fprintf(BAT,"COPY /Y %s.exe %s_%d.exe\n",EXENAME,EXENAME,VersionNumber);
|
||
fprintf(BAT,"del /F /Q %s.exe\n",EXENAME);
|
||
fprintf(BAT,"if exist %s.exe goto start\n",EXENAME);
|
||
fprintf(BAT,"COPY /Y \\\\mtp-infr-data01\\Projets\\CamCam\\%s.exe %s.exe\n",EXENAME,EXENAME);
|
||
fprintf(BAT,"COPY /Y \\\\mtp-infr-data01\\Projets\\CamCam\\Camcam.ver Camcam.ver\n",EXENAME,EXENAME);
|
||
fprintf(BAT,"COPY /Y \\\\mtp-infr-data01\\Projets\\CamCam\\SimConnect.dll SimConnect.dll\n");
|
||
fprintf(BAT,"COPY /Y \\\\mtp-infr-data01\\Projets\\CamCam\\ids\\*.feat ids\\*.feat\n");
|
||
fprintf(BAT,"START %s.exe\n",EXENAME);
|
||
fprintf(BAT,"\n",EXENAME);
|
||
CC_fclose(BAT);
|
||
WinExec("U.BAT",SW_HIDE);
|
||
API_EXIT();
|
||
}
|
||
}
|
||
|
||
void API_IMPORTALLMEDIA()
|
||
{
|
||
FILE *BAT;
|
||
BAT = CC_fopen("U.BAT","wt");
|
||
if (BAT)
|
||
{
|
||
fprintf(BAT,"XCOPY /Y %s *.BXE\n",EXENAME);
|
||
fprintf(BAT,":start\n");
|
||
fprintf(BAT,"del /F /Q %s\n",EXENAME);
|
||
fprintf(BAT,"if exist %s goto start\n",EXENAME);
|
||
fprintf(BAT,"XCOPY /Y *.BXE *.EXE\n",EXENAME);
|
||
fprintf(BAT,"del /F /Q *.BXE\n",EXENAME);
|
||
fprintf(BAT,"START %s\n",EXENAME);
|
||
fprintf(BAT,"\n",EXENAME);
|
||
CC_fclose(BAT);
|
||
WinExec("U.BAT",SW_HIDE);
|
||
API_EXIT();
|
||
}
|
||
}
|
||
#endif // USER_MODE
|
||
|
||
void WINMAIN_SETCAPTURE(u32 OnOff)
|
||
{
|
||
if (OnOff)
|
||
{
|
||
SetCapture(hWnd);
|
||
} else
|
||
ReleaseCapture();
|
||
}
|
||
extern u32 FILEIO_Binarize();
|
||
int APIENTRY WinMain(HINSTANCE hInstance,
|
||
HINSTANCE hPrevInstance,
|
||
LPSTR lpCmdLine,
|
||
int nCmdShow)
|
||
{
|
||
//Well, solution waiting for a good cmd analysis
|
||
extern bool debuggingLua;
|
||
extern bool debuggingFile;
|
||
extern bool noCompression;
|
||
u32 waitTime = 500;
|
||
u32 IsServiceLaunch = 0;
|
||
|
||
mainThread = GetCurrentThreadId();
|
||
//#ifdef _DEBUG
|
||
debuggingFile = 1; // let it set during the beta
|
||
//#endif
|
||
|
||
ProcessBase();
|
||
#ifdef ONLINE_MODE
|
||
void UncryptAll();
|
||
UncryptAll();
|
||
|
||
#ifdef USER_MODE
|
||
// Make sure the list of file is unaltered
|
||
char *fileAllowedAndSecret = new char[30000];
|
||
fileAllowedAndSecret[0] = '\0';
|
||
for (int i=0; i<NB_FILE_AUTORISED; i++)
|
||
{
|
||
strcat(fileAllowedAndSecret, FileAllowed[i]);
|
||
}
|
||
strcat(fileAllowedAndSecret, "0<EFBFBD>2#45=08rt<72>");
|
||
char fileListDigest[128];
|
||
MDString(fileAllowedAndSecret, fileListDigest);
|
||
if (strcmp(fileListDigest, FileAllowedDigest))
|
||
{
|
||
displayIntegrityError(0);
|
||
delete [] fileAllowedAndSecret;
|
||
return 1;
|
||
}
|
||
delete [] fileAllowedAndSecret;
|
||
#endif
|
||
#endif
|
||
|
||
char CurrentExeName[2048];
|
||
GetModuleFileName(NULL,CurrentExeName,2048);
|
||
if (FILEIO_DetectPackedExeMode(CurrentExeName))
|
||
{
|
||
SetFileNameExtend(CurrentExeName,'.ZCC');
|
||
lpCmdLine = CurrentExeName;
|
||
}
|
||
|
||
#ifdef TEST_PHILIPPE
|
||
CurrentSessionID = 1;
|
||
#else
|
||
DWORD *sessionIDPtr;
|
||
DWORD size;
|
||
CurrentSessionID = WTSGetActiveConsoleSessionId();
|
||
WTSQuerySessionInformation( WTS_CURRENT_SERVER_HANDLE,
|
||
WTS_CURRENT_SESSION,
|
||
WTSSessionId,
|
||
(LPTSTR*)&sessionIDPtr,
|
||
&size);
|
||
LaunchSessionID = *sessionIDPtr;
|
||
#endif
|
||
|
||
if (strstr(lpCmdLine, "d3d") != NULL) {D3DDisplay = 1; lpCmdLine = strstr(lpCmdLine, "d3d") + strlen("d3d"); }
|
||
if (strstr(lpCmdLine, "ogl") != NULL) {D3DDisplay = 0; lpCmdLine = strstr(lpCmdLine, "ogl") + strlen("ogl"); }
|
||
if (strstr(lpCmdLine, "restart") != NULL) { IsRestart = 1; waitTime = 60000/*10000 YTEST*/;lpCmdLine = strstr(lpCmdLine, "restart") + strlen("restart"); }
|
||
if (strstr(lpCmdLine, "service") != NULL) { IsServiceLaunch = 1; ;lpCmdLine = strstr(lpCmdLine, "service") + strlen("service"); }
|
||
|
||
while (*lpCmdLine == ' ') lpCmdLine++;
|
||
|
||
char UPPER_CML[2048];
|
||
u32 UpperConv = strlen(lpCmdLine);
|
||
UPPER_CML[UpperConv] = 0;
|
||
while (UpperConv--)
|
||
{
|
||
UPPER_CML[UpperConv] = toupper(lpCmdLine[UpperConv]);
|
||
}
|
||
if (strstr(UPPER_CML, "BINARIZE") != NULL)
|
||
{
|
||
FILEIO_Binarize();
|
||
}
|
||
|
||
|
||
bool hideWindow = false;
|
||
char* res = 0;
|
||
if (res = strstr(lpCmdLine, "hideWindow"))
|
||
{
|
||
strcpy(res, res + strlen("hideWindow"));
|
||
hideWindow = true;
|
||
if (*(lpCmdLine+strlen(lpCmdLine)-1)==' ')
|
||
*(lpCmdLine+strlen(lpCmdLine)-1) = 0;
|
||
}
|
||
|
||
RECT Rect3;
|
||
GetWindowRect(GetDesktopWindow() , &Rect3);
|
||
if (TEST_SX > (Rect3.right-Rect3.left) * 0.75f) TEST_SX = (Rect3.right-Rect3.left) * 0.75f;
|
||
if (TEST_SY > (Rect3.bottom-Rect3.top) * 0.75f) TEST_SY = (Rect3.bottom-Rect3.top) * 0.75f;
|
||
|
||
#ifdef ONLINE_MODE
|
||
hideWindow = true;
|
||
#endif
|
||
|
||
if (lpCmdLine && *lpCmdLine)
|
||
{
|
||
char *LPParse;
|
||
LPParse = lpCmdLine;
|
||
if (*LPParse == '"')
|
||
{
|
||
while (*LPParse)
|
||
{
|
||
*LPParse = *(LPParse+1);
|
||
LPParse++;
|
||
}
|
||
if ((LPParse-2) >= lpCmdLine)
|
||
{
|
||
if (*(LPParse-2) == '"')
|
||
*(LPParse-2) = 0;
|
||
}
|
||
}
|
||
}
|
||
|
||
//#ifndef USER_MODE
|
||
if (lpCmdLine && !strncmp(lpCmdLine, "camcam://", 9)) // when called from a browser, make sure we start properly
|
||
//#endif
|
||
// Set current directory to current .EXE
|
||
{
|
||
char *pConv,CurrentDir[2048];
|
||
GetModuleFileName(NULL,CurrentDir,2048);
|
||
pConv = (char*)CurrentDir + strlen(CurrentDir);
|
||
while (pConv > (char*)CurrentDir)
|
||
{
|
||
if ((*pConv == '\\') || (*pConv == '/'))
|
||
{
|
||
*pConv = 0;
|
||
pConv = (char*)CurrentDir; // Break loop
|
||
}
|
||
pConv--;
|
||
}
|
||
SetCurrentDirectory(CurrentDir);
|
||
}//*/
|
||
GetCurrentDirectory(1024, CurrentDir);
|
||
|
||
// First of all prevent multiple application opening
|
||
//AppAccesMutex = CreateMutex(NULL, FALSE, "CamCamMutex");
|
||
//if (WAIT_OBJECT_0 != WaitForSingleObject(AppAccesMutex, waitTime) || (lpCmdLine && !strcmp(lpCmdLine, "exit")))
|
||
//{
|
||
// if (IsServiceLaunch)
|
||
// return 0;
|
||
// if (!lpCmdLine || !*lpCmdLine)
|
||
// lpCmdLine = "camcam.lua"; // make sure the sleeping instance receives the default script
|
||
|
||
// if (lpCmdLine && ((*lpCmdLine && (GetFileNameExtend(lpCmdLine) == '.LUA')) || (GetFileNameExtend(lpCmdLine) == '.ZCC') || !strcmp(lpCmdLine, "exit") || !strncmp(lpCmdLine, "camcam://", 9)))
|
||
// {
|
||
// WORD sockVersion = MAKEWORD(1,1);
|
||
// WSADATA wsaData;
|
||
|
||
// WSAStartup(sockVersion, &wsaData);
|
||
// SOCKET ServerSock;
|
||
//
|
||
// unsigned int port = 10000;
|
||
// while (port < 10004)
|
||
// {
|
||
// ServerSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
|
||
// if(ServerSock == INVALID_SOCKET)
|
||
// {
|
||
// WSACleanup();
|
||
// return 0;
|
||
// }
|
||
|
||
// sockaddr_in sinDistant;
|
||
// sinDistant.sin_family = AF_INET;
|
||
// sinDistant.sin_addr.s_addr = inet_addr("127.0.0.1");
|
||
// sinDistant.sin_port = htons(port);
|
||
// if(!connect(ServerSock, (sockaddr*)&sinDistant, sizeof(sockaddr_in)))
|
||
// {
|
||
// char TEXT[] = "WHO_ARE_YOU";
|
||
// send(ServerSock, TEXT, strlen(TEXT) +1, 0);
|
||
|
||
// char response [5];
|
||
// struct timeval tv;
|
||
//
|
||
//
|
||
// tv.tv_sec = 3; /* 3 Secs Timeout */
|
||
// int sopt = setsockopt(ServerSock, SOL_SOCKET /*IPPROTO_TCP*/, SO_RCVTIMEO, (const char *)&tv, sizeof(struct timeval));
|
||
// if (sopt == 0)
|
||
// {
|
||
// int res = recv (ServerSock, response, 4, 0);
|
||
// if (res <= 0 ||
|
||
// strcmp(response, "CCOK") != 0)
|
||
// {
|
||
// port ++;
|
||
// continue;
|
||
// }
|
||
// }
|
||
//
|
||
// char command[1024];
|
||
// if (GetFileNameExtend(lpCmdLine) == '.ZCC')
|
||
// sprintf(command, "ZCC_Load %s", lpCmdLine);
|
||
// else
|
||
// sprintf(command, "LUA_Load %s", lpCmdLine);
|
||
// send(ServerSock, command, (int)strlen(command)+1, 0);
|
||
// closesocket(ServerSock);
|
||
// break;
|
||
// } else
|
||
// {
|
||
// port ++;
|
||
// }
|
||
// }
|
||
// WSAStartup(sockVersion, &wsaData);
|
||
// }
|
||
// CloseHandle(AppAccesMutex);
|
||
// return 0;
|
||
//}
|
||
//else // TODO: handle "camcam://" when starting with a fresh instance
|
||
//{
|
||
// if (!strncmp(lpCmdLine, "camcam://", 9)) // in USER_MODE, this would be considered as a non-authorized file
|
||
// lpCmdLine = "camcam.lua";
|
||
// if (waitTime > 500)
|
||
// Sleep(500);
|
||
//}
|
||
|
||
#if _DEBUG
|
||
//_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF | _CRTDBG_DELAY_FREE_MEM_DF);
|
||
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
|
||
#endif
|
||
|
||
SHGetFolderPath( NULL, CSIDL_APPDATA|CSIDL_FLAG_CREATE , NULL, SHGFP_TYPE_CURRENT, AppDataPath);
|
||
SHGetFolderPath( NULL, CSIDL_PERSONAL|CSIDL_FLAG_CREATE , NULL, SHGFP_TYPE_CURRENT, MyDocsPath);
|
||
SHGetFolderPath( NULL, CSIDL_MYMUSIC|CSIDL_FLAG_CREATE , NULL, SHGFP_TYPE_CURRENT, MyMusicsPath);
|
||
SHGetFolderPath( NULL, CSIDL_MYPICTURES|CSIDL_FLAG_CREATE , NULL, SHGFP_TYPE_CURRENT, MyPicturesPath);
|
||
#ifndef NO_DIR_CREATE
|
||
if (!FILEIO_IsModePackedEXE())
|
||
{
|
||
strcat(AppDataPath, "\\YouUp\\");
|
||
CreateDirectory(AppDataPath, NULL);
|
||
|
||
strcat(MyDocsPath, "\\YouUp\\");
|
||
CreateDirectory(MyDocsPath, NULL);
|
||
|
||
strcat(MyMusicsPath, "\\");
|
||
CreateDirectory(MyMusicsPath, NULL);
|
||
|
||
strcat(MyPicturesPath, "\\");
|
||
CreateDirectory(MyPicturesPath, NULL);
|
||
|
||
// PL
|
||
AddUserNameInRegistry();
|
||
}
|
||
#endif
|
||
|
||
#ifndef USER_MODE
|
||
strcpy(CamcamCCM, "Camcam.ccm");
|
||
#else
|
||
sprintf(CamcamCCM, "%sCamcam.ccm", AppDataPath);
|
||
#endif
|
||
|
||
MSG msg;
|
||
u32 FrmaeNum = 0;
|
||
RECT Rect1,Rect2;
|
||
|
||
/* Auto update */
|
||
|
||
// Initialize global strings
|
||
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
|
||
LoadString(hInstance, IDC_WINMPG, szWindowClass, MAX_LOADSTRING);
|
||
MyRegisterClass(hInstance);
|
||
|
||
if (!InitInstance (hInstance, SW_HIDE)) return FALSE;
|
||
|
||
#ifdef RENDER_OVER_ACTIVEX_WINDOW
|
||
extern HWND getActiveXhWnd();
|
||
if (getActiveXhWnd())
|
||
{
|
||
SetParent(hWnd, getActiveXhWnd());
|
||
SetWindowPos(hWnd, NULL, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
|
||
}
|
||
#elif defined(RENDER_INTO_ACTIVEX_WINDOW)
|
||
// Redirect display output to ActiveX window (does not handle inputs though)
|
||
extern HWND getActiveXhWnd();
|
||
if (getActiveXhWnd())
|
||
hWnd = getActiveXhWnd();
|
||
#endif
|
||
|
||
GetClientRect(hWnd , &Rect1);
|
||
GetWindowRect(hWnd , &Rect2);
|
||
Rect1 . bottom -= Rect1 . top;
|
||
Rect2 . bottom -= Rect2 . top;
|
||
Rect1 . right -= Rect1 . left;
|
||
Rect2 . right -= Rect2 . left;
|
||
SetWindowPos(hWnd , NULL , 0 , 0 , TEST_SX + Rect2 . right - Rect1 . right , TEST_SY + Rect2 . bottom - Rect1 . bottom , SWP_NOMOVE);
|
||
|
||
CoInitialize(0);
|
||
|
||
#ifdef ONLINE_MODE
|
||
if (!Account.init())
|
||
{
|
||
MessageBox(hWnd, Account.getErrorStr(), "CamCam message", MB_OK|MB_SYSTEMMODAL|MB_ICONERROR);
|
||
API_EXIT();
|
||
}
|
||
// BACK to rev#9740
|
||
// Get hardware Info (must be called after CurrWebCam is known)
|
||
Account.storeHardwareSnapshot();
|
||
#endif
|
||
|
||
TheScene = MyCreateWORLD(hWnd,TEST_SX,TEST_SY,CamcamCCM);
|
||
|
||
|
||
#ifndef BEGIN_MINIMIZED
|
||
if (!hideWindow)
|
||
ShowWindow(hWnd, SW_SHOW);
|
||
else
|
||
ShowWindow(hWnd, SW_HIDE);
|
||
#endif
|
||
|
||
#ifdef SOUND_ON
|
||
if ( Audio.Initialisation( hWnd ) )
|
||
{
|
||
Audio.Start();
|
||
}
|
||
#endif
|
||
|
||
//chargement des infos
|
||
char MicroSound[64];
|
||
GetWebCamNames(WebCamNames, &NbWebCams, 64);
|
||
TheScene->GetIniValue(CamcamCCM, "CurrWebCam", CurrWebCam);
|
||
TheScene->GetIniValue(CamcamCCM, "AVICompressor", AVICompressor);
|
||
TheScene->GetIniValue(CamcamCCM, "AVIMicroSound", MicroSound);
|
||
AVIMicroSound = atoi(MicroSound);
|
||
|
||
if (*CurrWebCam)
|
||
{
|
||
int GetWebCamByName(char *compressorsName);
|
||
int defaultCam = GetWebCamByName(CurrWebCam);
|
||
if (defaultCam == -1 && NbWebCams > 0)
|
||
strcpy(CurrWebCam, WebCamNames[0]);
|
||
} else if (NbWebCams > 0)
|
||
strcpy(CurrWebCam, WebCamNames[0]);
|
||
|
||
|
||
|
||
#ifndef USER_MODE
|
||
VersionNumber = 0;
|
||
|
||
if (!FILEIO_IsModePackedEXE())
|
||
{
|
||
FILE *F;
|
||
F = CC_fopen("Camcam.ver","wt");
|
||
if (F)
|
||
{
|
||
char string[2048];
|
||
VersionNumber = 0;
|
||
#define DEFINE_VERSION(a) \
|
||
sprintf(string,"N<>%d:%s\n",VersionNumber++,a);\
|
||
fwrite(string,strlen(string),1,F);
|
||
#include "version.h"
|
||
CC_fclose(F);
|
||
}
|
||
}
|
||
|
||
{
|
||
if(TheScene->GetIniValue(CamcamCCM, "debuggingLua")) debuggingLua = true;
|
||
if(TheScene->GetIniValue(CamcamCCM, "debuggingFile")) debuggingFile = true;
|
||
if(TheScene->GetIniValue(CamcamCCM, "noCompression")) noCompression = true;
|
||
if(TheScene->GetIniValue(CamcamCCM, "wndNotOnTop"))
|
||
{
|
||
SetWindowPos(hWnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE);
|
||
AlwaysOnTop = 0;
|
||
}
|
||
|
||
//v<>rification de la pr<70>sence du fichier Camcam.INI et cr<63>ation en cas d'absence
|
||
FILE *iniFile = CC_fopen(CamcamCCM,"at");
|
||
if(iniFile) CC_fclose(iniFile);
|
||
|
||
//r<>cup<75>ration du chemin du dernier script charg<72>
|
||
char Name[2048];
|
||
bool needToSave = false;
|
||
TheScene->GetIniValue(CamcamCCM, "lastScriptPath", Name);
|
||
//... et gestion de l'absence de ce fichier script
|
||
FILE* scriptFile = 0;
|
||
if(*Name)
|
||
scriptFile = CC_fopen(Name,"rt");
|
||
if(scriptFile)
|
||
CC_fclose(scriptFile);
|
||
else
|
||
{
|
||
if(!(scriptFile = CC_fopen("COMMAND.LUA","rt"))) system("COPY /Y INIT.LUA COMMAND.LUA");
|
||
else CC_fclose(scriptFile);
|
||
strcpy(Name, "COMMAND.LUA\0");
|
||
needToSave = true;
|
||
}
|
||
if (lpCmdLine && *lpCmdLine && GetFileNameExtend(lpCmdLine) == '.LUA')
|
||
{
|
||
strcpy(Name, lpCmdLine);
|
||
}
|
||
if (needToSave)
|
||
{
|
||
TheScene->SetIniValue(CamcamCCM, "lastScriptPath", Name);
|
||
TheScene->SaveIniFile(CamcamCCM);
|
||
}
|
||
|
||
//copie des fichiers utiles pour Lua dans Notepad++
|
||
//if (!FILEIO_IsModePackedEXE())
|
||
{
|
||
extern void LuaSupportForNotepadPP();
|
||
LuaSupportForNotepadPP();
|
||
}
|
||
|
||
//conversion d'un fichier SVG en fichier MAD
|
||
#ifdef USE_SVG
|
||
if(TheScene->GetIniValue(CamcamCCM, "svg2Mad") && TheScene->GetIniValue(CamcamCCM, "svgFilename"))
|
||
{
|
||
char svgFilename[260]; TheScene->GetIniValue(CamcamCCM, "svgFilename", svgFilename);
|
||
char svgCompleteFilename[260]; sprintf(svgCompleteFilename, "SVG\\%s", svgFilename);
|
||
char madCompleteFilename[260]; sprintf(madCompleteFilename, "Mads\\%s.mad", svgFilename);
|
||
|
||
extern bool svg2mad(char* svgFilename, char* destMadFilename);
|
||
svg2mad(svgCompleteFilename, madCompleteFilename);
|
||
}
|
||
#endif
|
||
|
||
//chargement du dernier script
|
||
u32 ZCCL = 0;
|
||
if (lpCmdLine && *lpCmdLine && GetFileNameExtend(lpCmdLine) == '.ZCC')
|
||
{
|
||
ZCCL = TheScene->UNPACK(lpCmdLine,1,FILEIO_IsModePackedEXE());
|
||
}
|
||
if (!ZCCL)
|
||
{
|
||
TheScene->currentScript = 0;
|
||
sprintf(TheScene->ScriptNameStack[TheScene->currentScript],"%s", Name);
|
||
bnoBlitte++;
|
||
if (GetFileNameExtend(TheScene->ScriptNameStack[TheScene->currentScript]) == '.LUA')
|
||
{
|
||
TheScene->LoadLua(TheScene->ScriptNameStack[TheScene->currentScript], 1);
|
||
}
|
||
bnoBlitte--;
|
||
}
|
||
}
|
||
#else
|
||
{
|
||
if (!*lpCmdLine)
|
||
lpCmdLine = "camcam.lua";
|
||
if (IsFileAllowed(lpCmdLine,0))
|
||
{
|
||
sprintf(TheScene->ScriptNameStack[TheScene->currentScript],"%s", lpCmdLine);
|
||
bnoBlitte++;
|
||
TheScene->LoadLua(TheScene->ScriptNameStack[TheScene->currentScript], 1);
|
||
bnoBlitte--;
|
||
} else
|
||
{
|
||
void displayIntegrityError(int num);
|
||
displayIntegrityError(1);
|
||
return 0;
|
||
}
|
||
}
|
||
#endif // USER_MODE
|
||
|
||
char Fusk[2048];
|
||
|
||
// HINSTANCE LodedD = LoadDriver("CamCamDrv.sys");
|
||
|
||
while (FinishApp)
|
||
{
|
||
//if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
|
||
//if (PeekMessage(&msg, NULL, 0, 0 ,PM_REMOVE) )
|
||
while (PeekMessage(&msg, NULL, 0, 0 ,PM_REMOVE) )
|
||
{
|
||
TranslateMessage(&msg);
|
||
DispatchMessage(&msg);
|
||
}
|
||
|
||
#ifdef RENDER_OVER_ACTIVEX_WINDOW
|
||
/*RECT hostRect, myRect;
|
||
GetWindowRect(HostHWnd, &hostRect);
|
||
GetWindowRect(hWnd, &myRect);
|
||
if (hostRect.left != myRect.left ||
|
||
hostRect.top != myRect.top ||
|
||
hostRect.right != myRect.right ||
|
||
hostRect.bottom != myRect.bottom)
|
||
{
|
||
MoveWindow(hWnd, hostRect.left, hostRect.top, hostRect.right-hostRect.left, hostRect.bottom-hostRect.top, TRUE);
|
||
//SetWindowPos(hWnd, HostHWnd, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
||
}*/
|
||
#endif
|
||
|
||
static u32 tLastAccountCheck = 0;
|
||
u32 tNow = timeGetTime();
|
||
#ifdef ONLINE_MODE
|
||
if (tNow - tLastAccountCheck > 249) // check 4 times per second
|
||
{
|
||
// Check completed download for lua callbacks in main thread
|
||
Account.checkCompletedDownloads();
|
||
tLastAccountCheck = tNow;
|
||
|
||
// Track video driver usage
|
||
extern INPUT_IO *MainDriver;
|
||
extern u32 DRVO_ISLINKED(INPUT_IO *pDRO);
|
||
static bool prevDriverIsLinked = false;
|
||
bool driverIsLinked = MainDriver && DRVO_ISLINKED(MainDriver);
|
||
if (driverIsLinked ^ prevDriverIsLinked)
|
||
Account.addBufferedRequest("trk-time", 0, driverIsLinked ? "1" : "0");
|
||
prevDriverIsLinked = driverIsLinked;
|
||
|
||
}
|
||
#endif
|
||
|
||
if ((IconTime != -1) && (tNow - IconTime > 5000)) AnimateIcon(NULL, hWnd, NIM_MODIFY,0,"");
|
||
|
||
#ifndef SKIMMED_NET
|
||
//TheScene->ClearConsole();
|
||
#ifdef NET_DBUG
|
||
sprintf(Fusk,"SYE %s(%s):%d -> UDP = %dK",TheScene->NetObj->MyComputerName,TheScene->NetObj->MyIP,TheScene->NetObj->MyPort,TheScene->NetObj->RATE_UP >> 10);
|
||
TheScene->OutputConsole(Fusk);
|
||
sprintf(Fusk,"RateUp = %dK , RateDown = %dK ",TheScene->NetObj->ACTUAL_RATE_UP>>10,TheScene->NetObj->ACTUAL_RATE_DOWN>>10);
|
||
TheScene->OutputConsole(Fusk);
|
||
for (u32 CCC = 0 ; CCC < 32 ; CCC ++)
|
||
{
|
||
if (TheScene->NetObj->LinkedIP[CCC].ulIP != 0)
|
||
{
|
||
sprintf(Fusk,"Linked to %s %d.%d.%d.%d (SS=%d CPN=%d lost=%d%%))",
|
||
TheScene->NetObj->LinkedIP[CCC].ComputerName,
|
||
(TheScene->NetObj->LinkedIP[CCC].ulIP>>24)&0xff,
|
||
(TheScene->NetObj->LinkedIP[CCC].ulIP>>16)&0xff,
|
||
(TheScene->NetObj->LinkedIP[CCC].ulIP>>8)&0xff,
|
||
(TheScene->NetObj->LinkedIP[CCC].ulIP>>0)&0xff,
|
||
TheScene->NetObj->LinkedIP[CCC].Number,
|
||
TheScene->NetObj->LinkedIP[CCC].CurrentPacketNumber,
|
||
(100*TheScene->NetObj->LinkedIP[CCC].LostPackets) / (TheScene->NetObj->LinkedIP[CCC].GoodPackets + TheScene->NetObj->LinkedIP[CCC].LostPackets)
|
||
);
|
||
TheScene->OutputConsole(Fusk);
|
||
}
|
||
}
|
||
|
||
sprintf(Fusk,"KOOL = %d,ITN = %d",TheScene->NetObj->CoolNotifycation,TheScene->NetObj->InTheNet);
|
||
TheScene->OutputConsole(Fusk);
|
||
#endif
|
||
#endif
|
||
|
||
if (UpdateLocked)
|
||
LockWindowUpdate(hWnd);
|
||
else
|
||
LockWindowUpdate(NULL);
|
||
|
||
#ifndef _DEBUG
|
||
#ifdef USER_MODE
|
||
if (IsDebuggerPresent())
|
||
exit(0);
|
||
#endif
|
||
#endif
|
||
Blitte();
|
||
|
||
// OnFocus event
|
||
bool CheckFocus();
|
||
static bool prevHasFocus = CheckFocus();
|
||
TheScene->hasFocus = CheckFocus();
|
||
#ifdef ONLINE_MODE
|
||
// From now, the card refresh is called by the Flash web with Socket,
|
||
// but if the current socket communication port is different from 10000 (def one)
|
||
// the shop will not communicate with us
|
||
extern unsigned int FLASHPORT ;
|
||
if (TheScene->hasFocus && !prevHasFocus && FLASHPORT != 10000)
|
||
Account.checkRefreshCards();
|
||
// Relaunch CamCam if needed (even in USER_MODE after disconnection due to dual log-in)
|
||
extern volatile int NeedRelaunching;
|
||
if (NeedRelaunching > 0)
|
||
{
|
||
if (NeedRelaunching == ERROR_INVALID_TOKEN)
|
||
{
|
||
// In main thread, in order to block application usage
|
||
MessageBox(NULL, Account.getLocErrorMsg(YOUR_ACCOUNT_IS_BEING_USED_ON_ANOTHER_COMPUTER___), "YouUp", MB_OK | MB_ICONWARNING);
|
||
}
|
||
if (NeedRelaunching == ERROR_MANDATORY_PATCH)
|
||
API_EXIT();
|
||
else
|
||
API_RESTART(NULL);
|
||
}
|
||
extern volatile bool NeedExit;
|
||
if (NeedExit)
|
||
API_EXIT();
|
||
|
||
Account.sendMessageReceived();
|
||
Account.checkFacebookThread();
|
||
#endif
|
||
prevHasFocus = TheScene->hasFocus;
|
||
}
|
||
|
||
#ifdef SOUND_ON
|
||
Audio.Stop();
|
||
Audio.Liberations();
|
||
#endif
|
||
|
||
return msg.wParam;
|
||
}
|
||
|
||
|
||
|
||
ATOM MyRegisterClass(HINSTANCE hInstance)
|
||
{
|
||
WNDCLASSEX wcex;
|
||
wcex.cbSize = sizeof(WNDCLASSEX);
|
||
wcex.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
|
||
wcex.lpfnWndProc = (WNDPROC)WndProc;
|
||
wcex.cbClsExtra = 0;
|
||
wcex.cbWndExtra = 0;
|
||
wcex.hInstance = hInstance;
|
||
wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_ICON1);
|
||
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
|
||
wcex.hbrBackground = NULL;//(HBRUSH)(COLOR_WINDOW+1);
|
||
wcex.lpszMenuName = NULL;
|
||
wcex.lpszClassName = szWindowClass;
|
||
wcex.hIconSm = NULL;
|
||
return RegisterClassEx(&wcex);
|
||
}
|
||
|
||
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
|
||
{
|
||
u32 VersionNumber = 0;
|
||
#define DEFINE_VERSION(a) VersionNumber++;
|
||
#include "version.h"
|
||
char WindowName[2048];
|
||
|
||
//sprintf(WindowName,"YouUp V1.%d",VersionNumber);
|
||
#if YOUUP_IN_BETA == 1
|
||
strcpy(WindowName,"YouUp Beta");
|
||
#else
|
||
strcpy(WindowName,"GenAnim");
|
||
#endif
|
||
|
||
DWORD WND_ON_TOP = WS_EX_TOPMOST;
|
||
AlwaysOnTop = 0;
|
||
//cr<63>ation de la fenetre
|
||
|
||
#ifndef USER_MODE
|
||
|
||
#ifdef RENDER_OVER_ACTIVEX_WINDOW
|
||
u32 flag = WS_POPUP /*| WS_CLIPCHILDREN*/ ;
|
||
#else
|
||
u32 flag = WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN;
|
||
#endif
|
||
|
||
#else
|
||
|
||
#ifdef RENDER_OVER_ACTIVEX_WINDOW
|
||
u32 flag = WS_CHILD /*| WS_CLIPCHILDREN*/;
|
||
#else
|
||
u32 flag = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_CLIPCHILDREN;
|
||
#endif
|
||
|
||
#endif
|
||
hWnd = CreateWindowEx(WS_EX_WINDOWEDGE, szWindowClass, WindowName, flag,
|
||
CW_USEDEFAULT, CW_USEDEFAULT, 400, 400, NULL, NULL, hInstance, NULL );
|
||
|
||
|
||
if (!hWnd)
|
||
{
|
||
return FALSE;
|
||
}
|
||
ShowWindow(hWnd, /*SW_HIDE);//*/nCmdShow);
|
||
|
||
UpdateWindow(hWnd);
|
||
|
||
|
||
/* TASK ICON CREATION *********************************************************************************/
|
||
|
||
AnimateIcon(hInstance, hWnd, NIM_ADD,0,"");
|
||
|
||
WINDOWPLACEMENT lpwndpl;
|
||
GetWindowPlacement(hWnd,&lpwndpl);
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
|
||
void CheckMenu(HMENU hMenu)
|
||
{
|
||
if (!hMenu) return;
|
||
CheckMenuItem(hMenu,ID_TRAYICONMENU_AUTORELOADMADS,MF_CHECKED);
|
||
char Text[2048];
|
||
#ifdef VERSION_STR
|
||
sprintf(Text, "Version n<>%s", VERSION_STR);
|
||
#else
|
||
sprintf(Text, "Version n<>%d", VersionNumber);
|
||
#endif
|
||
|
||
if (MenuListNb)
|
||
{
|
||
for (int i=0; i<MenuListNb; i++)
|
||
ModifyMenu(hMenu,MenuList[i].id,MF_BYCOMMAND,MenuList[i].id,MenuList[i].text);
|
||
} else
|
||
{
|
||
ModifyMenu(hMenu,ID_TRAYICONMENU_VERSIONN,MF_BYCOMMAND,NULL,Text);
|
||
}
|
||
|
||
if (!(TheScene->SkipFunctions & SKIP_NO_60hz_LIMIT))
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_LIMITFRAMERATETO60HZ,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_LIMITFRAMERATETO60HZ,MF_UNCHECKED);
|
||
|
||
|
||
|
||
if (TheScene->WFlags & MAD_AUTO_RELOAD)
|
||
CheckMenuItem(hMenu,ID_TRAYICONMENU_AUTORELOADMADS,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_TRAYICONMENU_AUTORELOADMADS,MF_UNCHECKED);
|
||
if (TheScene->ID_TABLE[TheScene->CurrentID] && TheScene->ID_TABLE[TheScene->CurrentID]->SF_U.DrawMesh)
|
||
CheckMenuItem(hMenu,ID_TRAYICONMENU_SHOWMESH,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_TRAYICONMENU_SHOWMESH,MF_UNCHECKED);
|
||
if (bSurchargeMouseCursor)
|
||
CheckMenuItem(hMenu,ID_TRAYICONMENU_USEHEADMOUSE,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_TRAYICONMENU_USEHEADMOUSE,MF_UNCHECKED);
|
||
if (TheScene->WebCamXInvert)
|
||
CheckMenuItem(hMenu,ID_CAMCAM_INVERTWEBCAMHORIZONTALLY,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_CAMCAM_INVERTWEBCAMHORIZONTALLY,MF_UNCHECKED);
|
||
if (TheScene->ulForceWireFrame)
|
||
CheckMenuItem(hMenu,ID_CAMCAM_FORCEWIREFRAME,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_CAMCAM_FORCEWIREFRAME,MF_UNCHECKED);
|
||
if (TheScene->WebCamYInvert)
|
||
CheckMenuItem(hMenu,ID_CAMCAM_INVERTWEBCAMVERTICALLY,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_CAMCAM_INVERTWEBCAMVERTICALLY,MF_UNCHECKED);
|
||
if (aviEncoder)
|
||
CheckMenuItem(hMenu,ID_CAMCAM_EXPORTAVI,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_CAMCAM_EXPORTAVI,MF_UNCHECKED);
|
||
|
||
if (TheScene->WSPC)
|
||
{
|
||
if (TheScene->WSPC->DrawDebug)
|
||
CheckMenuItem(hMenu,ID_TRACKEUR_DRAWDEBUG1,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_TRACKEUR_DRAWDEBUG1,MF_UNCHECKED);
|
||
}
|
||
if (TheScene->WSPC)
|
||
{
|
||
if (TheScene->WSPC->DrawDebug2)
|
||
CheckMenuItem(hMenu,ID_TRACKEUR_DRAWDEBUG2,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_TRACKEUR_DRAWDEBUG2,MF_UNCHECKED);
|
||
}
|
||
|
||
if (TheScene->bDrawRasters)
|
||
CheckMenuItem(hMenu,ID_TRACKEUR_DRAWRASTERS,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_TRACKEUR_DRAWRASTERS,MF_UNCHECKED);
|
||
if (TheScene->bDrawConsole)
|
||
CheckMenuItem(hMenu,ID_CAMCAM_DRAWCONSOLE,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_CAMCAM_DRAWCONSOLE,MF_UNCHECKED);
|
||
|
||
if (HideBorders)
|
||
CheckMenuItem(hMenu,ID_CAMCAM_HIDEBORDERS,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_CAMCAM_HIDEBORDERS,MF_UNCHECKED);
|
||
|
||
if (IsMaximized)
|
||
CheckMenuItem(hMenu,ID_CAMCAM_FULLSCREEN,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_CAMCAM_FULLSCREEN,MF_UNCHECKED);
|
||
|
||
if (TheScene->bShowSceneInfo)
|
||
CheckMenuItem(hMenu,ID_CAMCAM_DRAWSCENEINFOS,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_CAMCAM_DRAWSCENEINFOS,MF_UNCHECKED);
|
||
|
||
if (TheScene->bDrawSound)
|
||
CheckMenuItem(hMenu,ID_CAMCAM_SHOWSOUND,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_CAMCAM_SHOWSOUND,MF_UNCHECKED);
|
||
|
||
if (TheScene->WSPC && TheScene->WSPC->bDrawHands)
|
||
CheckMenuItem(hMenu,ID_CAMCAM_SHOWHANDS,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_CAMCAM_SHOWHANDS,MF_UNCHECKED);
|
||
|
||
if (AlwaysOnTop)
|
||
CheckMenuItem(hMenu,ID_CAMCAM_ALWAYSONTOP,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_CAMCAM_ALWAYSONTOP,MF_UNCHECKED);
|
||
|
||
#ifndef SKIMMED_NET
|
||
if (TheScene->NetObj && TheScene->NetObj->NET_SendToMe)
|
||
CheckMenuItem(hMenu,ID_DEBUG_NETSENDTOME,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_DEBUG_NETSENDTOME,MF_UNCHECKED);
|
||
#endif
|
||
|
||
|
||
if (TheScene->SkipFunctions & SKIP_NOFPS)
|
||
CheckMenuItem(hMenu,ID_DEBUG_FPS,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_DEBUG_FPS,MF_UNCHECKED);
|
||
|
||
if (TheScene->UseGDI)
|
||
CheckMenuItem(hMenu,ID_DEBUG_USEGDI,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_DEBUG_USEGDI,MF_UNCHECKED);
|
||
|
||
#ifdef ONLINE_MODE
|
||
if (Account.isYouUpAdVisible())
|
||
CheckMenuItem(hMenu,ID_DEBUG_DRAWADVERTISING,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_DEBUG_DRAWADVERTISING,MF_UNCHECKED);
|
||
|
||
if (!Account.isYouUpAdInit())
|
||
CheckMenuItem(hMenu,ID_DEBUG_CLOSEADVERTISING,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_DEBUG_CLOSEADVERTISING,MF_UNCHECKED);
|
||
#endif
|
||
|
||
if (TheScene->LayederWindow)
|
||
CheckMenuItem(hMenu,ID_CAMCAM_TRANSPARENTWINDOW,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_CAMCAM_TRANSPARENTWINDOW,MF_UNCHECKED);
|
||
|
||
if (TheScene->SkipFunctions & SKIP_NODEBUG)
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_DEBUGRASTERLUA,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_DEBUGRASTERLUA,MF_UNCHECKED);
|
||
|
||
if (TheScene->SkipFunctions & SKIP_NOMOSAIC)
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_MOSAIC,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_MOSAIC,MF_UNCHECKED);
|
||
|
||
|
||
if (TheScene->SkipFunctions & SKIP_TRACKER)
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_TRACKER,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_TRACKER,MF_UNCHECKED);
|
||
|
||
if (TheScene->SkipFunctions & SKIP_SKINNING)
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_SKINNING,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_SKINNING,MF_UNCHECKED);
|
||
|
||
if (TheScene->SkipFunctions & SKIP_LIGHTING)
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_LIGHTS,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_LIGHTS,MF_UNCHECKED);
|
||
|
||
if (TheScene->SkipFunctions & SKIP_SWITCH_NEW_INTEREST)
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_SWITCHTONEWINTEREST,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_SWITCHTONEWINTEREST,MF_UNCHECKED);
|
||
|
||
|
||
if (TheScene->SkipFunctions & SKIP_RENDER)
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_RENDERS,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_RENDERS,MF_UNCHECKED);
|
||
|
||
if (TheScene->SkipFunctions & SKIP_PICKING)
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_PICKING,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_PICKING,MF_UNCHECKED);
|
||
|
||
if (TheScene->SkipFunctions & SKIP_DRAWING)
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_DRAWINGS,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_DRAWINGS,MF_UNCHECKED);
|
||
|
||
if (TheScene->SkipFunctions & SKIP_MEDIA)
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_MEDIAS,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_MEDIAS,MF_UNCHECKED);
|
||
|
||
if (TheScene->SkipFunctions & SKIP_REVERSE)
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_REVERSE,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_REVERSE,MF_UNCHECKED);
|
||
|
||
if (TheScene->SkipFunctions & SKIP_AVI)
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_AVI,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_AVI,MF_UNCHECKED);
|
||
|
||
if (TheScene->SkipFunctions & SKIP_CAMERA)
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_CAMERA,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_CAMERA,MF_UNCHECKED);
|
||
|
||
if (TheScene->SkipFunctions & SKIP_EFFECTS)
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_EFFECTS,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_EFFECTS,MF_UNCHECKED);
|
||
|
||
if (TheScene->SkipFunctions & SKIP_SOUND)
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_SOUND,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_SOUND,MF_UNCHECKED);
|
||
|
||
if (TheScene->SkipFunctions & SKIP_PARTICLES)
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_PARTICLES,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_PARTICLES,MF_UNCHECKED);
|
||
|
||
if (TheScene->ID_TABLE[TheScene->CurrentID] &&
|
||
TheScene->ID_TABLE[TheScene->CurrentID]->SF_U.ComputeMask)
|
||
CheckMenuItem(hMenu,ID_TRACKEUR_ACTIVEMASK,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_TRACKEUR_ACTIVEMASK,MF_UNCHECKED);
|
||
|
||
if (TheScene->WFlags & LUA_AUTO_RELOAD)
|
||
CheckMenuItem(hMenu,ID_TRAYICONMENU_LUAAUTORELOAD,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_TRAYICONMENU_LUAAUTORELOAD,MF_UNCHECKED);
|
||
|
||
#ifdef ONLINE_MODE
|
||
if (Account.isShopVisible())
|
||
CheckMenuItem(hMenu,ID_CAMCAM_OPENINTERNALBROWSER,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_CAMCAM_OPENINTERNALBROWSER,MF_UNCHECKED);
|
||
#endif
|
||
|
||
if (TheScene->SkipFunctions & SKIP_GLWRITE)
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_GLWRITE,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_GLWRITE,MF_UNCHECKED);
|
||
|
||
if (TheScene->SkipFunctions & SKIP_GLREAD)
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_GLREAD,MF_CHECKED);
|
||
else
|
||
CheckMenuItem(hMenu,ID_SKIPFUNCTION_GLREAD,MF_UNCHECKED);
|
||
|
||
CheckMenuItem(hMenu,ID_DRIVER_D3D,MF_UNCHECKED);
|
||
CheckMenuItem(hMenu,ID_DRIVER_OPENGL,MF_UNCHECKED);
|
||
CheckMenuItem(hMenu,ID_DRIVER_NULL,MF_UNCHECKED);
|
||
|
||
if (TheScene->DI->GetDriverType() == 0) CheckMenuItem(hMenu,ID_DRIVER_OPENGL,MF_CHECKED);
|
||
if (TheScene->DI->GetDriverType() == 1) CheckMenuItem(hMenu,ID_DRIVER_D3D,MF_CHECKED);
|
||
if (TheScene->DI->GetDriverType() == 2) CheckMenuItem(hMenu,ID_DRIVER_NULL,MF_CHECKED);
|
||
|
||
}
|
||
|
||
|
||
void ContextualMenu()
|
||
{
|
||
HMENU hMenu;
|
||
if (!TheScene) return;
|
||
ShowCursor(true);
|
||
|
||
#ifndef USER_MODE
|
||
if(hMenu = LoadMenu(hBigInstance, (LPCTSTR) MAKEINTRESOURCE(IDR_MENU1)))
|
||
#else
|
||
if(hMenu = LoadMenu(hBigInstance, (LPCTSTR) MAKEINTRESOURCE(IDR_MENU2)))
|
||
#endif // USER_MODE
|
||
{
|
||
ULONG uIDNewItem;
|
||
uIDNewItem = 0xC0DE2004;
|
||
hMenu = GetSubMenu(hMenu, 0);
|
||
|
||
CheckMenu(hMenu);
|
||
if(hMenu != NULL)
|
||
{
|
||
POINT pt;
|
||
GetCursorPos(&pt);
|
||
SetForegroundWindow(hWnd);
|
||
TrackPopupMenu(hMenu, TPM_LEFTALIGN | TPM_RIGHTBUTTON , pt.x, pt.y, 0, hWnd, NULL);
|
||
}
|
||
}
|
||
ShowCursor(0);
|
||
}
|
||
|
||
TCHAR NameText[1024];
|
||
|
||
INT_PTR CALLBACK DialogProcName( HWND hwndDlg,
|
||
UINT uMsg,
|
||
WPARAM wParam,
|
||
LPARAM lParam
|
||
)
|
||
{
|
||
switch (uMsg)
|
||
{
|
||
case WM_CLOSE:
|
||
EndDialog(hwndDlg, wParam);
|
||
return TRUE;
|
||
case WM_MOVING:
|
||
//Blitte();
|
||
return TRUE;
|
||
case WM_COMMAND:
|
||
switch (LOWORD(wParam))
|
||
{
|
||
case IDOK:
|
||
GetDlgItemText(hwndDlg,IDC_EDIT1,NameText,1024);
|
||
EndDialog(hwndDlg, wParam);
|
||
return TRUE;
|
||
}
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
|
||
|
||
INT_PTR CALLBACK DialogVideoCapture( HWND hwndDlg,
|
||
UINT uMsg,
|
||
WPARAM wParam,
|
||
LPARAM lParam)
|
||
{
|
||
int curSel = -1;
|
||
char AVILocalCompressor[256];
|
||
switch (uMsg)
|
||
{
|
||
case WM_INITDIALOG:
|
||
GetVideoEncodersNames(CompressorsNames, &NbCompressorsNames, 64);
|
||
for (int i=0; i<NbCompressorsNames; i++)
|
||
{
|
||
if (SendDlgItemMessage(hwndDlg, IDC_COMBO_VIDEO_COMPRESSOR,CB_FINDSTRING,0,(LPARAM)CompressorsNames[i]) == CB_ERR)
|
||
SendDlgItemMessage(hwndDlg, IDC_COMBO_VIDEO_COMPRESSOR,CB_ADDSTRING,0,(LPARAM)CompressorsNames[i]);
|
||
}
|
||
|
||
SendDlgItemMessage(hwndDlg, IDC_COMBO_VIDEO_COMPRESSOR,CB_SELECTSTRING,0,(LPARAM)AVICompressor);
|
||
if (SendDlgItemMessage(hwndDlg, IDC_COMBO_VIDEO_COMPRESSOR,CB_FINDSTRING,0,(LPARAM)AVICompressor) != CB_ERR)
|
||
{
|
||
if (GetFilterPropertyByName(AVICompressor, false))
|
||
EnableWindow(GetDlgItem(hwndDlg, IDC_BUTTON_CONFIG_COMPRESSOR), true);
|
||
else
|
||
EnableWindow(GetDlgItem(hwndDlg, IDC_BUTTON_CONFIG_COMPRESSOR), false);
|
||
}
|
||
CheckDlgButton(hwndDlg,IDC_CHECK_USE_MICRO_SOUND,AVIMicroSound);
|
||
|
||
return TRUE;
|
||
|
||
case WM_CLOSE:
|
||
EndDialog(hwndDlg, wParam);
|
||
return TRUE;
|
||
case WM_MOVING:
|
||
//Blitte();
|
||
return TRUE;
|
||
case WM_COMMAND:
|
||
switch (LOWORD(wParam))
|
||
{
|
||
case IDOK:
|
||
GetDlgItemText(hwndDlg,IDC_COMBO_VIDEO_COMPRESSOR,AVILocalCompressor,256);
|
||
AVIMicroSound = IsDlgButtonChecked(hwndDlg, IDC_CHECK_USE_MICRO_SOUND);
|
||
if (!*AVILocalCompressor)
|
||
{
|
||
MessageBox(hwndDlg,"Please select video compressor","Camcam message",MB_OK|MB_SYSTEMMODAL|MB_ICONWARNING);
|
||
return TRUE;
|
||
}
|
||
strcpy(AVICompressor, AVILocalCompressor);
|
||
EndDialog(hwndDlg, IDOK);
|
||
return TRUE;
|
||
case IDCANCEL:
|
||
EndDialog(hwndDlg, IDCANCEL);
|
||
return TRUE;
|
||
case IDC_BUTTON_CONFIG_COMPRESSOR:
|
||
GetDlgItemText(hwndDlg,IDC_COMBO_VIDEO_COMPRESSOR,AVILocalCompressor,256);
|
||
if (*AVILocalCompressor)
|
||
{
|
||
GetFilterPropertyByName(AVILocalCompressor, true);
|
||
}
|
||
return TRUE;
|
||
case IDC_COMBO_VIDEO_COMPRESSOR:
|
||
if (HIWORD(wParam) == CBN_SELCHANGE)
|
||
{
|
||
GetDlgItemText(hwndDlg,IDC_COMBO_VIDEO_COMPRESSOR,AVILocalCompressor,256);
|
||
if (GetFilterPropertyByName(AVILocalCompressor, false))
|
||
EnableWindow(GetDlgItem(hwndDlg, IDC_BUTTON_CONFIG_COMPRESSOR), true);
|
||
else
|
||
EnableWindow(GetDlgItem(hwndDlg, IDC_BUTTON_CONFIG_COMPRESSOR), false);
|
||
}
|
||
return TRUE;
|
||
}
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
BOOL GetAVICompressor(BOOL forceDialog, char *AVICompressorStr)
|
||
{
|
||
if (forceDialog || !*AVICompressor)
|
||
{
|
||
if (DialogBox(hBigInstance,MAKEINTRESOURCE(IDD_DIALOG_VIDEO_CAPTURE_PROPERTIES), hWnd, DialogVideoCapture) == IDOK)
|
||
{
|
||
char MicroSound[64];
|
||
TheScene->SetIniValue(CamcamCCM, "AVICompressor", AVICompressor);
|
||
sprintf(MicroSound, "%i", AVIMicroSound);
|
||
TheScene->SetIniValue(CamcamCCM, "AVIMicroSound", MicroSound);
|
||
TheScene->SaveIniFile(CamcamCCM);
|
||
} else
|
||
return false;
|
||
}
|
||
if (AVICompressorStr != NULL)
|
||
strcpy(AVICompressorStr, AVICompressor);
|
||
return true;
|
||
}
|
||
|
||
|
||
|
||
INT_PTR CALLBACK DialogWebcamSelect( HWND hwndDlg,
|
||
UINT uMsg,
|
||
WPARAM wParam,
|
||
LPARAM lParam)
|
||
{
|
||
int curSel = -1;
|
||
char CurrLocalWebCam[256];
|
||
switch (uMsg)
|
||
{
|
||
case WM_INITDIALOG:
|
||
for (int i=0; i<NbWebCams; i++)
|
||
{
|
||
if (SendDlgItemMessage(hwndDlg, IDC_LIST_WEBCAM,CB_FINDSTRING,0,(LPARAM)WebCamNames[i]) == CB_ERR)
|
||
SendDlgItemMessage(hwndDlg, IDC_LIST_WEBCAM,CB_ADDSTRING,0,(LPARAM)WebCamNames[i]);
|
||
}
|
||
|
||
SendDlgItemMessage(hwndDlg, IDC_LIST_WEBCAM,CB_SELECTSTRING,0,(LPARAM)CurrWebCam);
|
||
if (SendDlgItemMessage(hwndDlg, IDC_LIST_WEBCAM,CB_FINDSTRING,0,(LPARAM)CurrWebCam) != CB_ERR)
|
||
{
|
||
if (GetWebCamFilterPropertyByName(CurrWebCam, false))
|
||
EnableWindow(GetDlgItem(hwndDlg, IDC_BUTTON_CONFIG_WEBCAM), true);
|
||
else
|
||
EnableWindow(GetDlgItem(hwndDlg, IDC_BUTTON_CONFIG_WEBCAM), false);
|
||
}
|
||
return TRUE;
|
||
case WM_CLOSE:
|
||
EndDialog(hwndDlg, wParam);
|
||
return TRUE;
|
||
case WM_MOVING:
|
||
//Blitte();
|
||
return TRUE;
|
||
case WM_COMMAND:
|
||
switch (LOWORD(wParam))
|
||
{
|
||
case IDOK:
|
||
GetDlgItemText(hwndDlg,IDC_LIST_WEBCAM,CurrLocalWebCam,256);
|
||
if (!*CurrLocalWebCam)
|
||
{
|
||
MessageBox(hwndDlg,"Please select webcam","Camcam message",MB_OK|MB_SYSTEMMODAL|MB_ICONWARNING);
|
||
return TRUE;
|
||
}
|
||
if (strcmp(CurrWebCam, CurrLocalWebCam))
|
||
{
|
||
strcpy(CurrWebCam, CurrLocalWebCam);
|
||
MessageBox(hwndDlg,"Please restart Camcam now to use the new camera","Camcam message",MB_OK|MB_SYSTEMMODAL|MB_ICONINFORMATION);
|
||
}
|
||
EndDialog(hwndDlg, IDOK);
|
||
return TRUE;
|
||
case IDCANCEL:
|
||
EndDialog(hwndDlg, IDCANCEL);
|
||
return TRUE;
|
||
case IDC_BUTTON_CONFIG_WEBCAM:
|
||
GetDlgItemText(hwndDlg,IDC_LIST_WEBCAM,CurrLocalWebCam,256);
|
||
if (*CurrLocalWebCam)
|
||
{
|
||
GetWebCamFilterPropertyByName(CurrLocalWebCam, true);
|
||
}
|
||
return TRUE;
|
||
case IDC_LIST_WEBCAM:
|
||
if (HIWORD(wParam) == CBN_SELCHANGE)
|
||
{
|
||
GetDlgItemText(hwndDlg,IDC_LIST_WEBCAM,CurrLocalWebCam,256);
|
||
if (GetWebCamFilterPropertyByName(CurrLocalWebCam, false))
|
||
EnableWindow(GetDlgItem(hwndDlg, IDC_BUTTON_CONFIG_WEBCAM), true);
|
||
else
|
||
EnableWindow(GetDlgItem(hwndDlg, IDC_BUTTON_CONFIG_WEBCAM), false);
|
||
}
|
||
return TRUE;
|
||
}
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
|
||
void ManualBootStart()
|
||
{
|
||
if (TheScene && TheScene->ID_TABLE[TheScene->CurrentID])
|
||
{
|
||
TheScene->ID_TABLE[TheScene->CurrentID]->SF_U.Booted = 1;
|
||
TheScene->ID_TABLE[TheScene->CurrentID]->SF_U.Ready2Learn = 1;
|
||
TheScene->ID_TABLE[TheScene->CurrentID]->SF_U.DrawMesh = 0;
|
||
TheScene->bManualBoot = 0;
|
||
}
|
||
}
|
||
void WindowToggleHideBorders()
|
||
{
|
||
HideBorders ^= 1;
|
||
int Res = GetWindowLong(hWnd, GWL_STYLE);
|
||
|
||
static RECT wDelta;
|
||
RECT wRect;
|
||
RECT wBounds;
|
||
|
||
BOOL GetWindowClientRect(HWND wnd, RECT *clientRect);
|
||
GetWindowClientRect(hWnd, &wBounds);
|
||
GetWindowRect(hWnd, &wRect);
|
||
|
||
if (HideBorders)
|
||
{
|
||
SetRect(&wDelta,wBounds.left - wRect.left, wBounds.top - wRect.top,
|
||
wRect.right - wBounds.right, wRect.bottom - wBounds.bottom);
|
||
|
||
Res &= ~(WS_MAXIMIZEBOX|WS_MINIMIZEBOX|WS_SYSMENU|WS_CAPTION | WS_THICKFRAME | WS_BORDER ); // Turn it off
|
||
SetWindowLong(hWnd, GWL_STYLE, Res);
|
||
|
||
SetWindowPos(hWnd, NULL, wBounds.left, wBounds.top, wBounds.right - wBounds.left, wBounds.bottom - wBounds.top, SWP_SHOWWINDOW);
|
||
}
|
||
else
|
||
{
|
||
Res |= (WS_MAXIMIZEBOX|WS_MINIMIZEBOX|WS_SYSMENU|WS_CAPTION | WS_THICKFRAME | WS_BORDER ); // Turn it on
|
||
SetWindowLong(hWnd, GWL_STYLE, Res);
|
||
|
||
SetWindowPos(hWnd, NULL,wBounds.left - wDelta.left,
|
||
wBounds.top - wDelta.top,
|
||
wBounds.right - wBounds.left + wDelta.left + wDelta.right,
|
||
wBounds.bottom - wBounds.top + wDelta.top + wDelta.bottom, SWP_SHOWWINDOW);
|
||
}
|
||
|
||
MustUpdate = 1;
|
||
}
|
||
void WindowToggleTopMost()
|
||
{
|
||
if (AlwaysOnTop)
|
||
{
|
||
SetWindowPos(hWnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE);
|
||
AlwaysOnTop = 0;
|
||
} else
|
||
{
|
||
SetWindowPos(hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE);
|
||
AlwaysOnTop = 1;
|
||
}
|
||
}
|
||
|
||
int WindowToggleFullScreen(int Mode)
|
||
{
|
||
if (Mode == -1) return IsMaximized;
|
||
if (IsMaximized == Mode) return IsMaximized;
|
||
|
||
if (IsMaximized)
|
||
{
|
||
ShowWindow(hWnd,SW_RESTORE);
|
||
|
||
UpdateAllBack(TheScene);
|
||
IsMaximized = 0;
|
||
}
|
||
else
|
||
{
|
||
if (!AlwaysOnTop)
|
||
{
|
||
WindowToggleTopMost();
|
||
ShowWindow(hWnd,SW_MAXIMIZE);
|
||
WindowToggleTopMost();
|
||
} else
|
||
ShowWindow(hWnd,SW_MAXIMIZE);
|
||
|
||
UpdateAllBack(TheScene);
|
||
IsMaximized = 1;
|
||
}
|
||
return IsMaximized;
|
||
}
|
||
|
||
BOOL GetDrawWindowRect(RECT *winRect, int XSize, int YSize, HWND hWnd) ;
|
||
|
||
void VectInMouseEnv(Vector *T, int mouseX, int mouseY, float focale, HWND hWnd)
|
||
{
|
||
float OldLenght = T->Norm();
|
||
RECT SmalwinRect;
|
||
int LX,LY;
|
||
GetDrawWindowRect(&SmalwinRect, TheScene->XSize, TheScene->YSize, hWnd);
|
||
LX = SmalwinRect.right - SmalwinRect.left;
|
||
LY = SmalwinRect.bottom - SmalwinRect.top;
|
||
|
||
T->z = 5.0f;
|
||
T->x = ((float)(TheScene->MouseX - SmalwinRect.left)) / (float)LX - 0.5f;
|
||
T->y = ((float)(LX + LY)*0.5f + -(TheScene->MouseY-SmalwinRect.top)) / (float)LX - 0.5f;
|
||
*T *= 2.0f;
|
||
T->z = focale;
|
||
|
||
T->Normalize();
|
||
*T *= OldLenght;
|
||
}
|
||
|
||
char* GetShortcutTarget(char* Link)
|
||
{
|
||
HRESULT hres;
|
||
|
||
Link = strlwr(Link);
|
||
|
||
IShellLink* psl;
|
||
|
||
//Create the ShellLink object
|
||
hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
|
||
IID_IShellLink, (LPVOID*) &psl);
|
||
|
||
if (SUCCEEDED(hres))
|
||
{
|
||
IPersistFile* ppf;
|
||
//Bind the ShellLink object to the Persistent File
|
||
hres = psl->QueryInterface( IID_IPersistFile, (LPVOID *) &ppf);
|
||
if (SUCCEEDED(hres))
|
||
{
|
||
WORD wsz[MAX_PATH];
|
||
//Get a UNICODE wide string wsz from the Link path
|
||
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, Link, -1, (LPWSTR)wsz, MAX_PATH);
|
||
|
||
//Read the link into the persistent file
|
||
hres = ppf->Load((LPWSTR)wsz, 0);
|
||
|
||
if (SUCCEEDED(hres))
|
||
{
|
||
//Read the target information from the link object
|
||
//UNC paths are supported (SLGP_UNCPRIORITY)
|
||
Link = (char*)CC_realloc(Link, 1024);
|
||
psl->GetPath(Link, 1024, NULL, SLGP_UNCPRIORITY);
|
||
}
|
||
}
|
||
}
|
||
psl->Release();
|
||
//Return the Target and the Argument as a CString
|
||
return Link;
|
||
}
|
||
|
||
|
||
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||
{
|
||
::hWnd = hWnd;
|
||
|
||
if (!(TheScene &&
|
||
(TheScene->InputHook(message, wParam, lParam) ||
|
||
TheScene->LuaHandle(message, wParam, lParam))))
|
||
switch (message)
|
||
{
|
||
#ifndef USER_MODE
|
||
case WM_CREATE:
|
||
DragAcceptFiles(hWnd,TRUE);
|
||
return 0;
|
||
break;
|
||
|
||
case WM_DROPFILES:
|
||
{
|
||
HDROP hDropFiles;
|
||
int nChar;
|
||
char* nameFile;
|
||
|
||
hDropFiles = (HDROP)wParam;
|
||
nChar = 1 + DragQueryFile(hDropFiles,0,NULL,0);
|
||
nameFile = (char*)CC_malloc(nChar);
|
||
DragQueryFile(hDropFiles,0,nameFile,nChar);
|
||
|
||
if (GetFileNameExtend(nameFile) == '.LNK')
|
||
{
|
||
nameFile = GetShortcutTarget(nameFile);
|
||
}
|
||
|
||
|
||
if (GetFileNameExtend(nameFile) == '.LUA')
|
||
{
|
||
TheScene->currentScript = 0;
|
||
sprintf(TheScene->ScriptNameStack[TheScene->currentScript],"%s", nameFile);
|
||
TheScene->SetIniValue(CamcamCCM, "lastScriptPath", nameFile);
|
||
TheScene->SaveIniFile(CamcamCCM);
|
||
TheScene->LoadLua(TheScene->ScriptNameStack[TheScene->currentScript], 1);
|
||
}
|
||
|
||
if (GetFileNameExtend(nameFile) == '.ZCC')
|
||
{
|
||
TheScene->UNPACK(nameFile,1,0);
|
||
}
|
||
|
||
CC_free(nameFile);
|
||
DragFinish(hDropFiles);
|
||
}
|
||
break;
|
||
#endif // USER_MODE
|
||
case WM_SYSCOMMAND:
|
||
if (wParam==SC_KEYMENU)
|
||
{
|
||
// do nothing when alt key or F10 key is pressed
|
||
return TRUE;
|
||
}
|
||
return DefWindowProc(hWnd, message, wParam, lParam);
|
||
break;
|
||
|
||
case MYMSG_NOTIFYICON:
|
||
switch(lParam)
|
||
{
|
||
#ifndef USER_MODE
|
||
case 1029:
|
||
if (MessageBox(hWnd,UpdateTextTEXT,"Camcam message",MB_YESNO|MB_SYSTEMMODAL|MB_ICONWARNING) == IDYES)
|
||
API_UPDATE_EXE();
|
||
return TRUE;
|
||
#endif // USER_MODE
|
||
|
||
|
||
case WM_RBUTTONDOWN:
|
||
ContextualMenu();
|
||
break ;
|
||
}
|
||
return DefWindowProc(hWnd, message, wParam, lParam);
|
||
break;
|
||
|
||
case WM_CLOSE:
|
||
API_EXIT();
|
||
return TRUE;
|
||
|
||
case WM_COMMAND:
|
||
int wmId, wmEvent;
|
||
wmId = LOWORD(wParam);
|
||
wmEvent = HIWORD(wParam);
|
||
// Parse the menu selections:
|
||
switch (wmId)
|
||
{
|
||
// Common Menu
|
||
case ID_TRAYICONMENU_EXIT:
|
||
#ifdef USER_MODE
|
||
TheScene->LuaProcessEvent(EVT_onExit);
|
||
#else
|
||
DestroyWindow(hWnd);
|
||
API_EXIT();
|
||
#endif
|
||
break;
|
||
case ID_CAMCAM_CONFIGURE_AVI:
|
||
GetAVICompressor(true, NULL);
|
||
break;
|
||
case ID_CAMCAM_SELECTDEFAULTWEBCAM:
|
||
if (TheScene)
|
||
{
|
||
TheScene->ulLockMode++;
|
||
if (DialogBox(hBigInstance,MAKEINTRESOURCE(IDD_DIALOG_WEBCAM_SELECTION), hWnd, DialogWebcamSelect) == IDOK)
|
||
{
|
||
if (*CurrWebCam)
|
||
{
|
||
TheScene->SetIniValue(CamcamCCM, "CurrWebCam", CurrWebCam);
|
||
TheScene->SaveIniFile(CamcamCCM);
|
||
}
|
||
}
|
||
TheScene->ulLockMode--;
|
||
if (TheScene->ulLockMode == -1)
|
||
TheScene->ulLockMode = 0;
|
||
}
|
||
break;
|
||
|
||
case ID_TRAYICONMENU_OPENMEDIADIRECTORY:
|
||
{
|
||
char FullName[2048];
|
||
sprintf(FullName,"explorer %s", CurrentDir);
|
||
WinExec(FullName,SW_SHOW);
|
||
}
|
||
break;
|
||
case ID_CAMCAM_EXPORTAVI:
|
||
if (aviEncoder == 0)
|
||
{
|
||
char Compressor[256];
|
||
if (!TheScene->UseGDI)
|
||
{
|
||
TheScene->ChangeGDIMode(!TheScene->UseGDI);
|
||
TheScene->ulFullRefresh = true;
|
||
}
|
||
|
||
if (GetAVICompressor(false, Compressor))
|
||
{
|
||
char Name[2048];
|
||
memset(Name, 0, sizeof(Name));
|
||
CDLG_USR_GetFileName(Name, "AVI File|*.AVI",hWnd,0);
|
||
if (Name[0] == 0) break;
|
||
AddFileNameExtend(Name, '.AVI');
|
||
|
||
if (SaveInFile_Config(Name, AVIMicroSound, Compressor))
|
||
{
|
||
SaveInFile_Run();
|
||
aviEncoder = 1;
|
||
} else {
|
||
*AVICompressor = 0;
|
||
MessageBox(hWnd, "Error creating avi file\nPlease change compressor filter","Camcam message",MB_OK|MB_SYSTEMMODAL|MB_ICONERROR);
|
||
}
|
||
}
|
||
} else
|
||
{
|
||
SaveInFile_Stop();
|
||
aviEncoder = 0;
|
||
}
|
||
break;
|
||
|
||
case ID_TRACKEUR_LOADID:
|
||
{
|
||
char Name[2048];
|
||
CDLG_USR_GetFileName(Name, "ID file|*.IDx",hWnd,0,"IDS");
|
||
TheScene->ID_Load(0,Name);
|
||
break;
|
||
}
|
||
case ID_TRACKEUR_SAVEID:
|
||
{
|
||
char Name[2048];
|
||
CDLG_USR_GetFileName(Name, "ID file|*.IDx",hWnd,0,"IDS");
|
||
TheScene->ID_Save(0,Name);
|
||
break;
|
||
}
|
||
case ID_CAMCAM_INVERTWEBCAMHORIZONTALLY:
|
||
{
|
||
TheScene->WebCamXInvert ^= 1;
|
||
break;
|
||
}
|
||
case ID_CAMCAM_INVERTWEBCAMVERTICALLY:
|
||
{
|
||
TheScene->WebCamYInvert ^= 1;
|
||
break;
|
||
}
|
||
case ID_CAMCAM_FORCEWIREFRAME:
|
||
{
|
||
TheScene->ulForceWireFrame ^= 1;
|
||
break;
|
||
}
|
||
case ID_CAMCAM_TRANSPARENTWINDOW:
|
||
{
|
||
TransparentWindowSet(!TheScene->LayederWindow);
|
||
break;
|
||
}
|
||
case ID_DEBUG_USEGDI:
|
||
{
|
||
TheScene->ChangeGDIMode(!TheScene->UseGDI);
|
||
TheScene->ulFullRefresh = true;
|
||
}
|
||
break;
|
||
#ifdef ONLINE_MODE
|
||
case ID_DEBUG_DRAWADVERTISING:
|
||
{
|
||
Account.setYouUpAdPageVisible( !Account.isYouUpAdVisible() );
|
||
TheScene->forceAdVisibility = true;
|
||
}
|
||
break;
|
||
case ID_DEBUG_CLOSEADVERTISING:
|
||
{
|
||
Account.closeYouUpAdPage();
|
||
}
|
||
break;
|
||
#endif
|
||
case ID_CAMCAM_SHOWHANDS:
|
||
{
|
||
TheScene->WSPC->bDrawHands ^= 1;
|
||
break;
|
||
}
|
||
|
||
case ID_CAMCAM_ALWAYSONTOP:
|
||
{
|
||
WindowToggleTopMost();
|
||
break;
|
||
}
|
||
|
||
case ID_SKIPFUNCTION_MOSAIC:
|
||
TheScene->SkipFunctions ^= SKIP_NOMOSAIC;
|
||
break;
|
||
case ID_SKIPFUNCTION_DEBUGRASTERLUA:
|
||
TheScene->SkipFunctions ^= SKIP_NODEBUG;
|
||
break;
|
||
case ID_SKIPFUNCTION_TRACKER:
|
||
TheScene->SkipFunctions ^= SKIP_TRACKER;
|
||
break;
|
||
case ID_SKIPFUNCTION_RENDERS:
|
||
TheScene->SkipFunctions ^= SKIP_RENDER;
|
||
break;
|
||
case ID_SKIPFUNCTION_PICKING:
|
||
TheScene->SkipFunctions ^= SKIP_PICKING;
|
||
break;
|
||
case ID_SKIPFUNCTION_DRAWINGS:
|
||
TheScene->SkipFunctions ^= SKIP_DRAWING;
|
||
break;
|
||
case ID_SKIPFUNCTION_MEDIAS:
|
||
TheScene->SkipFunctions ^= SKIP_MEDIA;
|
||
break;
|
||
case ID_SKIPFUNCTION_REVERSE:
|
||
TheScene->SkipFunctions ^= SKIP_REVERSE;
|
||
break;
|
||
case ID_SKIPFUNCTION_AVI:
|
||
TheScene->SkipFunctions ^= SKIP_AVI;
|
||
break;
|
||
case ID_SKIPFUNCTION_CAMERA:
|
||
TheScene->SkipFunctions ^= SKIP_CAMERA;
|
||
break;
|
||
case ID_SKIPFUNCTION_EFFECTS:
|
||
TheScene->SkipFunctions ^= SKIP_EFFECTS;
|
||
break;
|
||
case ID_SKIPFUNCTION_SOUND:
|
||
TheScene->SkipFunctions ^= SKIP_SOUND;
|
||
break;
|
||
case ID_SKIPFUNCTION_PARTICLES:
|
||
TheScene->SkipFunctions ^= SKIP_PARTICLES;
|
||
break;
|
||
case ID_SKIPFUNCTION_SKINNING:
|
||
TheScene->SkipFunctions ^= SKIP_SKINNING;
|
||
break;
|
||
case ID_SKIPFUNCTION_LIGHTS:
|
||
TheScene->SkipFunctions ^= SKIP_LIGHTING;
|
||
break;
|
||
case ID_SKIPFUNCTION_SWITCHTONEWINTEREST:
|
||
TheScene->SkipFunctions ^= SKIP_SWITCH_NEW_INTEREST;
|
||
break;
|
||
case ID_SKIPFUNCTION_GLWRITE:
|
||
TheScene->SkipFunctions ^= SKIP_GLWRITE;
|
||
break;
|
||
case ID_SKIPFUNCTION_GLREAD:
|
||
TheScene->SkipFunctions ^= SKIP_GLREAD;
|
||
break;
|
||
|
||
case ID_TRACKEUR_ACTIVEMASK:
|
||
if (TheScene && TheScene->ID_TABLE[TheScene->CurrentID])
|
||
{
|
||
TheScene->ID_TABLE[TheScene->CurrentID]->SF_U.ComputeMask ^= 1;
|
||
}
|
||
break;
|
||
|
||
case ID_TRAYICONMENU_RESETTRACKEUR:
|
||
if (TheScene->ID_TABLE[TheScene->CurrentID])
|
||
{
|
||
TheScene->ID_Reset(TheScene->CurrentID);
|
||
TheScene->ID_AutoStart(TheScene->CurrentID);
|
||
}
|
||
break;
|
||
case ID_CAMCAM_HIDEBORDERS:
|
||
WindowToggleHideBorders();
|
||
break;
|
||
case ID_CAMCAM_FULLSCREEN:
|
||
WindowToggleFullScreen(1-IsMaximized);
|
||
break;
|
||
|
||
case ID_TRACKEUR_MANUALBOOT:
|
||
if (TheScene->ID_TABLE[TheScene->CurrentID])
|
||
{
|
||
TheScene->ID_Reset(TheScene->CurrentID);
|
||
TheScene->oldManualBoot = 0;
|
||
TheScene->bManualBoot = 1;
|
||
TheScene->ID_TABLE[TheScene->CurrentID]->SF_U.DrawMesh = 1;
|
||
TheScene->ID_TABLE[TheScene->CurrentID]->SF_U.CamPlaced = 0;
|
||
TheScene->ID_TABLE[TheScene->CurrentID]->CurrentMatrix_U.T.z = 90.0f;
|
||
TheScene->ID_TABLE[TheScene->CurrentID]->SF_U.FromScratch = 0;
|
||
}
|
||
break;
|
||
case ID_TRACKEUR_MANUALBOOT_OLD:
|
||
if (TheScene->ID_TABLE[TheScene->CurrentID])
|
||
{
|
||
TheScene->ID_Reset(TheScene->CurrentID);
|
||
TheScene->oldManualBoot = 1;
|
||
TheScene->bManualBoot = 1;
|
||
TheScene->ID_TABLE[TheScene->CurrentID]->SF_U.DrawMesh = 1;
|
||
TheScene->ID_TABLE[TheScene->CurrentID]->SF_U.CamPlaced = 0;
|
||
TheScene->ID_TABLE[TheScene->CurrentID]->CurrentMatrix_U.T.z = 90.0f;
|
||
TheScene->ID_TABLE[TheScene->CurrentID]->SF_U.FromScratch = 0;
|
||
}
|
||
break;
|
||
case ID_TRACKEUR_MANUALADJUST:
|
||
if (TheScene && TheScene->ID_TABLE[TheScene->CurrentID])
|
||
{
|
||
RECT Rect1, Rect2;
|
||
int newMouseX, newMouseY;
|
||
MATRIX curMatrix;
|
||
Vector Scale(1,1,1);
|
||
|
||
GetDrawWindowRect(&Rect1, TheScene->XSize, TheScene->YSize, hWnd);
|
||
GetWindowRect(hWnd , &Rect2);
|
||
|
||
if (TheScene->ID_MEDIA[TheScene->MediaToTrack] && TheScene->ID_MEDIA[TheScene->MediaToTrack]->Tracks &&
|
||
TheScene->MediaCurrentTrack < TheScene->ID_MEDIA[TheScene->MediaToTrack]->Tracks->ulNumberOfTracks)
|
||
{
|
||
int frIdx;
|
||
int curValidity;
|
||
|
||
frIdx = min(TheScene->ID_MEDIA[TheScene->MediaToTrack]->Tracks->TracksPtrs[TheScene->MediaCurrentTrack].ulNumberOfMC - 1,
|
||
TheScene->ID_MEDIA[TheScene->MediaToTrack]->ulCurrentFrame);
|
||
for (; frIdx > 0; frIdx--)
|
||
{
|
||
if (IsMatriceCompressedNull(&TheScene->ID_MEDIA[TheScene->MediaToTrack]->Tracks->TracksPtrs[TheScene->MediaCurrentTrack].pAnimation[frIdx]))
|
||
continue;
|
||
curValidity = TheScene->ID_MEDIA[TheScene->MediaToTrack]->Tracks->Get(TheScene->MediaCurrentTrack, (u32)frIdx, &curMatrix);
|
||
TheScene->ID_MEDIA[TheScene->MediaToTrack]->Tracks->GetScale(TheScene->MediaCurrentTrack, &Scale);
|
||
if ((curValidity & 0xFFFFFE) == 0)
|
||
break;
|
||
}
|
||
if (frIdx == 0)
|
||
{
|
||
curMatrix = TheScene->ID_TABLE[TheScene->CurrentID]->PrevMatrixOK;
|
||
Scale = TheScene->ID_TABLE[TheScene->CurrentID]->vModelScale;
|
||
}
|
||
} else {
|
||
curMatrix = TheScene->ID_TABLE[TheScene->CurrentID]->PrevMatrixOK;
|
||
Scale = TheScene->ID_TABLE[TheScene->CurrentID]->vModelScale;
|
||
}
|
||
TheScene->ID_Reset(TheScene->CurrentID);
|
||
TheScene->bManualBoot = 1;
|
||
TheScene->oldManualBoot = 1;
|
||
TheScene->ID_TABLE[TheScene->CurrentID]->SF_U.Booted=0;
|
||
|
||
TheScene->ID_TABLE[TheScene->CurrentID]->SF_U.DrawMesh = 1;
|
||
TheScene->ID_TABLE[TheScene->CurrentID]->SF_U.CamPlaced = 0;
|
||
TheScene->ID_TABLE[TheScene->CurrentID]->SF_U.FromScratch = 0;
|
||
TheScene->ID_TABLE[TheScene->CurrentID]->CurrentMatrix_U = curMatrix;
|
||
TheScene->ID_SetScale(TheScene->CurrentID, &Scale);
|
||
|
||
|
||
int LX, LY;
|
||
|
||
LX = Rect1.right - Rect1.left;
|
||
LY = Rect1.bottom - Rect1.top;
|
||
|
||
newMouseX = Rect2.left + Rect1.left + (float)LX/2.0f + (TheScene->GetCurrentFocale() * (float)LX * curMatrix.T.x/(2.0f*curMatrix.T.z));
|
||
newMouseY = Rect2.top + Rect1.bottom - ((float)LY/2.0f + (TheScene->GetCurrentFocale() * (float)LX * curMatrix.T.y/(2.0f*curMatrix.T.z)));
|
||
|
||
SetCursorPos(newMouseX, newMouseY);
|
||
}
|
||
break;
|
||
|
||
#ifndef USER_MODE
|
||
//case ID_TRACKEUR_GENERATETAG:
|
||
//extern void CreateTags();
|
||
//CreateTags();
|
||
// break;
|
||
case ID_TRAYICONMENU_RESTARTAPI:
|
||
API_RESTART(NULL);
|
||
break;
|
||
case ID_TRAYICONMENU_RESTARTDRIVERAPI:
|
||
API_RESTART("driver.lua");
|
||
break;
|
||
|
||
case ID_TRAYICONMENU_ReloadallTEXTURES:
|
||
for (int i = 0 ; i < MAX_INPMED ; i++)
|
||
{
|
||
if (TheScene->ID_MEDIA[i])
|
||
TheScene->ID_MEDIA[i]->ulFileAsbeenTouched = 2;
|
||
}
|
||
break;
|
||
|
||
case ID_CAMCAM_REMOVEWRITEONLY:
|
||
WinExec("ATTRIB -R /S .\\Media\\*.*",SW_SHOW);
|
||
break;
|
||
|
||
case ID_CAMCAM_SHOWSOUND:
|
||
TheScene->bDrawSound ^= 1;
|
||
break;
|
||
|
||
#ifndef SKIMMED_NET
|
||
case ID_DEBUG_NETSENDTOME:
|
||
if (TheScene->NetObj)
|
||
TheScene->NetObj->NET_SendToMe ^= 1;
|
||
break;
|
||
#endif
|
||
|
||
case ID_DEBUG_FPS:
|
||
TheScene->SkipFunctions ^= SKIP_NOFPS;
|
||
break;
|
||
|
||
case ID_CAMCAM_DRAWSCENEINFOS:
|
||
TheScene->bShowSceneInfo ^= 1;
|
||
break;
|
||
|
||
case ID_TRACKEUR_DRAWDEBUG1:
|
||
if (TheScene->WSPC) TheScene->WSPC->DrawDebug ^= 1;
|
||
break;
|
||
case ID_TRACKEUR_DRAWDEBUG2:
|
||
if (TheScene->WSPC) TheScene->WSPC->DrawDebug2 ^= 1;
|
||
break;
|
||
case ID_TRACKEUR_DRAWRASTERS:
|
||
TheScene->bDrawRasters ^= 1;
|
||
break;
|
||
|
||
case ID_CAMCAM_DRAWCONSOLE:
|
||
TheScene->bDrawConsole ^= 1;
|
||
break;
|
||
|
||
case ID_SCRIPT_CHANGESCRIPT:
|
||
{
|
||
char Name[2048];
|
||
memset(Name, 0, sizeof(Name));
|
||
CDLG_USR_GetFileName(Name, "Script file|*.LUA",hWnd,0);
|
||
if (Name[0] == 0) break;
|
||
TheScene->currentScript = 0;
|
||
sprintf(TheScene->ScriptNameStack[TheScene->currentScript],"%s", Name);
|
||
TheScene->SetIniValue(CamcamCCM, "lastScriptPath", Name);
|
||
TheScene->SaveIniFile(CamcamCCM);
|
||
if (GetFileNameExtend(TheScene->ScriptNameStack[TheScene->currentScript]) == '.LUA')
|
||
{
|
||
TheScene->LoadLua(TheScene->ScriptNameStack[TheScene->currentScript], 1);
|
||
}
|
||
break;
|
||
}
|
||
|
||
case ID_TRAYICONMENU_EDITSCRIPT:
|
||
ShellExecute(NULL, "open", TheScene->ScriptNameStack[TheScene->currentScript], NULL, NULL, SW_SHOW);
|
||
break;
|
||
|
||
case ID_TRAYICONMENU_SHOWSCRIPTHELP:
|
||
ShellExecute(NULL, "open", ".\\Script_Help.xml", NULL, NULL, SW_SHOW);
|
||
break;
|
||
|
||
case ID_TRAYICONMENU_LUAAUTORELOAD:
|
||
extern bool MonitorLuaChanges;
|
||
TheScene->WFlags ^= LUA_AUTO_RELOAD;
|
||
break;
|
||
|
||
case ID_SCRIPT_SHOWLOG:
|
||
{
|
||
char TEXT[2048];
|
||
sprintf(TEXT,"CMD /C START %s", ".\\Script_log.log");
|
||
WinExec(TEXT,SW_HIDE);
|
||
}
|
||
break;
|
||
case ID_RECORD_PACKCURRENT:
|
||
if (TheScene)
|
||
{
|
||
char Name[2048];
|
||
memset(Name, 0, sizeof(Name));
|
||
CDLG_USR_GetFileName(Name, "PACK File|*.ZCC",hWnd,0);
|
||
if (Name[0] == 0) break;
|
||
TheScene->PACK(Name,1);
|
||
}
|
||
break;
|
||
case ID_CAMCAM_PACKINTOEXE:
|
||
if (TheScene)
|
||
{
|
||
u32 FILEIO_PackIntoExe(WORLD *pScene,char *EXEname,char *DSTname);
|
||
char Name[2048];
|
||
memset(Name, 0, sizeof(Name));
|
||
CDLG_USR_GetFileName(Name, "EXE File|*.EXE",hWnd,0);
|
||
if (Name[0] == 0) break;
|
||
|
||
// FILEIO_PackIntoExe(char *EXEname);
|
||
char CurrentDir[2048];
|
||
GetModuleFileName(NULL,CurrentDir,2048);
|
||
FILEIO_PackIntoExe(TheScene,CurrentDir,Name);
|
||
|
||
}
|
||
break;
|
||
case ID_TRAYICONMENU_UNPACK:
|
||
if (TheScene)
|
||
{
|
||
char Name[2048];
|
||
memset(Name, 0, sizeof(Name));
|
||
CDLG_USR_GetFileName(Name, "PACK File|*.ZCC",hWnd,0);
|
||
if (Name[0] == 0) break;
|
||
TheScene->UNPACK(Name,1,0);
|
||
}
|
||
break;
|
||
|
||
case ID_CAMCAM_IMPORTALLMEDIAFROMY:
|
||
WinExec("XCOPY /Y /S Y:\\CAMCAM\\MEDIA\\*.* .\\MEDIA\\*.*",SW_HIDE);
|
||
break;
|
||
case ID_EDIT_THISMEDIA:
|
||
if (TheScene && TheScene->PickReportFinal.CollidedMediaName[0])
|
||
{
|
||
char TEXT[2048];
|
||
char TEXTCALL[2048];
|
||
FILE *F;
|
||
sprintf(TEXT,"%s", TheScene->PickReportFinal.CollidedMediaName);
|
||
F = CC_fopen(TEXT,"rb");
|
||
if (F)
|
||
{
|
||
CC_fclose(F);
|
||
sprintf(TEXTCALL,"CMD /C START %s", TEXT);
|
||
WinExec(TEXTCALL,SW_HIDE);
|
||
}
|
||
}
|
||
break;
|
||
case ID_EDIT_THISMATERIAL:
|
||
if (TheScene && TheScene->PickReportFinal.CollidedSmallMaterialName[0])
|
||
{
|
||
char TEXT[2048];
|
||
char TEXT2[2048];
|
||
FILE *F;
|
||
sprintf(TEXT,".\\media\\%s\\MODIFIED\\%s", TheScene->PickReportFinal.CollidedSmallSceneName , TheScene->PickReportFinal.CollidedSmallMaterialName);
|
||
F = CC_fopen(TEXT,"rb");
|
||
if (!F)
|
||
{
|
||
sprintf(TEXT2,".\\media\\%s\\%s", TheScene->PickReportFinal.CollidedSmallSceneName , TheScene->PickReportFinal.CollidedSmallMaterialName);
|
||
F = CC_fopen(TEXT2,"rb");
|
||
if (F)
|
||
{
|
||
CC_fclose(F);
|
||
CopyFile(TEXT2, TEXT,0);
|
||
F = CC_fopen(TEXT,"rb");
|
||
}
|
||
}
|
||
if (F)
|
||
{
|
||
CC_fclose(F);
|
||
sprintf(TEXT2,"CMD /C START %s", TEXT);
|
||
WinExec(TEXT2,SW_HIDE);
|
||
}
|
||
}
|
||
break;
|
||
case ID_EDIT_THISSMALLSCENE:
|
||
if (TheScene && TheScene->PickReportFinal.CollidedSmallSceneName[0])
|
||
{
|
||
char TEXT[2048];
|
||
char TEXT2[2048];
|
||
FILE *F;
|
||
sprintf(TEXT,".\\media\\%s\\MODIFIED\\SMSC.SSC", TheScene->PickReportFinal.CollidedSmallSceneName);
|
||
F = CC_fopen(TEXT,"rb");
|
||
if (!F)
|
||
{
|
||
sprintf(TEXT2,".\\media\\%s\\SMSC.SSC", TheScene->PickReportFinal.CollidedSmallSceneName);
|
||
F = CC_fopen(TEXT2,"rb");
|
||
if (F)
|
||
{
|
||
CC_fclose(F);
|
||
CopyFile(TEXT2, TEXT,0);
|
||
F = CC_fopen(TEXT,"rb");
|
||
}
|
||
}
|
||
if (F)
|
||
{
|
||
CC_fclose(F);
|
||
sprintf(TEXT2,"CMD /C START %s", TEXT);
|
||
WinExec(TEXT2,SW_HIDE);
|
||
}
|
||
}
|
||
break;
|
||
case ID_EDIT_THISOBJECT:
|
||
if (TheScene && TheScene->PickReportFinal.CollidedSmallSceneGameObjectName[0])
|
||
{
|
||
char TEXT[2048];
|
||
char TEXT2[2048];
|
||
FILE *F;
|
||
sprintf(TEXT,".\\media\\%s\\modified\\%s.OBJ", TheScene->PickReportFinal.CollidedSmallSceneName, TheScene->PickReportFinal.CollidedSmallSceneGameObjectName);
|
||
F = CC_fopen(TEXT,"rb");
|
||
if (!F)
|
||
{
|
||
sprintf(TEXT2,".\\media\\%s\\%s.OBJ", TheScene->PickReportFinal.CollidedSmallSceneName, TheScene->PickReportFinal.CollidedSmallSceneGameObjectName);
|
||
F = CC_fopen(TEXT2,"rb");
|
||
if (F)
|
||
{
|
||
CC_fclose(F);
|
||
CopyFile(TEXT2, TEXT,0);
|
||
F = CC_fopen(TEXT2,"rb");
|
||
}
|
||
}
|
||
if (F)
|
||
{
|
||
CC_fclose(F);
|
||
sprintf(TEXT2,"CMD /C START %s", TEXT);
|
||
WinExec(TEXT2,SW_HIDE);
|
||
}
|
||
}
|
||
break;
|
||
case ID_CAMCAM_IMPORTALLMEDIAFROMY32806:
|
||
WinExec("CM1.BAT",SW_SHOW);
|
||
break;
|
||
case ID_CAMCAM_CALLY:
|
||
WinExec("CM2.BAT",SW_SHOW);
|
||
break;
|
||
|
||
case ID_TRAYICONMENU_AUTORELOADMADS:
|
||
TheScene->WFlags ^= MAD_AUTO_RELOAD;
|
||
break;
|
||
case ID_SKIPFUNCTION_LIMITFRAMERATETO60HZ:
|
||
TheScene->SkipFunctions ^= SKIP_NO_60hz_LIMIT;
|
||
break;
|
||
|
||
#endif //USERMODE
|
||
case ID_DRIVER_D3D:
|
||
TheScene->ChangeDriver(1);
|
||
break;
|
||
case ID_DRIVER_OPENGL:
|
||
TheScene->ChangeDriver(0);
|
||
break;
|
||
case ID_DRIVER_NULL:
|
||
TheScene->ChangeDriver(2);
|
||
break;
|
||
case ID_TRAYICONMENU_USEHEADMOUSE:
|
||
bSurchargeMouseCursor ^= 1;
|
||
break;
|
||
case ID_TRAYICONMENU_SHOWMESH:
|
||
|
||
if (TheScene->ID_TABLE[TheScene->CurrentID])
|
||
TheScene->ID_TABLE[TheScene->CurrentID]->SF_U.DrawMesh ^= 1;
|
||
break;
|
||
case ID_TRAYICONMENU_SETNAME:
|
||
NameText[0] = 0;
|
||
DialogBox(hBigInstance,MAKEINTRESOURCE(IDD_DIALOG1),hWnd,DialogProcName);
|
||
if (NameText[0])
|
||
{
|
||
strcpy(TheScene->ID_TABLE[TheScene->CurrentID]->ID_Name,NameText);
|
||
}
|
||
break;
|
||
#ifdef ONLINE_MODE
|
||
case ID_CAMCAM_OPENINTERNALBROWSER:
|
||
Account.setShopVisible(!Account.isShopVisible(), "tests/shop_test?bla");
|
||
#endif
|
||
}
|
||
|
||
return DefWindowProc(hWnd, message, wParam, lParam);
|
||
break;
|
||
case WM_SETCURSOR:
|
||
if (LOWORD (lParam) == HTCLIENT && currentCursor)
|
||
{
|
||
if (currentCursorType == 0)
|
||
SetCursor(LoadCursor(NULL, currentCursor));
|
||
else
|
||
SetCursor(LoadCursorFromFile(currentCursor));
|
||
return true;
|
||
}
|
||
break;
|
||
case WM_PAINT:
|
||
//#ifdef ONLINE_MODE
|
||
// SendMessage(BrowserWnd, WM_PAINT, wParam, lParam);
|
||
//#endif
|
||
if (TheScene && TheScene->ulLockMode)
|
||
{
|
||
if (TheScene->UseGDI)
|
||
TheScene->Flip_DIB(false);
|
||
else
|
||
{
|
||
TheScene->DI->LayerOperation(1,TheScene->WMPaintLayer,0xffffffff,0,0.0f);
|
||
TheScene->DI->Flip(1);
|
||
}
|
||
}
|
||
break;
|
||
case WM_NCPAINT:
|
||
break;
|
||
case 0x020A://WM_MOUSEWHEEL:
|
||
|
||
if (TheScene)
|
||
{
|
||
if(TheScene->pLDS && TheScene->pLDS->showFileList)
|
||
{
|
||
if ((int) wParam < 0)
|
||
TheScene->pLDS->fileListStartDelta -= (wParam & MK_MBUTTON) ? 20 : 4;
|
||
else
|
||
TheScene->pLDS->fileListStartDelta += (wParam & MK_MBUTTON) ? 20 : 4;
|
||
}
|
||
else
|
||
{
|
||
if ((int) wParam < 0)
|
||
TheScene->LUA_DEBUG_BaseDisplay += (wParam & MK_MBUTTON) ? 20 : 4;
|
||
else
|
||
TheScene->LUA_DEBUG_BaseDisplay -= (wParam & MK_MBUTTON) ? 20 : 4;
|
||
}
|
||
}
|
||
|
||
if (TheScene && TheScene->bManualBoot)
|
||
{
|
||
if ((int) wParam < 0)
|
||
TheScene->ID_TABLE[TheScene->CurrentID]->CurrentMatrix_U.T *= 0.95f;
|
||
else
|
||
TheScene->ID_TABLE[TheScene->CurrentID]->CurrentMatrix_U.T *= 1.0f/ 0.95f;
|
||
}
|
||
break;
|
||
case WM_MOUSEMOVE:
|
||
if (TheScene)
|
||
{
|
||
RECT Rect1;
|
||
POINT Origin;
|
||
float CX,CY;
|
||
|
||
|
||
GetClientRect(hWnd , &Rect1);
|
||
CX = (float)TheScene->XSize / (float)(Rect1.right - Rect1.left);
|
||
CY = (float)TheScene->YSize / (float)(Rect1.bottom - Rect1.top);
|
||
if (LOWORD(lParam) & 0x8000)
|
||
TheScene->MouseX = 0xFFFF0000 | LOWORD(lParam);
|
||
else
|
||
TheScene->MouseX = LOWORD(lParam);
|
||
|
||
if (HIWORD(lParam) & 0x8000)
|
||
TheScene->MouseY = 0xFFFF0000 | HIWORD(lParam);
|
||
else
|
||
TheScene->MouseY = HIWORD(lParam);
|
||
|
||
mouseX = (int)(CX * (float)TheScene->MouseX); // horizontal position of cursor
|
||
mouseY = (int)(CY * (float)TheScene->MouseY); // vertical position of cursor
|
||
|
||
|
||
GetClientRect(hWnd , &Rect1);
|
||
Origin.x = Rect1.left;
|
||
Origin.y = Rect1.top;
|
||
ClientToScreen(hWnd , &Origin);
|
||
|
||
if (TheScene->bManualBoot)
|
||
{
|
||
VectInMouseEnv(&TheScene->ID_TABLE[TheScene->CurrentID]->CurrentMatrix_U.T, mouseX, mouseY, TheScene->GetCurrentFocale(), hWnd);
|
||
}
|
||
}
|
||
break;
|
||
case WM_ERASEBKGND:
|
||
return TRUE;
|
||
case WM_RBUTTONDOWN:
|
||
// if (TheScene) TheScene->MouseButton |= 1;
|
||
if (TheScene->bManualBoot) ManualBootStart();
|
||
else
|
||
{
|
||
// Process lua Button up in button down has been pressed ...
|
||
if (*TheScene->PickReportClick.PickingClass)
|
||
TheScene->LuaHandle(WM_LBUTTONUP, wParam, lParam);
|
||
// Process Lua End
|
||
|
||
if (GetAsyncKeyState(VK_CONTROL) & 0x8000)
|
||
{
|
||
ContextualMenu();
|
||
}
|
||
|
||
}
|
||
break;
|
||
case WM_LBUTTONDOWN:
|
||
if (TheScene) TheScene->MouseButton |= 2;
|
||
if (TheScene->bManualBoot) ManualBootStart();
|
||
break;
|
||
case WM_MBUTTONDOWN:
|
||
// if (TheScene) TheScene->MouseButton |= 4;
|
||
if (TheScene->bManualBoot) ManualBootStart();
|
||
break;
|
||
|
||
case WM_RBUTTONUP:
|
||
// if (TheScene) TheScene->MouseButton &= ~1;
|
||
break;
|
||
case WM_LBUTTONUP:
|
||
if (TheScene) TheScene->MouseButton &= ~2;
|
||
break;
|
||
case WM_MBUTTONUP:
|
||
// if (TheScene) TheScene->MouseButton &= ~4;
|
||
break;
|
||
case WM_SYSKEYDOWN:
|
||
case WM_KEYDOWN:
|
||
//extern u32 FinFace;
|
||
if (TheScene && TheScene->pLDS)
|
||
TheScene->pLDS->LastKeyIn = wParam;
|
||
if (TheScene && (wParam == VK_F1))
|
||
TheScene->LUA_DEBUG_Flags ^= 1;
|
||
else
|
||
if (TheScene && TheScene->pLDS && (wParam == VK_F5))
|
||
TheScene->pLDS->DeubgTraceMode = 0;
|
||
else
|
||
if (TheScene) TheScene->PressKey(wParam);
|
||
|
||
|
||
if ((wParam >= '0' && wParam <= '9') ||
|
||
(wParam >= VK_NUMPAD0 && wParam <= VK_NUMPAD9))
|
||
{
|
||
int len = strlen(LuaDebugGotoLine);
|
||
if (len < 8)
|
||
{
|
||
if (wParam >= '0' && wParam <= '9')
|
||
{
|
||
LuaDebugGotoLine[len] = wParam;
|
||
} else
|
||
{
|
||
LuaDebugGotoLine[len] = wParam - VK_NUMPAD0 + '0';
|
||
}
|
||
LuaDebugGotoLine[len+1] = 0;
|
||
TheScene->LUA_DEBUG_BaseDisplay = atoi(LuaDebugGotoLine)-1;
|
||
}
|
||
} else
|
||
{
|
||
*LuaDebugGotoLine = 0;
|
||
}
|
||
|
||
if (TheScene && (TheScene->SkipFunctions & SKIP_NOMOSAIC))
|
||
{
|
||
int currentPage = TheScene->MosaicInfo >> 16;
|
||
int mosaicSize = TheScene->MosaicInfo & 0x7fff;
|
||
int MosaicAlpha = TheScene->MosaicInfo & 0x8000;
|
||
|
||
if (wParam == 107)
|
||
{
|
||
currentPage = 0;
|
||
mosaicSize = mosaicSize*2;
|
||
}
|
||
if (wParam == 109)
|
||
{
|
||
currentPage = 0;
|
||
mosaicSize = mosaicSize/2;
|
||
}
|
||
if (wParam == 'A' || wParam == 'a')
|
||
{
|
||
MosaicAlpha ^= 0x8000;
|
||
}
|
||
if (wParam == VK_PRIOR)
|
||
currentPage--;
|
||
if (wParam == VK_NEXT)
|
||
currentPage++;
|
||
|
||
if (currentPage < 0) currentPage = 0;
|
||
if (mosaicSize < 8) mosaicSize = 8;
|
||
if (mosaicSize > 512) mosaicSize = 512;
|
||
TheScene->MosaicInfo = (currentPage << 16 | mosaicSize) | MosaicAlpha;
|
||
}
|
||
|
||
/* if ((wParam == 27) && (IsMaximized))// ESCAPE
|
||
{
|
||
ShowWindow(hWnd,SW_RESTORE);
|
||
IsMaximized = 0;
|
||
}*/
|
||
if (TheScene->bManualBoot && TheScene)
|
||
{
|
||
if (wParam == ' ')
|
||
TheScene->bManualBoot ^= 2;
|
||
#define RSTEP 0.033333f
|
||
if (GetAsyncKeyState(VK_SHIFT) & 0x8000)
|
||
{
|
||
Vector SCale;
|
||
SCale = TheScene->ID_TABLE[TheScene->CurrentID]->vModelScale;
|
||
if (wParam == VK_RIGHT) SCale.x *= 1.05f;
|
||
if (wParam == VK_LEFT) SCale.x *= 1.0f / 1.05f;
|
||
if (wParam == VK_UP) SCale.y *= 1.05f;
|
||
if (wParam == VK_DOWN) SCale.y *= 1.0f / 1.05f;
|
||
TheScene->ID_SetScale(0 , &SCale);
|
||
} else
|
||
{
|
||
if (GetAsyncKeyState(VK_CONTROL) & 0x8000)
|
||
{
|
||
if (wParam == VK_RIGHT) TheScene->ID_TABLE[TheScene->CurrentID]->CurrentMatrix_U.RotateAround(0,-RSTEP);
|
||
if (wParam == VK_LEFT) TheScene->ID_TABLE[TheScene->CurrentID]->CurrentMatrix_U.RotateAround(0,RSTEP);
|
||
} else
|
||
{
|
||
if (wParam == VK_RIGHT) TheScene->ID_TABLE[TheScene->CurrentID]->CurrentMatrix_U.RotateAround(1,-RSTEP);
|
||
if (wParam == VK_LEFT) TheScene->ID_TABLE[TheScene->CurrentID]->CurrentMatrix_U.RotateAround(1,RSTEP);
|
||
}
|
||
if (wParam == VK_UP) TheScene->ID_TABLE[TheScene->CurrentID]->CurrentMatrix_U.RotateAround(2,RSTEP);
|
||
if (wParam == VK_DOWN) TheScene->ID_TABLE[TheScene->CurrentID]->CurrentMatrix_U.RotateAround(2,-RSTEP);
|
||
}
|
||
}
|
||
|
||
break;
|
||
case WM_KEYUP:
|
||
if (TheScene) TheScene->UnPressKey(wParam);
|
||
break;
|
||
|
||
case WM_DESTROY:
|
||
FinishApp = 0;
|
||
AnimateIcon(NULL, hWnd, NIM_DELETE, 0 , "App killed");
|
||
PostQuitMessage(0);
|
||
break;
|
||
case WM_LBUTTONDBLCLK:
|
||
{
|
||
int Res = GetWindowLong(hWnd, GWL_STYLE);
|
||
if (Res & WS_CAPTION)
|
||
SendMessage(hWnd,WM_SIZE,SIZE_MAXIMIZED,0);
|
||
else
|
||
SendMessage(hWnd,WM_SIZE,SIZE_RESTORED,0);
|
||
}
|
||
break;
|
||
case WM_NCCALCSIZE:
|
||
return DefWindowProc(hWnd, message, wParam, lParam);
|
||
break;
|
||
|
||
case WM_SIZE: /* Check to see if we are losing or gaining our window. */
|
||
{
|
||
if (wParam == SIZE_MAXIMIZED )
|
||
{
|
||
IsMaximized = 1;
|
||
}
|
||
else if (wParam == SIZE_MINIMIZED )
|
||
{
|
||
ShowWindow(hWnd,SW_HIDE);
|
||
}
|
||
}
|
||
case WM_SIZING:
|
||
case WM_MOVING:
|
||
case WM_MOVE:
|
||
case WM_DISPLAYCHANGE:
|
||
if (TheScene)
|
||
{
|
||
RECT CR;
|
||
GetClientRect(hWnd , &CR);
|
||
if (CR.right != CR.left && CR.bottom != CR.top)
|
||
TheScene->ChangeResolution(CR.right - CR.left, CR.bottom - CR.top);
|
||
}
|
||
Blitte();
|
||
return TRUE;
|
||
|
||
case WM_SETFOCUS:
|
||
UpdateAllBack(TheScene);
|
||
break;
|
||
|
||
case EVENT_SYSTEM_CAPTUREEND:
|
||
break;
|
||
default:
|
||
//#ifdef ONLINE_MODE
|
||
// Account.processWindowsMessage(hWnd, message, wParam, lParam);
|
||
//#endif
|
||
break;
|
||
}
|
||
return DefWindowProc(hWnd, message, wParam, lParam);
|
||
}
|
||
|
||
void TrackerSetWindow(s32 X,s32 Y,s32 SizeX , s32 SizeY , s32 Visible , s32 HBorder, HWND PlaceAfter )
|
||
{
|
||
if (HBorder != -1)
|
||
{
|
||
HBorder = HBorder ? 0 : 1;
|
||
if (HideBorders ^ HBorder)
|
||
WindowToggleHideBorders();
|
||
}
|
||
|
||
if (Visible != -1)
|
||
{
|
||
RECT rect, *rectPtr = NULL;
|
||
if ((X == -1) && (Y == -1) && (SizeX == -1) && (SizeY == -1))
|
||
{
|
||
SetRect(&rect, X, Y, X+SizeX, Y+SizeY);
|
||
rectPtr = ▭
|
||
}
|
||
|
||
Visible = Visible ? 0 : 1;
|
||
}
|
||
|
||
u32 Flags;
|
||
Flags = SWP_NOACTIVATE;
|
||
if ((X == -1) && (Y == -1)) Flags |= SWP_NOMOVE;
|
||
if ((SizeX == -1) && (SizeY == -1)) Flags |= SWP_NOSIZE;
|
||
|
||
if (PlaceAfter != (HWND)-1)
|
||
SetWindowPos(hWnd , PlaceAfter, X , Y , SizeX , SizeY , Flags);
|
||
else
|
||
{
|
||
Flags |= SWP_NOZORDER;
|
||
SetWindowPos(hWnd , NULL , X , Y , SizeX , SizeY , Flags);
|
||
}
|
||
UpdateAllBack(TheScene);
|
||
}
|
||
|
||
|
||
void TransparentWindowSet(bool enable, bool force)
|
||
{
|
||
if (!TheScene) return;
|
||
int WindowStyle = GetWindowLong(hWnd, GWL_EXSTYLE);
|
||
if (force)
|
||
SetWindowLong(hWnd, GWL_EXSTYLE, 0);
|
||
if (enable)
|
||
{
|
||
if (!TheScene->LayederWindow || force)
|
||
{
|
||
TheScene->LayederWindow = 1;
|
||
SetWindowLong(hWnd, GWL_EXSTYLE, WindowStyle | (WS_EX_LAYERED));
|
||
UpdateLocked = 1;
|
||
}
|
||
} else
|
||
{
|
||
if (TheScene->LayederWindow || force)
|
||
{
|
||
TheScene->LayederWindow = 0;
|
||
SetWindowLong(hWnd, GWL_EXSTYLE, WindowStyle & (~(WS_EX_LAYERED)));
|
||
UpdateLocked = 0;
|
||
}
|
||
}
|
||
}
|
||
|
||
bool launchOption(WORLD* TheScene, char* optionTitle, int optionID)
|
||
{
|
||
int wmId = -1;
|
||
if(strlen(optionTitle)!=0)
|
||
{
|
||
extern HINSTANCE hBigInstance;
|
||
#define NB_MENU 2
|
||
static HMENU hMenuBase = LoadMenu(hBigInstance, (LPCTSTR) MAKEINTRESOURCE(IDR_MENU1));
|
||
static HMENU hMenuBase2 = LoadMenu(hBigInstance, (LPCTSTR) MAKEINTRESOURCE(IDR_MENU2));
|
||
static HMENU hMenuTab[NB_MENU] = { hMenuBase, hMenuBase2 };
|
||
|
||
|
||
strlwr(optionTitle);
|
||
char itemTitle[256];
|
||
|
||
for (int mIdx=0; mIdx<NB_MENU && wmId == -1; mIdx++)
|
||
{
|
||
HMENU hMenu = GetSubMenu(hMenuTab[mIdx], 0);
|
||
|
||
for(int i=0; i<GetMenuItemCount(hMenu); i++)
|
||
{
|
||
GetMenuString(hMenu, i, itemTitle, 256, MF_BYPOSITION);
|
||
if(!strcmp(optionTitle, strlwr(itemTitle)))
|
||
{
|
||
wmId = GetMenuItemID(hMenu, i);
|
||
break;
|
||
} else
|
||
{
|
||
HMENU hSubMenu = GetSubMenu(hMenu, i);
|
||
if (hSubMenu)
|
||
{
|
||
for(int j=0; j<GetMenuItemCount(hSubMenu); j++)
|
||
{
|
||
GetMenuString(hSubMenu, j, itemTitle, 256, MF_BYPOSITION);
|
||
if(!strcmp(optionTitle, strlwr(itemTitle)))
|
||
{
|
||
wmId = GetMenuItemID(hSubMenu, j);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
} else
|
||
wmId = optionID;
|
||
|
||
if(wmId != -1)
|
||
{
|
||
extern HWND hWnd;
|
||
PostMessage(hWnd, WM_COMMAND, wmId, 0);
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
bool menuOptionSelected(WORLD* TheScene, char* optionTitle, int optionID)
|
||
{
|
||
int wmId = -1;
|
||
#define NB_MENU 2
|
||
static HMENU hMenuBase = LoadMenu(hBigInstance, (LPCTSTR) MAKEINTRESOURCE(IDR_MENU1));
|
||
static HMENU hMenuBase2 = LoadMenu(hBigInstance, (LPCTSTR) MAKEINTRESOURCE(IDR_MENU2));
|
||
static HMENU hMenuTab[NB_MENU] = { hMenuBase, hMenuBase2 };
|
||
|
||
if(strlen(optionTitle)!=0)
|
||
{
|
||
extern HINSTANCE hBigInstance;
|
||
static HMENU hMenuBase = LoadMenu(hBigInstance, (LPCTSTR) MAKEINTRESOURCE(IDR_MENU1));
|
||
|
||
|
||
for (int mIdx=0; mIdx<NB_MENU && wmId == -1; mIdx++)
|
||
{
|
||
HMENU hMenu = GetSubMenu(hMenuTab[mIdx], 0);
|
||
CheckMenu(hMenu);
|
||
|
||
strlwr(optionTitle);
|
||
char itemTitle[256];
|
||
for(int i=0; i<GetMenuItemCount(hMenu); i++)
|
||
{
|
||
GetMenuString(hMenu, i, itemTitle, 256, MF_BYPOSITION);
|
||
if(!strcmp(optionTitle, strlwr(itemTitle)))
|
||
{
|
||
wmId = GetMenuItemID(hMenu, i);
|
||
break;
|
||
} else
|
||
{
|
||
HMENU hSubMenu = GetSubMenu(hMenu, i);
|
||
if (hSubMenu)
|
||
{
|
||
for(int j=0; j<GetMenuItemCount(hSubMenu); j++)
|
||
{
|
||
GetMenuString(hSubMenu, j, itemTitle, 256, MF_BYPOSITION);
|
||
if(!strcmp(optionTitle, strlwr(itemTitle)))
|
||
{
|
||
wmId = GetMenuItemID(hSubMenu, j);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
} else
|
||
wmId = optionID;
|
||
|
||
bool checked = false;
|
||
if(wmId != -1)
|
||
{
|
||
for (int mIdx=0; mIdx<NB_MENU && !checked; mIdx++)
|
||
{
|
||
u32 state = GetMenuState(hMenuTab[mIdx], wmId, MF_BYCOMMAND);
|
||
if (state != -1)
|
||
checked = checked || (state & MF_CHECKED);
|
||
}
|
||
}
|
||
return checked;
|
||
}
|
||
|
||
|
||
|
||
#define ALLOC_UNIT 512
|
||
HRGN GetRgnFromImage(MAP *img, int component, int threshhold, float scale)
|
||
{
|
||
component *= 8;
|
||
|
||
u32 mask = 0xFF << component;
|
||
int *BasePtr;
|
||
MAP *imgPtr;
|
||
|
||
static u32 maxRects = ALLOC_UNIT;
|
||
static RGNDATA *pData = (RGNDATA *)CC_malloc(sizeof(RGNDATAHEADER) + (sizeof(RECT) * maxRects));
|
||
static MAP imgIn;
|
||
static u32 allocSize = 0;
|
||
|
||
if (scale == 0.0f || scale == 1.0f)
|
||
{
|
||
imgPtr = img;
|
||
} else
|
||
{
|
||
imgIn.SetSize(img->SX*scale + 0.5f, img->SY*scale + 0.5f);
|
||
imgPtr = &imgIn;
|
||
|
||
COPY_OX_RGBA(img, imgPtr);
|
||
}
|
||
|
||
BasePtr = imgPtr->GetBase();
|
||
pData->rdh.dwSize = sizeof(RGNDATAHEADER);
|
||
pData->rdh.iType = RDH_RECTANGLES;
|
||
pData->rdh.nCount = pData->rdh.nRgnSize = 0;
|
||
SetRect(&pData->rdh.rcBound, MAXLONG, MAXLONG, 0, 0);
|
||
|
||
for (int y=imgPtr->SY-1; y>=0; y--)
|
||
{
|
||
for (int x=0; x<imgPtr->SX; x++, BasePtr++)
|
||
{
|
||
int x0 = x;
|
||
for (;x < imgPtr->SX && (((*BasePtr) & mask) >> component) >= threshhold; x++, BasePtr++);
|
||
if (x == imgPtr->SX) { x--; BasePtr--; }
|
||
if (x > x0)
|
||
{
|
||
if (pData->rdh.nCount >= maxRects)
|
||
{
|
||
maxRects += ALLOC_UNIT;
|
||
pData = (RGNDATA *)CC_realloc(pData, sizeof(RGNDATAHEADER) + (sizeof(RECT) * maxRects));
|
||
}
|
||
RECT *pr = (RECT *)&pData->Buffer;
|
||
SetRect(&pr[pData->rdh.nCount], x0, y, x, y+1);
|
||
if (x0 < pData->rdh.rcBound.left)
|
||
pData->rdh.rcBound.left = x0;
|
||
if (y < pData->rdh.rcBound.top)
|
||
pData->rdh.rcBound.top = y;
|
||
if (x > pData->rdh.rcBound.right)
|
||
pData->rdh.rcBound.right = x;
|
||
if (y+1 > pData->rdh.rcBound.bottom)
|
||
pData->rdh.rcBound.bottom = y+1;
|
||
pData->rdh.nCount++;
|
||
}
|
||
}
|
||
BasePtr += imgPtr->PITCH - imgPtr->SX;
|
||
}
|
||
HRGN h = ExtCreateRegion(NULL, sizeof(RGNDATAHEADER) + (sizeof(RECT) * maxRects), pData);
|
||
//CC_free(pData);
|
||
return h;
|
||
}
|
||
|
||
void ChangeCursor(char *cursor)
|
||
{
|
||
currentCursor = cursor;
|
||
currentCursorType = 0;
|
||
SetCursor(LoadCursor(NULL, currentCursor));
|
||
}
|
||
|
||
void ChangeCursorFromFile(char *cursor)
|
||
{
|
||
currentCursor = cursor;
|
||
currentCursorType = 1;
|
||
SetCursor(LoadCursorFromFile(cursor));
|
||
}
|
||
|
||
int AVI2FLV(char *avi, char *flv, bool *Aborted = NULL)
|
||
{
|
||
#ifdef VIDEO_OPENLIB
|
||
int AVIToFlv(char *avi, char *flv, bool *Aborted = NULL);
|
||
return AVIToFlv(avi, flv, Aborted);
|
||
#else
|
||
return 0;
|
||
#endif
|
||
|
||
//char command[2048];
|
||
//
|
||
//sprintf(command, "ffmpeg -i \"%s\" -ar 22050 -ab 32k -v 0 -sameq -f flv \"%s\"", avi, flv);
|
||
|
||
//STARTUPINFO si;
|
||
//PROCESS_INFORMATION pi;
|
||
|
||
//memset(&si, 0, sizeof(si));
|
||
//si.cb = sizeof(si);
|
||
//memset(&pi, 0, sizeof(pi));
|
||
|
||
//if(!CreateProcess( NULL,
|
||
// command,
|
||
// NULL, // Process handle not inheritable.
|
||
// NULL, // Thread handle not inheritable.
|
||
// FALSE, // Set handle inheritance to FALSE.
|
||
// CREATE_NO_WINDOW, // CREATE_NO_WINDOW, // No creation flags.
|
||
// NULL, // Use parent's environment block.
|
||
// NULL, // Use parent's starting directory.
|
||
// &si, // Pointer to STARTUPINFO structure.
|
||
// &pi ) // Pointer to PROCESS_INFORMATION structure.
|
||
// ) return 0;
|
||
|
||
//// Wait until child process exits.
|
||
//WaitForSingleObject( pi.hProcess, INFINITE );
|
||
//CloseHandle( pi.hProcess );
|
||
//CloseHandle( pi.hThread );
|
||
|
||
//return 1;
|
||
}
|
||
#ifdef ONLINE_MODE
|
||
int RegisterBoot(u32 add)
|
||
{
|
||
HKEY keyDir;
|
||
HKEY keyRun;
|
||
|
||
char bufferDir[256] = "";
|
||
DWORD bufferDirLen = 256;
|
||
DWORD bufferDirType = NULL;
|
||
char bufferRun[256] = "";
|
||
int ret = -1;
|
||
|
||
if (add == -1)
|
||
{
|
||
if (RegOpenKeyEx(HKEY_CURRENT_USER, AUTORUN_KEY, 0, KEY_ALL_ACCESS, &keyRun) != ERROR_SUCCESS)
|
||
return -1;
|
||
ret = RegQueryValueEx(keyRun, AUTORUN_KEY_CAMCAM, 0, &bufferDirType, (BYTE *)bufferDir, &bufferDirLen) != ERROR_SUCCESS;
|
||
RegCloseKey(keyRun);
|
||
return ret;
|
||
}
|
||
if (add == 0)
|
||
{
|
||
if (RegOpenKeyEx(HKEY_CURRENT_USER, AUTORUN_KEY, 0, KEY_ALL_ACCESS, &keyRun) != ERROR_SUCCESS)
|
||
return -1;
|
||
RegDeleteValue(keyRun, AUTORUN_KEY_CAMCAM);
|
||
RegCloseKey(keyRun);
|
||
return 1;
|
||
}
|
||
if (add == 1)
|
||
{
|
||
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, (std::string(CAMCAM_REG_KEY)+std::string(GAME_UPDATE_SUBKEY)).c_str(), 0, KEY_READ, &keyDir) != ERROR_SUCCESS)
|
||
return -1;
|
||
ret = RegQueryValueEx(keyDir, CAMCAM_KEY_INSTALL, 0, &bufferDirType, (BYTE *)bufferDir, &bufferDirLen) != ERROR_SUCCESS;
|
||
RegCloseKey(keyDir);
|
||
|
||
if (!ret) return -1;
|
||
sprintf(bufferRun, "%s\\%s %s", bufferDir, CAMCAM_EXE, CAMCAM_LUA);
|
||
|
||
if (RegOpenKeyEx(HKEY_CURRENT_USER, AUTORUN_KEY, 0, KEY_ALL_ACCESS, &keyRun) != ERROR_SUCCESS)
|
||
return -1;
|
||
RegSetValueEx(keyRun, AUTORUN_KEY_CAMCAM, 0, REG_EXPAND_SZ, (BYTE *)bufferRun, strlen(bufferRun)+1);
|
||
RegCloseKey(keyRun);
|
||
|
||
return 1;
|
||
}
|
||
return -1;
|
||
}
|
||
#endif
|
||
|
||
// PL : added to help the installer to remove all youUp Folders created by the users
|
||
bool AddUserNameInRegistry()
|
||
{
|
||
char szUserName[256];
|
||
DWORD dwSize = 256;
|
||
bool result = false;
|
||
|
||
if (GetUserName(szUserName, &dwSize))//the username windows, not the login of YouUp
|
||
{
|
||
HKEY hk;
|
||
char szKeyName[1024];
|
||
|
||
sprintf(szKeyName, "%s%s\\%s", CAMCAM_REG_KEY, GAME_UPDATE_SUBKEY, "Users");
|
||
|
||
if (RegCreateKey(HKEY_LOCAL_MACHINE, szKeyName, &hk) == ERROR_SUCCESS)
|
||
{
|
||
if (RegSetValueEx(hk, szUserName, 0, REG_SZ, (BYTE*)"", 0) == ERROR_SUCCESS)
|
||
result = true;
|
||
|
||
RegCloseKey(hk);
|
||
}
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
// Useful for LUA
|
||
HKEY _RegGetHandleKey(int key)
|
||
{
|
||
HKEY hk;
|
||
switch(key)
|
||
{
|
||
case 0: hk = HKEY_CLASSES_ROOT; break;
|
||
case 1: hk = HKEY_CURRENT_CONFIG; break;
|
||
case 2: hk = HKEY_CURRENT_USER; break;
|
||
case 3: hk = HKEY_LOCAL_MACHINE; break;
|
||
case 4: hk = HKEY_PERFORMANCE_DATA; break;
|
||
case 5: hk = HKEY_PERFORMANCE_NLSTEXT; break;
|
||
case 6: hk = HKEY_PERFORMANCE_TEXT; break;
|
||
case 7: hk = HKEY_USERS; break;
|
||
default:
|
||
hk = HKEY_LOCAL_MACHINE; break;
|
||
}
|
||
return hk;
|
||
}
|
||
|
||
/*
|
||
* if RegReadKeyValue returns NULL, you dont have to Free the (char*)
|
||
*/
|
||
char* _RegReadKeyValue(int HandleKey, const char* SubKey, const char* NameKey)
|
||
{
|
||
HKEY keyRun;
|
||
HKEY hk = _RegGetHandleKey(HandleKey);
|
||
|
||
DWORD bufferDirLen = 0;
|
||
DWORD bufferDirType = REG_SZ;
|
||
int ret;
|
||
char* RtValue;
|
||
|
||
if (RegOpenKeyEx(hk, SubKey, 0, KEY_ALL_ACCESS, &keyRun) != ERROR_SUCCESS)
|
||
return NULL;
|
||
|
||
// If lpData is NULL, and lpcbData is non-NULL, the function returns ERROR_SUCCESS and stores the size of the data,
|
||
// in bytes, in the variable pointed to by lpcbData. This enables an application to determine the best way
|
||
// to allocate a buffer for the value's data.
|
||
ret = RegQueryValueEx (keyRun, NameKey, 0, &bufferDirType, NULL, &bufferDirLen) ;
|
||
if (ret != ERROR_SUCCESS)
|
||
{
|
||
RegCloseKey(keyRun);
|
||
return NULL;
|
||
}
|
||
|
||
RtValue = (char*) CC_malloc(bufferDirLen+1);
|
||
ret = RegQueryValueEx (keyRun, NameKey, 0, &bufferDirType, (BYTE*)RtValue, &bufferDirLen) ;
|
||
RegCloseKey(keyRun);
|
||
|
||
if (ret != ERROR_SUCCESS)
|
||
{
|
||
CC_free (RtValue);
|
||
return NULL;
|
||
}
|
||
// Note: Therefore, even if the function returns ERROR_SUCCESS,
|
||
// the application should ensure that the string is properly terminated before using it;
|
||
// otherwise, it may overwrite a buffer
|
||
RtValue[bufferDirLen] = '\0';
|
||
return RtValue;
|
||
}
|
||
|
||
bool _RegSetKeyValue(int HandleKey, const char* SubKey, const char* NameKey, const char* Value)
|
||
{
|
||
HKEY keyRun;
|
||
HKEY hk = _RegGetHandleKey(HandleKey);
|
||
|
||
DWORD bufferDirType = REG_SZ;
|
||
int ret;
|
||
|
||
if (RegOpenKeyEx(hk, SubKey, 0, KEY_ALL_ACCESS, &keyRun) != ERROR_SUCCESS)
|
||
return false;
|
||
int size = strlen(Value)+1;
|
||
|
||
ret = RegSetValueEx(keyRun, NameKey, 0, REG_SZ, (BYTE*)Value, size);
|
||
RegCloseKey(keyRun);
|
||
|
||
return ret == ERROR_SUCCESS;
|
||
}
|
||
|
||
|
||
void LaunchExe(char *name)
|
||
{
|
||
WinExec(name, SW_HIDE);
|
||
//STARTUPINFO si;
|
||
//PROCESS_INFORMATION pi;
|
||
|
||
//memset(&si, 0, sizeof(si));
|
||
//si.cb = sizeof(si);
|
||
//memset(&pi, 0, sizeof(pi));
|
||
//if (!CreateProcess(NULL, name, NULL, NULL, false, 0, NULL, NULL, &si, &pi))
|
||
//{
|
||
// char info[2048];
|
||
// FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(),
|
||
// LANG_NEUTRAL, info, 2048, NULL);
|
||
// info[2047] = 0;
|
||
//}
|
||
}
|