setup.cpp

来自「funambol window mobile客户端源代码」· C++ 代码 · 共 980 行 · 第 1/2 页

CPP
980
字号
    if(cmd)
    {delete [] cmd; cmd=NULL;}

    return ret_code;
}

void deregister()
{   
    startprogram(TEXT("startsync.exe"), TEXT("remove-schedule"));
    Sleep(2000);
    startprogram(TEXT("handleservice.exe"), TEXT("deregister"));
    Sleep(2000);
}

void deregisterSMS()
{
    startprogram(TEXT("startsync.exe"), TEXT("deregister"));
    Sleep(1500);
}

void registerPush()
{
    startprogram(TEXT("handleservice.exe"), TEXT("register"));
    Sleep(2000);
    
}

void registerSMS()
{
    startprogram(TEXT("startsync.exe"), TEXT("register"));
}

void registerCradle() {
    startprogram(TEXT("handleservice.exe"), TEXT("registerCradle"));
}

void deregisterCradle() {
    startprogram(TEXT("handleservice.exe"), TEXT("deregisterCradle"));
}

void restoreNotificationSettings() {

    wchar_t* value = NULL;
    wchar_t rpath[MAX_PATH] = TEXT("");
    wsprintf(rpath, TEXT("\\Software\\%s\\SyncclientPIM"), getAppName());

    // Start push only if syncUrl and credentials are set
    if (checkCredentials()) {
        value = readPropertyValue(rpath, TEXT("push"));
	    if (value && wcscmp(value, TEXT("0")) != 0) {
	        registerPush();
	    }
	    if (value) { delete [] value; value = NULL; }
	
	    value = readPropertyValue(rpath, TEXT("sms"));
	    if (value && wcscmp(value, TEXT("0")) != 0) {
	        registerSMS();
	    }
	    if (value) { delete [] value; value = NULL; }
    }

    value = readPropertyValue(rpath, TEXT("cradle"));
    if (value && wcscmp(value, TEXT("0")) != 0) {
        registerCradle();
    }
    if (value) { delete [] value; value = NULL; }
}


BOOL deleteFilesInRoot() {
    DeleteFile(FILE12);
    DeleteFile(FILE13);
    DeleteFile(FILE14);
    DeleteFile(FILE15);
    DeleteFile(FILE16);
    DeleteFile(FILE17);
    return true;
}


BOOL deleteFiles() {

    WIN32_FIND_DATA FileData;

    HANDLE hFind;
    wchar_t toFind    [512];
    wchar_t szNewPath [512];
    wchar_t filterPattern [256];
    wchar_t dir       [512];

    BOOL ret = TRUE;
    szNewPath[0] =   0;
    int lung = 0;

    DWORD dwAttrs;

    BOOL fFinished = FALSE;
    wcscpy(dir, getProgramPath());
    wsprintf(filterPattern, TEXT("*.*"));

    wsprintf(toFind, TEXT("%s/%s"), dir, filterPattern);

    hFind = FindFirstFile(toFind, &FileData);

    if (hFind != INVALID_HANDLE_VALUE) {

        while (!fFinished) {

            wsprintf(szNewPath, TEXT("%s/%s"), dir, FileData.cFileName);

            dwAttrs = GetFileAttributes(szNewPath);

            if (dwAttrs == FILE_ATTRIBUTE_DIRECTORY) { }

            else {
                if (   (wcsstr(szNewPath, FILE1) != NULL) ||
                       (wcsstr(szNewPath, FILE2) != NULL) ||
                       (wcsstr(szNewPath, FILE3) != NULL) ||
                       (wcsstr(szNewPath, FILE4) != NULL) ||
                       (wcsstr(szNewPath, FILE5) != NULL) ||
                       (wcsstr(szNewPath, FILE6) != NULL) ||
                       (wcsstr(szNewPath, FILE7) != NULL) ||
                       (wcsstr(szNewPath, FILE8) != NULL) ||
                       (wcsstr(szNewPath, FILE9) != NULL) ||
                       (wcsstr(szNewPath, FILE10) != NULL) ||
                       (wcsstr(szNewPath, FILE11) != NULL) ||
                       (wcsstr(szNewPath, FILE18) != NULL) ||
                       (wcsstr(szNewPath, FILE19) != NULL)
                       ) {

                        DeleteFile(szNewPath);
                }
            }

            if (!FindNextFile(hFind, &FileData)) {
                if (GetLastError() == ERROR_NO_MORE_FILES) {
                    fFinished = TRUE;
                }
                else  {
                    return FALSE;
                }
            }
        }

        FindClose(hFind);
    }

    deleteFilesInRoot();

    //RemoveDirectory(dir);
    return ret;
}

