2025-11-28 00:35:46 +09:00

193 lines
4.9 KiB
C++

// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//
// Copyright (c) Microsoft Corporation. All rights reserved.
#include "stdafx.h"
#include "VCExplore.h"
#include "AppUtilDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAppUtilDlg dialog
CAppUtilDlg::CAppUtilDlg(CWnd* pParent /*=NULL*/)
: CDialog(CAppUtilDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CAppUtilDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Initialize the members
m_pCatalog = NULL;
m_nUtilityType = UTILITY_TYPE_UNDEFINED;
}
void CAppUtilDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAppUtilDlg)
DDX_Control(pDX, IDC_EDIT_APPLICATION_ID_VALUE, m_edtApp);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAppUtilDlg, CDialog)
//{{AFX_MSG_MAP(CAppUtilDlg)
ON_WM_CLOSE()
ON_BN_CLICKED(IDC_BUTTON_APPLICATON_ID_SEARCH, OnAppSearch)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAppUtilDlg message handlers
void CAppUtilDlg::set_Catalog(ICOMAdminCatalog *pCatalog)
{
// Only can have one Catalog object reference... release all prior references before assignment
ReleaseCatalog();
m_pCatalog = pCatalog;
}
void CAppUtilDlg::OnClose()
{
// Release the reference to the Catalog object if needed
ReleaseCatalog();
CDialog::OnClose();
}
void CAppUtilDlg::set_UtilityType(int UtilityType)
{
// Continue only for valid requests
if ((UtilityType == UTILITY_TYPE_START_APP) || (UtilityType == UTILITY_TYPE_STOP_APP))
m_nUtilityType = UtilityType;
}
BOOL CAppUtilDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the dialogs caption and load the appropriate icon resource
switch (m_nUtilityType)
{
case UTILITY_TYPE_START_APP:
SetWindowText("Start Application");
m_hIcon = AfxGetApp()->LoadIcon(IDI_START);
break;
case UTILITY_TYPE_STOP_APP:
SetWindowText("Stop Application");
m_hIcon = AfxGetApp()->LoadIcon(IDI_STOP);
break;
}
// Set the dialog's icon resource
SetIcon(m_hIcon, true); // 32x32 icon
SetIcon(m_hIcon, false); // 16x16 icon
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CAppUtilDlg::ReleaseCatalog()
{
// Release the reference to the Catalog object if needed
if (NULL != m_pCatalog)
m_pCatalog->Release();
}
void CAppUtilDlg::OnOK()
{
// Continue only if we have a valid Catalog pointer
if (NULL != m_pCatalog)
{
HRESULT hr = 0;
// Retrieve the text from the edit control
int nTextLength = m_edtApp.GetWindowTextLength() + 1;
char* pBuf = new char[nTextLength];
m_edtApp.GetWindowText(pBuf, nTextLength);
_bstr_t bstrApp = pBuf;
delete [] pBuf;
// Execute specified action
switch (m_nUtilityType)
{
case UTILITY_TYPE_START_APP:
hr = m_pCatalog->StartApplication(bstrApp);
break;
case UTILITY_TYPE_STOP_APP:
hr = m_pCatalog->ShutdownApplication(bstrApp);
break;
default:
MessageBox("Invalid utility type specified.\n\nNo processing will be performed.\n\nPress OK to continue.",
"Error",
(MB_OK | MB_ICONERROR));
break;
}
// Validate success/fail of the method call
if FAILED(hr)
MessageBox("Failed to perform the requested action.\n\nPress OK to continue.",
"Error",
(MB_OK | MB_ICONERROR));
}
else
MessageBox("Invalid Catalog reference.\n\nNo processing will be performed.\n\nPress OK to continue.",
"Error",
(MB_OK | MB_ICONERROR));
// Release the Catalog reference
ReleaseCatalog();
CDialog::OnOK();
}
void CAppUtilDlg::OnAppSearch()
{
OPENFILENAME ofn;
char pFilePath[256];
char pFileTitle[256];
// Setup of OPENFILENAME structure
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = m_hWnd;
ofn.hInstance = NULL;
ofn.lpstrFilter = "All Files (*.*)\0*.*\0\0";
ofn.lpstrCustomFilter = (LPSTR) NULL;
ofn.nMaxCustFilter = 0;
ofn.nFilterIndex = 1;
pFilePath[0] = '\0';
ofn.lpstrFile = pFilePath;
ofn.nMaxFile = sizeof(pFilePath);
ofn.lpstrFileTitle = pFileTitle;
ofn.nMaxFileTitle = sizeof(pFileTitle);
ofn.lpstrInitialDir = NULL;
if (UTILITY_TYPE_START_APP == m_nUtilityType)
ofn.lpstrTitle = "Select Application to start";
else
ofn.lpstrTitle = "Select Application to stop";
ofn.Flags = (OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_PATHMUSTEXIST);
ofn.lpstrDefExt = "DLL";
ofn.nFileOffset = 0;
ofn.nFileExtension = 0;
ofn.lCustData = 0;
// Invoke the file open common dialog
GetOpenFileName(&ofn);
// Update the value in the control
m_edtApp.SetWindowText(ofn.lpstrFile);
}