Nuovo autorun per lanciare SetCmpUp
git-svn-id: svn://10.65.10.50/branches/R_10_00@22692 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
f2085fd735
commit
ad309be592
611
ba/autorun.cpp
611
ba/autorun.cpp
@ -1,563 +1,48 @@
|
|||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#define STRICT
|
#define STRICT
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <shellapi.h>
|
#include <shellapi.h>
|
||||||
|
|
||||||
#include "../xvaga/incstr.h"
|
BOOL ErrorBox(LPCTSTR msg)
|
||||||
extern "C"
|
{
|
||||||
{
|
::MessageBox(NULL, msg, TEXT("Setup"), MB_OK | MB_ICONERROR);
|
||||||
#include "../xvaga/hlapi_c.h"
|
return FALSE;
|
||||||
#include "../xvaga/skeylink.h"
|
}
|
||||||
}
|
|
||||||
#include <stdlib.h>
|
BOOL FileExists(LPCTSTR name)
|
||||||
#include <string.h>
|
{
|
||||||
#include <time.h>
|
return ::GetFileAttributes(name) != 0xFFFFFFFF;
|
||||||
|
}
|
||||||
static HINSTANCE _hInstance = NULL;
|
|
||||||
static int _dongle_type = 0;
|
BOOL IsVistaOrLater()
|
||||||
|
{
|
||||||
/****************************/
|
BOOL good = FALSE;
|
||||||
/* Utility */
|
OSVERSIONINFOEX osinfo; ZeroMemory(&osinfo, sizeof(osinfo));
|
||||||
/****************************/
|
osinfo.dwOSVersionInfoSize = sizeof(osinfo);
|
||||||
|
if (::GetVersionEx((OSVERSIONINFO*)&osinfo))
|
||||||
void ErrorBox(LPCSTR str)
|
good = osinfo.dwMajorVersion >= 6;
|
||||||
{
|
return good;
|
||||||
MessageBox(GetFocus(), str, "Installazione", MB_ICONSTOP|MB_OK);
|
}
|
||||||
}
|
|
||||||
|
int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hinstPrev, LPSTR pCmdLine, int nCmdShow)
|
||||||
void WarningBox(LPCSTR str)
|
{
|
||||||
{
|
BOOL bFound = FileExists(TEXT("SetCmpUp.exe"));
|
||||||
MessageBox(GetFocus(), str, "Installazione", MB_ICONEXCLAMATION|MB_OK);
|
if (!bFound)
|
||||||
}
|
{
|
||||||
|
::SetCurrentDirectory(TEXT("program\\setup"));
|
||||||
int ThisYear()
|
bFound = FileExists(TEXT("SetCmpUp.exe"));
|
||||||
{
|
if (!bFound)
|
||||||
int anno = 2006;
|
ErrorBox(TEXT("Impossibile trovare SetCmpUp.exe"));
|
||||||
time_t lt;
|
}
|
||||||
if (time(<) == 0)
|
if (bFound)
|
||||||
{
|
{
|
||||||
struct tm* timeloc = localtime(<) ;
|
if (IsVistaOrLater())
|
||||||
if (timeloc != NULL)
|
bFound = (int)::ShellExecute(NULL, TEXT("runas"), TEXT("SetCmpUp.exe"), NULL, NULL, SW_SHOWMAXIMIZED) > 32;
|
||||||
anno = timeloc->tm_year + 1900;
|
else
|
||||||
}
|
bFound = ::WinExec("SetCmpUp.exe", SW_SHOWMAXIMIZED) > 32;
|
||||||
return anno;
|
if (!bFound)
|
||||||
}
|
ErrorBox(TEXT("Impossibile eseguire SetCmpUp.exe"));
|
||||||
|
}
|
||||||
/****************************/
|
|
||||||
/* Gestione chiave Hardlock */
|
return bFound ? 0 : 2;
|
||||||
/****************************/
|
}
|
||||||
|
|
||||||
bool HardlockGarble(unsigned short* data)
|
|
||||||
{
|
|
||||||
HL_CODE(data, 1);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned short HardlockLogin(int& year)
|
|
||||||
{
|
|
||||||
unsigned short serno = 0xFFFF;
|
|
||||||
unsigned char REFKEY[16] = "CAMPOKEY";
|
|
||||||
unsigned char VERKEY[16] = "ìpÙˆ¬cê<";
|
|
||||||
if (HL_LOGIN(26952, LOCAL_DEVICE, REFKEY, VERKEY) == STATUS_OK)
|
|
||||||
{
|
|
||||||
unsigned short eprom[64]; memset(eprom, 0, sizeof(eprom));
|
|
||||||
HL_READBL((unsigned char*)eprom);
|
|
||||||
unsigned short data[4];
|
|
||||||
memcpy(data, eprom, sizeof(data));
|
|
||||||
HardlockGarble(data);
|
|
||||||
if (data[0] == 0xFAE8)
|
|
||||||
serno = data[1];
|
|
||||||
else
|
|
||||||
serno = 0;
|
|
||||||
|
|
||||||
memcpy(data, &eprom[60], sizeof(data));
|
|
||||||
if (HardlockGarble(data))
|
|
||||||
year = (int)data[0];
|
|
||||||
}
|
|
||||||
return serno;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**************************/
|
|
||||||
/* Gestione chiave Eutron */
|
|
||||||
/**************************/
|
|
||||||
|
|
||||||
void EncodeEutronPassword(char* str)
|
|
||||||
{
|
|
||||||
const char* const key = "QSECOFR-";
|
|
||||||
char tmp[16];
|
|
||||||
int i;
|
|
||||||
for (i = 0; str[i]; i++)
|
|
||||||
tmp[i] = str[i] + (i < 8 ? key[i] : str[i - 8]);
|
|
||||||
tmp[i] = '\0';
|
|
||||||
strcpy(str, tmp);
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned short EutronLogin(int& year)
|
|
||||||
{
|
|
||||||
unsigned short serno = 0xFFFF;
|
|
||||||
|
|
||||||
const char* const login[2] = { "AGA.CAMPO", "25EBAI" };
|
|
||||||
for (int i = 0; i < 2; i++)
|
|
||||||
{
|
|
||||||
KEY_NET eutron_key;
|
|
||||||
memset(&eutron_key, 0, sizeof(KEY_NET));
|
|
||||||
eutron_key.net_command = NET_KEY_OPEN;
|
|
||||||
eutron_key.command = LOCATING_MODE;
|
|
||||||
|
|
||||||
const char* const chiaro = login[i];
|
|
||||||
char cifrato[16];
|
|
||||||
strcpy(cifrato, chiaro);
|
|
||||||
EncodeEutronPassword(cifrato);
|
|
||||||
|
|
||||||
memset(eutron_key.label, 0, LABEL_LENGTH);
|
|
||||||
strcpy((char*)eutron_key.label, chiaro);
|
|
||||||
memset(eutron_key.password, 0, PASSWORD_LENGTH);
|
|
||||||
strcpy((char*)eutron_key.password, cifrato);
|
|
||||||
|
|
||||||
smartlink(&eutron_key);
|
|
||||||
if (eutron_key.status == ST_OK)
|
|
||||||
{
|
|
||||||
eutron_key.net_command = NET_KEY_ACCESS;
|
|
||||||
eutron_key.command = BLOCK_READING_MODE;
|
|
||||||
short* pointer = (short*)(&eutron_key.data[0]);
|
|
||||||
short* number = (short*)(&eutron_key.data[2]);
|
|
||||||
*pointer = 0; // Posizione in cui leggere
|
|
||||||
*number = 8; // Words da leggere
|
|
||||||
smartlink(&eutron_key);
|
|
||||||
if (eutron_key.status == ST_OK)
|
|
||||||
{
|
|
||||||
serno = (unsigned short)atol((const char*)eutron_key.data+4);
|
|
||||||
if (i == 0)
|
|
||||||
{
|
|
||||||
const unsigned short y = *(unsigned short*)(eutron_key.data+12);
|
|
||||||
if (y > 2000 && y < 3000)
|
|
||||||
year = y;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
year = ThisYear();
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return serno;
|
|
||||||
}
|
|
||||||
|
|
||||||
/***********************************/
|
|
||||||
/* Gestione cifratura lista codici */
|
|
||||||
/***********************************/
|
|
||||||
|
|
||||||
void BuildKey(char* key)
|
|
||||||
{
|
|
||||||
for (int i = 0; i < 8; i++)
|
|
||||||
key[i] = 'A'+ rand()%26;
|
|
||||||
}
|
|
||||||
|
|
||||||
void DecodeString(char* data)
|
|
||||||
{
|
|
||||||
char key[8] = "";
|
|
||||||
BuildKey(key);
|
|
||||||
|
|
||||||
char tmp[256];
|
|
||||||
int i;
|
|
||||||
for (i = 0; data[i]; i++)
|
|
||||||
tmp[i] = data[i] - (i < 8 ? key[i] : tmp[i - 8]);
|
|
||||||
tmp[i] = '\0';
|
|
||||||
strcpy(data, tmp);
|
|
||||||
}
|
|
||||||
|
|
||||||
int VersionYear()
|
|
||||||
{
|
|
||||||
char ver[32];
|
|
||||||
GetPrivateProfileString("ba", "Versione", "", ver, sizeof(ver), "./program/zip/install.ini");
|
|
||||||
ver[4] = '\0';
|
|
||||||
return atoi(ver);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ProgramName(char* name)
|
|
||||||
{
|
|
||||||
char ver[80];
|
|
||||||
GetPrivateProfileString("Main", "Producer", "", ver, sizeof(ver), "./program/zip/install.ini");
|
|
||||||
|
|
||||||
if (ver[0] != '\0')
|
|
||||||
{
|
|
||||||
const char * const encryption_key = "QSECOFR-";
|
|
||||||
int i;
|
|
||||||
for (i = 0; ver[i]; i++)
|
|
||||||
name[i] = ver[i] - (i < 8 ? encryption_key[i] : name[i - 8]);
|
|
||||||
name[i] = '\0';
|
|
||||||
}
|
|
||||||
else
|
|
||||||
strcpy(name, "Campo");
|
|
||||||
}
|
|
||||||
|
|
||||||
int DongleTest()
|
|
||||||
{
|
|
||||||
_dongle_type = 0;
|
|
||||||
int yearKey = 0;
|
|
||||||
|
|
||||||
unsigned int serno = HardlockLogin(yearKey);
|
|
||||||
if (serno == 0xFFFF)
|
|
||||||
{
|
|
||||||
serno = EutronLogin(yearKey);
|
|
||||||
if (serno != 0xFFFF)
|
|
||||||
_dongle_type = 2; //chiave eutron
|
|
||||||
}
|
|
||||||
else
|
|
||||||
_dongle_type = 1; //chiave hardlock
|
|
||||||
|
|
||||||
if (serno == 0) // Chiave di sviluppo
|
|
||||||
return _dongle_type;
|
|
||||||
if (serno == 0xFFFF) // Chiave inesistente o invisibile = Prima installazione o demo
|
|
||||||
return _dongle_type;
|
|
||||||
|
|
||||||
const int verYear = VersionYear();
|
|
||||||
if (yearKey < verYear) // Chiave già programmata con assistenza pagata
|
|
||||||
{
|
|
||||||
bool ok = FALSE;
|
|
||||||
ifstream keys("./program/zip/dninst.zip");
|
|
||||||
if (keys.good())
|
|
||||||
{
|
|
||||||
char line[256];
|
|
||||||
keys.getline(line, sizeof(line));
|
|
||||||
srand(883);
|
|
||||||
DecodeString(line);
|
|
||||||
const int ass_year = atoi(line);
|
|
||||||
if (ass_year > yearKey) // Non devo abbassare l'anno di assistenza!
|
|
||||||
{
|
|
||||||
srand(ass_year);
|
|
||||||
while (!keys.eof())
|
|
||||||
{
|
|
||||||
keys.getline(line, sizeof(line));
|
|
||||||
DecodeString(line);
|
|
||||||
unsigned int sn = (unsigned int)atol(line);
|
|
||||||
if (sn == serno || line[0] == '*')
|
|
||||||
{
|
|
||||||
ok = TRUE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (ok)
|
|
||||||
{
|
|
||||||
const int n = ass_year%10;
|
|
||||||
const int y = (ass_year / 1000) * 1000 + (ass_year%1000) /10;
|
|
||||||
wsprintf(line, "Il contratto di manutenzione %d/%d verrà attivato automaticamente", y, n);
|
|
||||||
WarningBox(line);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
wsprintf(line, "È necessario contattare l'assistenza tecnica\n"
|
|
||||||
"per l'abilitazione del contratto di manutenzione %d", verYear);
|
|
||||||
WarningBox(line);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ErrorBox("Impossibile verificare il contratto di manutenzione");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return _dongle_type;
|
|
||||||
}
|
|
||||||
|
|
||||||
//allah!
|
|
||||||
int __stdcall DongleProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
||||||
{
|
|
||||||
switch (uMsg)
|
|
||||||
{
|
|
||||||
case WM_INITDIALOG:
|
|
||||||
::CheckRadioButton(hDlg, 100, 101, 100);
|
|
||||||
break;
|
|
||||||
case WM_COMMAND:
|
|
||||||
switch (LOWORD(wParam))
|
|
||||||
{
|
|
||||||
case IDOK:
|
|
||||||
_dongle_type = ::IsDlgButtonChecked(hDlg, 100) ? 2 : 1;
|
|
||||||
case IDCANCEL:
|
|
||||||
::EndDialog(hDlg, LOWORD(wParam));
|
|
||||||
return true;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool InstallDongle()
|
|
||||||
{
|
|
||||||
//metodo per richiedere il tipo di chiave e lanciare l'installazione dei servizi
|
|
||||||
int ret = ::DialogBox(_hInstance, "DONGLE", NULL, DongleProc);
|
|
||||||
if (ret != IDOK)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
char path[256] = "";
|
|
||||||
if (_dongle_type == 1)
|
|
||||||
strcpy(path, "./chiavi/hardlock/hldrv32.exe");
|
|
||||||
else
|
|
||||||
strcpy(path, "./chiavi/eutron/sdi.exe");
|
|
||||||
|
|
||||||
STARTUPINFO si;
|
|
||||||
PROCESS_INFORMATION pi;
|
|
||||||
|
|
||||||
ZeroMemory( &si, sizeof(si) );
|
|
||||||
si.cb = sizeof(si);
|
|
||||||
ZeroMemory( &pi, sizeof(pi) );
|
|
||||||
|
|
||||||
// Start the child process.
|
|
||||||
if( !CreateProcess( NULL, // No module name (use command line).
|
|
||||||
path, // Command line.
|
|
||||||
NULL, // Process handle not inheritable.
|
|
||||||
NULL, // Thread handle not inheritable.
|
|
||||||
FALSE, // Set handle inheritance to FALSE.
|
|
||||||
0, // 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 false;
|
|
||||||
// Wait until child process exits.
|
|
||||||
WaitForSingleObject( pi.hProcess, INFINITE );
|
|
||||||
|
|
||||||
// Close process and thread handles.
|
|
||||||
CloseHandle( pi.hProcess );
|
|
||||||
CloseHandle( pi.hThread );
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned int Run(LPCSTR app)
|
|
||||||
{
|
|
||||||
unsigned int ret = WinExec(app, SW_SHOWNORMAL);
|
|
||||||
if (ret <= 32)
|
|
||||||
{
|
|
||||||
char s[128];
|
|
||||||
wsprintf(s,"Impossibile eseguire\n%s\nErrore %d", app, (int)ret);
|
|
||||||
ErrorBox(s);
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* MainWndProc
|
|
||||||
*
|
|
||||||
* Purpose:
|
|
||||||
* Window procedure for main window. The main window is a dialog.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
LRESULT CALLBACK MainWndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|
||||||
{
|
|
||||||
switch (msg)
|
|
||||||
{
|
|
||||||
case WM_ERASEBKGND:
|
|
||||||
{
|
|
||||||
/* Repaint lo sfondo quando necessario*/
|
|
||||||
HDC hdc = (HDC) wParam;
|
|
||||||
HPEN hpenOld = (HPEN)SelectObject(hdc, GetStockObject(NULL_PEN));
|
|
||||||
RECT rect; GetClientRect(hwnd,&rect);
|
|
||||||
|
|
||||||
COLORREF cStart = GetSysColor(COLOR_ACTIVECAPTION);
|
|
||||||
COLORREF cStop = GetSysColor(27 /*COLOR_GRADIENTACTIVECAPTION*/);
|
|
||||||
int deltaR = GetRValue(cStop) - GetRValue(cStart);
|
|
||||||
int deltaG = GetGValue(cStop) - GetGValue(cStart);
|
|
||||||
int deltaB = GetBValue(cStop) - GetBValue(cStart);
|
|
||||||
|
|
||||||
const int ysize=rect.bottom-rect.top;
|
|
||||||
const int step = 4;
|
|
||||||
for (int y=rect.bottom; y>=rect.top-step; y-=step)
|
|
||||||
{
|
|
||||||
int r = GetRValue(cStart) + deltaR * y / rect.bottom;
|
|
||||||
int g = GetGValue(cStart) + deltaG * y / rect.bottom;
|
|
||||||
int b = GetBValue(cStart) + deltaB * y / rect.bottom;
|
|
||||||
HBRUSH hbrush = CreateSolidBrush(RGB(r,g,b));
|
|
||||||
HBRUSH hbrushOld = (HBRUSH)SelectObject(hdc, hbrush);
|
|
||||||
Rectangle(hdc, rect.left, y, rect.right, y+step+1);
|
|
||||||
SelectObject(hdc, hbrushOld);
|
|
||||||
DeleteObject(hbrush);
|
|
||||||
}
|
|
||||||
SelectObject(hdc, hpenOld);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case WM_PAINT:
|
|
||||||
{
|
|
||||||
PAINTSTRUCT ps;
|
|
||||||
RECT rct;
|
|
||||||
const char* s1 = "Installazione / Aggiornamento della versione normale";
|
|
||||||
const char* s2 = "Installazione della versione dimostrativa";
|
|
||||||
const char* s4 = "Termina installazione";
|
|
||||||
const char* s5 = "Scelta installazione";
|
|
||||||
|
|
||||||
HDC hdc = BeginPaint(hwnd, &ps);
|
|
||||||
|
|
||||||
GetWindowRect(GetDesktopWindow(),&rct);
|
|
||||||
SetBkMode(hdc, TRANSPARENT);
|
|
||||||
|
|
||||||
const int offx=(rct.right - rct.left-640)/2;
|
|
||||||
const int offy=(rct.bottom - rct.top-260)/2;
|
|
||||||
rct.left = offx+300;
|
|
||||||
rct.top = offy;
|
|
||||||
rct.right = rct.left+350;
|
|
||||||
rct.bottom = offy+60;
|
|
||||||
|
|
||||||
SetTextColor(hdc, GetSysColor(COLOR_CAPTIONTEXT));
|
|
||||||
DrawText(hdc, s1, strlen(s1), &rct, DT_LEFT|DT_WORDBREAK);
|
|
||||||
rct.top += 80; rct.bottom += 80;
|
|
||||||
DrawText(hdc, s2, strlen(s2), &rct, DT_LEFT|DT_WORDBREAK);
|
|
||||||
rct.top += 80; rct.bottom += 80;
|
|
||||||
DrawText(hdc, s4, strlen(s4), &rct, DT_LEFT|DT_WORDBREAK);
|
|
||||||
|
|
||||||
/* Titolo con ombreggiatura */
|
|
||||||
HFONT hfont = CreateFont(64, 0, 0, 0, FW_BOLD, TRUE, FALSE, FALSE, ANSI_CHARSET, OUT_TT_PRECIS, CLIP_TT_ALWAYS, PROOF_QUALITY, VARIABLE_PITCH | FF_SWISS, "Arial");
|
|
||||||
HFONT hfontOld = (HFONT)SelectObject(hdc, hfont);
|
|
||||||
|
|
||||||
SetTextColor(hdc, RGB(0,0,0));
|
|
||||||
TextOut(hdc, 20, 20, s5, strlen(s5));
|
|
||||||
|
|
||||||
SetTextColor(hdc, GetSysColor(COLOR_CAPTIONTEXT));
|
|
||||||
TextOut(hdc, 16, 16, s5, strlen(s5));
|
|
||||||
|
|
||||||
SelectObject(hdc, hfontOld);
|
|
||||||
DeleteObject(hfont);
|
|
||||||
EndPaint(hwnd, &ps);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case WM_COMMAND:
|
|
||||||
{
|
|
||||||
bool quit_program = false;
|
|
||||||
switch (LOWORD(wParam))
|
|
||||||
{
|
|
||||||
case 2:
|
|
||||||
quit_program = true;
|
|
||||||
break;
|
|
||||||
case 1000: //installazione normale con chiave
|
|
||||||
if (_dongle_type == 0) //non trova una chiave funzionante...
|
|
||||||
{
|
|
||||||
InstallDongle(); //chiede di installare la chiave...
|
|
||||||
DongleTest(); //verifica l'installazione della chiave..
|
|
||||||
if (_dongle_type == 0) //la chiave non c'e' proprio!
|
|
||||||
{ //forza l'installazione del modulo SY con chiave Eutron (finta)
|
|
||||||
int ret = ::MessageBox(hwnd, "ATTENZIONE! Chiave di protezione NON rilevata:\n"
|
|
||||||
"Si desidera installare ugualmente il modulo base ?",
|
|
||||||
"Installazione", MB_YESNO | MB_ICONQUESTION);
|
|
||||||
_dongle_type = ret == IDYES ? 2 : 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (_dongle_type != 0)
|
|
||||||
quit_program = Run("program\\disk1\\setup.exe") > 32;
|
|
||||||
break;
|
|
||||||
case 1001:
|
|
||||||
quit_program = Run("demo\\disk1\\setup.exe") > 32;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (quit_program) //esce dal programma di installazione
|
|
||||||
PostQuitMessage(0);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case WM_CHAR:
|
|
||||||
if (wParam == VK_ESCAPE)
|
|
||||||
PostQuitMessage(0);
|
|
||||||
break;
|
|
||||||
case WM_DESTROY:
|
|
||||||
PostQuitMessage(0);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return DefDlgProc(hwnd, msg, wParam, lParam);
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* InitApplication
|
|
||||||
*
|
|
||||||
* Purpose:
|
|
||||||
* Registers window class
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* hinst hInstance of application
|
|
||||||
*
|
|
||||||
* Return Value:
|
|
||||||
* TRUE if initialization succeeded, FALSE otherwise.
|
|
||||||
*/
|
|
||||||
BOOL InitApplication (HINSTANCE hinst)
|
|
||||||
{
|
|
||||||
WNDCLASS wc;
|
|
||||||
|
|
||||||
wc.style = CS_DBLCLKS | CS_SAVEBITS | CS_BYTEALIGNWINDOW;
|
|
||||||
wc.lpfnWndProc = MainWndProc;
|
|
||||||
wc.cbClsExtra = 0;
|
|
||||||
wc.cbWndExtra = DLGWINDOWEXTRA;
|
|
||||||
wc.hInstance = hinst;
|
|
||||||
wc.hIcon = LoadIcon(hinst, MAKEINTRESOURCE(9012));
|
|
||||||
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
|
|
||||||
wc.hbrBackground = HBRUSH(COLOR_WINDOW + 1);
|
|
||||||
wc.lpszMenuName = NULL;
|
|
||||||
wc.lpszClassName = "MainWndClass";
|
|
||||||
|
|
||||||
return RegisterClass(&wc);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* WinMain
|
|
||||||
*
|
|
||||||
* Purpose:
|
|
||||||
* Main entry point of application.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
int PASCAL WinMain (HINSTANCE hInst, HINSTANCE hinstPrev, LPSTR pCmdLine, int nCmdShow)
|
|
||||||
{
|
|
||||||
if (!InitApplication(hInst)) // Register window class
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
_hInstance = hInst;
|
|
||||||
|
|
||||||
_dongle_type = DongleTest(); //controlla se la chiave c'e' ed eventualmente quale e'
|
|
||||||
|
|
||||||
RECT rect;
|
|
||||||
GetWindowRect(GetDesktopWindow(),&rect);
|
|
||||||
HWND hwndDlg=CreateWindow("MainWndClass","Scelta installazione",WS_VISIBLE| WS_CAPTION | WS_SYSMENU | WS_MAXIMIZE,
|
|
||||||
rect.left,rect.top,rect.right,rect.bottom,NULL,NULL,hInst,NULL );
|
|
||||||
|
|
||||||
const int offx=(rect.right - rect.left-700)/2;
|
|
||||||
const int offy=(rect.bottom - rect.top-260)/2;
|
|
||||||
|
|
||||||
char name[80];
|
|
||||||
ProgramName(name);
|
|
||||||
|
|
||||||
char prompt[128];
|
|
||||||
strcpy(prompt, name);
|
|
||||||
|
|
||||||
UINT dwFlags = WS_CHILD | WS_VISIBLE;
|
|
||||||
/* Disegna i pulsanti */
|
|
||||||
CreateWindow("BUTTON",prompt, dwFlags,
|
|
||||||
offx, offy, 300, 32, hwndDlg , (HMENU)1000, hInst, NULL );
|
|
||||||
|
|
||||||
|
|
||||||
if (_dongle_type != 0) //se la chiave e' presente e funzionante non si puo' installare la DEMO
|
|
||||||
dwFlags |= WS_DISABLED;
|
|
||||||
strcat(prompt, " DEMO");
|
|
||||||
CreateWindow("BUTTON", prompt, dwFlags,
|
|
||||||
offx, offy+80, 300, 32, hwndDlg , (HMENU)1001, hInst, NULL );
|
|
||||||
|
|
||||||
CreateWindow("BUTTON","Uscita",
|
|
||||||
WS_CHILD| WS_VISIBLE,offx,offy+160,300,32, hwndDlg ,(HMENU)2,hInst,NULL );
|
|
||||||
|
|
||||||
MSG msg;
|
|
||||||
while (GetMessage(&msg, NULL, 0, 0))
|
|
||||||
{
|
|
||||||
TranslateMessage(&msg);
|
|
||||||
DispatchMessage(&msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
return (msg.wParam);
|
|
||||||
}
|
|
||||||
|
@ -605,7 +605,10 @@ bool TInstaller_mask::autoload()
|
|||||||
const int patch = atoi(str.mid(2, 4));
|
const int patch = atoi(str.mid(2, 4));
|
||||||
const int mypatch = ini_get_int(CONFIG_GENERAL, module, "Patch");
|
const int mypatch = ini_get_int(CONFIG_GENERAL, module, "Patch");
|
||||||
if (patch > 0 && patch < mypatch)
|
if (patch > 0 && patch < mypatch)
|
||||||
|
{
|
||||||
|
modules.destroy(i);
|
||||||
continue; // Non fare il download delle patch inutili
|
continue; // Non fare il download delle patch inutili
|
||||||
|
}
|
||||||
|
|
||||||
TFilename remote = http_path;
|
TFilename remote = http_path;
|
||||||
remote << str;
|
remote << str;
|
||||||
@ -663,6 +666,11 @@ bool TInstaller_mask::autoload()
|
|||||||
{
|
{
|
||||||
TString& ininame = *arow;
|
TString& ininame = *arow;
|
||||||
ininame.lower();
|
ininame.lower();
|
||||||
|
if (fsize(ininame) < 8)
|
||||||
|
{
|
||||||
|
xvt_fsys_remove_file(ininame);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
const int pos = ininame.find("a.ini");
|
const int pos = ininame.find("a.ini");
|
||||||
CHECKS(pos >= 6, TR("Configurazione di installazione non valida: "), (const char*)ininame);
|
CHECKS(pos >= 6, TR("Configurazione di installazione non valida: "), (const char*)ininame);
|
||||||
const TString4 module = ininame.mid(pos-6, 2);
|
const TString4 module = ininame.mid(pos-6, 2);
|
||||||
|
@ -519,11 +519,25 @@ bool Tdninst_mask::get_remote_dninst()
|
|||||||
const TString& n = remote_dninst(10);
|
const TString& n = remote_dninst(10);
|
||||||
if (n.full())
|
if (n.full())
|
||||||
{
|
{
|
||||||
if (fcopy(n, DNINST_BAK, false, true) && fsize(DNINST_BAK) > 0)
|
const int minsize = 48*1024;
|
||||||
|
if (fcopy(n, DNINST_BAK, false, true))
|
||||||
{
|
{
|
||||||
fcopy(DNINST_BAK, DNINST_ZIP);
|
const int size = fsize(DNINST_BAK);
|
||||||
remove(DNINST_BAK);
|
if (size > minsize)
|
||||||
return true;
|
{
|
||||||
|
fcopy(DNINST_BAK, DNINST_ZIP);
|
||||||
|
remove(DNINST_BAK);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TString msg; msg << TR("Il file dninst.zip remoto pesa solo ") << size << " bytes";
|
||||||
|
if (is_running())
|
||||||
|
error_box(msg);
|
||||||
|
else
|
||||||
|
log(2, msg);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (is_running())
|
if (is_running())
|
||||||
|
@ -528,12 +528,14 @@ bool TGeneric_table_app::change_decimals_handler(TMask_field& f, KEY k)
|
|||||||
{
|
{
|
||||||
TMask& m = f.mask();
|
TMask& m = f.mask();
|
||||||
real cambio(f.get());
|
real cambio(f.get());
|
||||||
|
/* Obsoleto
|
||||||
if (cambio > ZERO && m.get_bool(FLD_TABCAM_B1))
|
if (cambio > ZERO && m.get_bool(FLD_TABCAM_B1))
|
||||||
{
|
{
|
||||||
// Se il cambio e' espresso in EURO metto in R10 il valore in lire
|
// Se il cambio e' espresso in EURO metto in R10 il valore in lire
|
||||||
cambio = 1936.27 / cambio;
|
cambio = 1936.27 / cambio;
|
||||||
cambio.round(5);
|
cambio.round(5);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
m.set(FLD_TABCAM_R10, cambio);
|
m.set(FLD_TABCAM_R10, cambio);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user