BOOL deleteDirectory() {

    wchar_t dir       [512];
    wcscpy(dir, getProgramPath());
    RemoveDirectory(dir);
    return TRUE;
}

BOOL createDirectory() {

    wchar_t dir       [512];
    wcscpy(dir, getProgramPath());
    CreateDirectory(dir, NULL);
    return TRUE;
}

DWORD getProcessPid(const wchar_t *processName)
{
    PROCESSENTRY32 lppe;
    BOOL next = TRUE;
    HANDLE hProcess = 0;
    DWORD pid = 0;

   HANDLE hSnapshot;
    
    for (int i = 0; i < 3; i++) {

        hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); // 0 is however ignored    
        if (hSnapshot == INVALID_HANDLE_VALUE) {
            i++;            
        } else {
            break;
        }
        if (i == 3) {
        return 0;
        }        
    }

    lppe.dwSize = sizeof( PROCESSENTRY32 );

    if (!Process32First(hSnapshot, &lppe))
        return 0;

    if (wcsstr(lppe.szExeFile, processName) != NULL) {
        pid = lppe.th32ProcessID;
    }

    do {
        next = Process32Next(hSnapshot, &lppe);

        if (!next)
            break;

        if (wcsstr(lppe.szExeFile, processName) != NULL ) {
            pid = lppe.th32ProcessID;
            break;
        }

    } while(next);

    if (hSnapshot)
        CloseToolhelp32Snapshot(hSnapshot);
    CloseHandle(hProcess);
    return pid;
}


DWORD checkSyncInProgress(){
    DWORD pid = 0;
    // Try to create the mutex
    HANDLE hMutex = CreateMutex(NULL, TRUE, TEXT("FunSyncInProgress") );
    if(hMutex){
        if(GetLastError() == ERROR_ALREADY_EXISTS){
            pid = getProcessPid( TEXT("startsync.exe") );
        }
        CloseHandle( hMutex );
    }
    return pid;
}

DWORD checkUI()
{
    DWORD pid = 0;
    
    wchar_t value[MAX_PATH] = TEXT("");
    wsprintf(value ,TEXT("%s.exe"),getAppName());
    pid = getProcessPid( value );
    return pid;
}
int closeMail() {
    
    /**
    * Way to close the mail application. It close it gracefully (it should...)
    */
    HWND hwndInbox = FindWindow(_T("Inbox.MainWnd"), NULL); 
    if (hwndInbox) { 
        SendMessage(hwndInbox, WM_CLOSE, 0, 0); 
    }    
    Sleep(2000);
    // try to kill if the first part fails
    DWORD out = 0;
    PROCESSENTRY32 lppe;
    BOOL next = TRUE;
    HANDLE hProcess = 0;
    HANDLE hSnapshot;
    
    for (int i = 0; i < 3; i++) {

        hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); // 0 is however ignored    
        if (hSnapshot == INVALID_HANDLE_VALUE) {
            i++;            
        } else {
            break;
        }
        if (i == 3) {
        return 0;
        }        
    }
    lppe.dwSize = sizeof( PROCESSENTRY32 );

    if (!Process32First(hSnapshot, &lppe))
        return 1;

    if (wcsstr(lppe.szExeFile, TEXT("tmail.exe")) != NULL) {
        hProcess = OpenProcess(0, FALSE, lppe.th32ProcessID);
        TerminateProcess(hProcess, -1);
        goto exit;
    }

    do {
        next = Process32Next(hSnapshot, &lppe);

        if (!next)
            break;

        if (wcsstr(lppe.szExeFile, TEXT("tmail.exe")) != NULL ) {
            hProcess = OpenProcess(0, FALSE, lppe.th32ProcessID);
            TerminateProcess(hProcess, -1);
            goto exit;
        }

    } while(next);

exit:
    if (hSnapshot)
        CloseToolhelp32Snapshot(hSnapshot);
    CloseHandle(hProcess);
    return 0;

}

