mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
255 lines
5.0 KiB
255 lines
5.0 KiB
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// MAIN.CPP / Tuneup
|
|
//
|
|
// Microsoft Confidential
|
|
// Copyright (c) Microsoft Corporation 1998
|
|
// All rights reserved
|
|
//
|
|
// Main tuneup application file.
|
|
//
|
|
// Original engineer: WillisC
|
|
// Updated: Jason Cohen (JCOHEN)
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
//
|
|
// Internal include file(s).
|
|
//
|
|
|
|
#include <windows.h>
|
|
#include <tchar.h>
|
|
#include "tasks.h"
|
|
#include "schedwiz.h"
|
|
#include "howtorun.h"
|
|
#include "wizard.h"
|
|
#include "scm.h"
|
|
|
|
|
|
//
|
|
// Global variable(s).
|
|
//
|
|
|
|
HWND g_hWnd;
|
|
HINSTANCE g_hInst;
|
|
DWORD g_dwFlags;
|
|
LPTASKDATA g_Tasks;
|
|
LPTASKDATA g_CurrentTask;
|
|
INT g_nTimeScheme;
|
|
TCHAR g_szAppName[64];
|
|
|
|
|
|
//
|
|
// Internal (static) function prototype(s).
|
|
//
|
|
|
|
static HANDLE GetMutex(VOID);
|
|
static HWND CheckPrevInst(LPHANDLE);
|
|
|
|
static BOOL TanslateCommandLine(LPTSTR);
|
|
|
|
|
|
|
|
//
|
|
// Main windows function.
|
|
//
|
|
|
|
INT PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nCmdShow)
|
|
{
|
|
HANDLE hMutex;
|
|
HWND hWnd;
|
|
LPTSTR *lpArgs = NULL;
|
|
DWORD dwArgs,
|
|
dwIndex;
|
|
BOOL bRunWizard;
|
|
|
|
|
|
// First we will init any global memory we need to.
|
|
//
|
|
g_hInst = hInstance;
|
|
g_nTimeScheme = 0;
|
|
g_dwFlags = 0;
|
|
LoadString(hInstance, IDS_TUNEUP, g_szAppName, sizeof(g_szAppName) / sizeof(TCHAR));
|
|
|
|
// This will setup any command line options first.
|
|
//
|
|
dwArgs = GetCommandLineOptions(&lpArgs);
|
|
for (dwIndex = 1; dwIndex < dwArgs; dwIndex++)
|
|
TanslateCommandLine((LPTSTR) *(lpArgs + dwIndex));
|
|
FREE(lpArgs);
|
|
|
|
// If we proccessed a command line option that is designed to
|
|
// not run tuneup, we should return now.
|
|
//
|
|
if ( g_dwFlags & TUNEUP_QUIT )
|
|
return TRUE;
|
|
|
|
// Now check for another instance of Tuneup.
|
|
//
|
|
if ( hWnd = CheckPrevInst(&hMutex) )
|
|
{
|
|
SetForegroundWindow(hWnd);
|
|
return FALSE;
|
|
}
|
|
|
|
// We now need to create the job tasks.
|
|
//
|
|
g_Tasks = CreateTasks();
|
|
InitJobs(g_Tasks);
|
|
|
|
// Now we should pick up any data from the registry that we need.
|
|
//
|
|
if ( RegExists(HKLM, g_szTuneupKey, g_szRegValFirstTime) )
|
|
{
|
|
// Get previous time scheme.
|
|
//
|
|
g_nTimeScheme = RegGetDword(HKLM, g_szTuneupKey, g_szRegValTime);
|
|
|
|
// Get previous express or custom.
|
|
//
|
|
if ( RegCheck(HKLM, g_szTuneupKey, g_szRegValCustom) )
|
|
g_dwFlags |= TUNEUP_CUSTOM;
|
|
|
|
// Display the how to run dialog. If TRUE is
|
|
// returned, we should run the wizard. Otherwise
|
|
// the user choose cancel or the tasks were all run
|
|
// and we should just return.
|
|
//
|
|
bRunWizard = HowToRun();
|
|
}
|
|
else
|
|
{
|
|
// Set the flag so that tuneup knows this is
|
|
// the first time it has been run.
|
|
//
|
|
g_dwFlags |= TUNEUP_NOSCHEDULE;
|
|
|
|
// Set this so that we do run the wizard.
|
|
//
|
|
bRunWizard = TRUE;
|
|
}
|
|
|
|
// Now set any default values that should be set.
|
|
//
|
|
if ( g_nTimeScheme == 0)
|
|
g_nTimeScheme = DEFAULT_TIMESCHEME;
|
|
|
|
// Start the wizard if we need to.
|
|
//
|
|
if ( bRunWizard )
|
|
CreateWizard(hInstance, NULL);
|
|
|
|
// Free the job tasks we created.
|
|
//
|
|
FreeTasks(g_Tasks);
|
|
|
|
// Release the mutex.
|
|
//
|
|
if (hMutex)
|
|
ReleaseMutex(hMutex);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
|
|
//
|
|
// Internal function(s).
|
|
//
|
|
|
|
static HANDLE GetMutex()
|
|
{
|
|
const TCHAR szTuneupMutex[] = _T("TUNEUP97MUTEX");
|
|
HANDLE hMutex;
|
|
|
|
// Try to open the Tuneup mutex.
|
|
//
|
|
if ( hMutex = OpenMutex(SYNCHRONIZE, FALSE, szTuneupMutex) )
|
|
{
|
|
// There is already another mutex, so we can't get one
|
|
// and there should be another Tuneup window to find.
|
|
//
|
|
CloseHandle(hMutex);
|
|
hMutex = NULL;
|
|
}
|
|
else
|
|
{
|
|
// No mutex is present, so we should be able to get one.
|
|
//
|
|
hMutex = CreateMutex(NULL, FALSE, szTuneupMutex);
|
|
}
|
|
|
|
// Return the mutex, will be NULL if there alread is one.
|
|
//
|
|
return hMutex;
|
|
}
|
|
|
|
|
|
static HWND CheckPrevInst(LPHANDLE hMutex)
|
|
{
|
|
HWND hWnd = NULL;
|
|
BOOL bPrev = FALSE;
|
|
int nCount;
|
|
|
|
// Loop until another tuneup window is found or a mutex can
|
|
// be created. Max of 10 times (10 seconds).
|
|
//
|
|
for (nCount = 0; (nCount < 10) && (!bPrev) && ( (*hMutex = GetMutex()) == NULL ); nCount++)
|
|
{
|
|
#if 0
|
|
// Check for the background window of the wizard.
|
|
//
|
|
if ( bPrev = ( ( hWnd = FindWindow(NULL, g_szAppName) ) != NULL ) )
|
|
{
|
|
// The background window was found, so show the prev one (i.e. Wizard).
|
|
//
|
|
hWnd = GetWindow(hWnd, GW_HWNDPREV);
|
|
}
|
|
else
|
|
{
|
|
// Check for the how to run dialog.
|
|
//
|
|
bPrev = ( ( hWnd = FindWindow(NULL, g_szAppName) ) != NULL );
|
|
}
|
|
#else
|
|
bPrev = ( ( hWnd = FindWindow(NULL, g_szAppName) ) != NULL );
|
|
#endif
|
|
|
|
// If we found no window, sleep for 1 second.
|
|
//
|
|
if (!bPrev)
|
|
Sleep(1000);
|
|
}
|
|
|
|
// Return the window handle of any previous instance (will be null if we
|
|
// didn't find or we got a mutex).
|
|
//
|
|
return hWnd;
|
|
}
|
|
|
|
|
|
static BOOL TanslateCommandLine(LPTSTR lpArg)
|
|
{
|
|
BOOL bTranslated = TRUE;
|
|
|
|
// Check for the /AUTORUN flag.
|
|
//
|
|
if ( _tcsicmp(_T("/AUTORUN"), lpArg) == 0 )
|
|
g_dwFlags |= TUNEUP_AUTORUN;
|
|
|
|
// Check for the /SERVICE: flag.
|
|
//
|
|
else if ( _tcsnicmp(_T("/SERVICE:"), lpArg, 9) == 0 )
|
|
{
|
|
ServiceStart(lpArg + 9);
|
|
g_dwFlags |= TUNEUP_QUIT;
|
|
}
|
|
|
|
// Unknown option.
|
|
//
|
|
else
|
|
bTranslated = FALSE;
|
|
|
|
return bTranslated;
|
|
}
|