int closeFunambol() {
    DWORD out = 0;
    PROCESSENTRY32 lppe;
    BOOL next = TRUE;
    HANDLE hProcess = 0;

   HANDLE hSnapshot;
    
    for (int i = 0; i < 3; i++) {

        hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); // 0 is however ignored    
        if (hSnapshot == INVALID_HANDLE_VALUE) {
            i++;            
        } else {
            break;
        }
        if (i == 3) {
        return 0;
        }        
    }

    lppe.dwSize = sizeof( PROCESSENTRY32 );

    if (!Process32First(hSnapshot, &lppe))
        return 1;

    
    wchar_t value[MAX_PATH] = TEXT("");
    wsprintf(value ,TEXT("%s.exe"),getAppName());
    if (wcsstr(lppe.szExeFile, value) != NULL ||
        wcsstr(lppe.szExeFile, TEXT("startsync.exe")) != NULL) {
        hProcess = OpenProcess(0, FALSE, lppe.th32ProcessID);
        TerminateProcess(hProcess, -1);
        CloseHandle(hProcess);
        //goto exit;
    }

    do {
        next = Process32Next(hSnapshot, &lppe);

        if (!next)
            break;

        wchar_t value[MAX_PATH] = TEXT("");
        wsprintf(value ,TEXT("%s.exe"),getAppName());
        if (wcsstr(lppe.szExeFile, value) != NULL ||
            wcsstr(lppe.szExeFile, TEXT("startsync.exe")) != NULL) {
            hProcess = OpenProcess(0, FALSE, lppe.th32ProcessID);
            TerminateProcess(hProcess, -1);
            CloseHandle(hProcess);
            //goto exit;
        }

    } while(next);

//exit:
    if (hSnapshot)
        CloseToolhelp32Snapshot(hSnapshot);
    CloseHandle(hProcess);
    return 0;

}

int closeFunambol30() {
    DWORD out = 0;
    PROCESSENTRY32 lppe;
    BOOL next = TRUE;
    HANDLE hProcess = 0;

    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); // 0 is however ignored

    if (hSnapshot == INVALID_HANDLE_VALUE)
        return 0;

    lppe.dwSize = sizeof( PROCESSENTRY32 );

    if (!Process32First(hSnapshot, &lppe))
        return 1;

    if (wcsstr(lppe.szExeFile, TEXT("pvbload.exe")) != NULL ) {
        hProcess = OpenProcess(0, FALSE, lppe.th32ProcessID);
        TerminateProcess(hProcess, -1);
        CloseHandle(hProcess);
        //goto exit;
    }

    do {
        next = Process32Next(hSnapshot, &lppe);

        if (!next)
            break;

        if (wcsstr(lppe.szExeFile, TEXT("pvbload.exe")) != NULL) {
            hProcess = OpenProcess(0, FALSE, lppe.th32ProcessID);
            TerminateProcess(hProcess, -1);
            CloseHandle(hProcess);
            //goto exit;
        }

    } while(next);

//exit:
    if (hSnapshot)
        CloseToolhelp32Snapshot(hSnapshot);
    CloseHandle(hProcess);
    return 0;

}

int FileCopy ( const wchar_t *src, const wchar_t *dst ) {

    char* s = toMultibyte(src);
    char* d = toMultibyte(dst);

    int ret = FileCopy(s, d);

    if (s) { delete [] s; }
    if (d) { delete [] d; }

    return ret;

}
int FileCopy ( const char *src, const char *dst ) {

int COPY_ERROR  = -1;
int COPY_OK     =  0;
int BUFSZ       = 16000;

char            *buf;
FILE            *fi;
FILE            *fo;
unsigned        amount;
unsigned        written;
int             result = COPY_OK;

buf = new char[BUFSZ];

fi = fopen( src, "rb" );
if  (fi == NULL) {
    return COPY_ERROR;
}

fo = fopen( dst, "wb" );

if  ((fi == NULL) || (fo == NULL) ) {
    result = COPY_ERROR;
    if (fi != NULL) fclose(fi);
    if (fo != NULL) fclose(fo);
}

if (result == COPY_OK) {
    do {
        amount = fread( buf, sizeof(char), BUFSZ, fi );
        if (amount) {
            written = fwrite( buf, sizeof(char), amount, fo );
            if (written != amount) {
                result = COPY_ERROR; // out of disk space or some other disk err?
            }
        }
    } // when amount read is < BUFSZ, copy is done
    while ((result == COPY_OK) && (amount == BUFSZ));

    fclose(fi);
    fclose(fo);
}

delete [] buf;

return result;

}

const wchar_t *getWindowsPath()
{
    static wchar_t winpath[MAX_PATH] = TEXT("");
    if (!winpath[0])
    {
        SHGetSpecialFolderPath(NULL, winpath, CSIDL_WINDOWS , FALSE);
        wcscat(winpath, TEXT("\\"));
    }
    return winpath;
}

void createBriefcaseFolder()
{
    /*  create a 揵riefcase

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?