Added a directory picker so exe can be run from anywhere and still register the correct Mozilla dir

This commit is contained in:
locka%iol.ie 1999-05-08 12:10:26 +00:00
parent 2593047229
commit de411249e4
4 changed files with 76 additions and 16 deletions

View File

@ -26,7 +26,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
// Dialog
//
IDD_REGMOZCTL_DIALOG DIALOGEX 0, 0, 210, 101
IDD_REGMOZCTL_DIALOG DIALOGEX 0, 0, 210, 116
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "RegMozCtl"
@ -34,12 +34,14 @@ FONT 8, "MS Sans Serif"
BEGIN
LTEXT "This application registers/deregisters the Mozilla Control and ensures that its dependent DLLs are listed as SHARED so that they can be found when the control is used by other applications.",
IDC_STATIC,34,7,169,35
LTEXT "You must run this program from the directory containing the Mozilla control and click on the Register or Deregister as appropriate.",
IDC_STATIC,34,47,169,25
DEFPUSHBUTTON "&Register",IDC_REGISTER,7,80,50,14
PUSHBUTTON "&Unregister",IDC_UNREGISTER,80,80,50,14
PUSHBUTTON "&Close",IDCANCEL,153,80,50,14
LTEXT "You must choose the directory containing the Mozilla control and click on the Register or Deregister as appropriate.",
IDC_STATIC,7,47,196,24
DEFPUSHBUTTON "&Register",IDC_REGISTER,7,95,50,14
PUSHBUTTON "&Unregister",IDC_UNREGISTER,80,95,50,14
PUSHBUTTON "&Close",IDCANCEL,153,95,50,14
ICON IDI_ICON2,IDC_STATIC,7,7,21,20
EDITTEXT IDC_MOZILLADIR,7,73,179,14,ES_AUTOHSCROLL
PUSHBUTTON "...",IDC_PICKDIR,190,73,13,14
END
@ -99,7 +101,7 @@ BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 203
TOPMARGIN, 7
BOTTOMMARGIN, 94
BOTTOMMARGIN, 109
END
END
#endif // APSTUDIO_INVOKED

View File

@ -18,17 +18,20 @@ CRegMozCtlDlg::CRegMozCtlDlg(CWnd* pParent /*=NULL*/)
: CDialog(CRegMozCtlDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CRegMozCtlDlg)
// NOTE: the ClassWizard will add member initialization here
m_szMozillaDir = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
GetCurrentDirectory(1024, m_szMozillaDir.GetBuffer(1024));
m_szMozillaDir.ReleaseBuffer();
}
void CRegMozCtlDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CRegMozCtlDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
DDX_Text(pDX, IDC_MOZILLADIR, m_szMozillaDir);
//}}AFX_DATA_MAP
}
@ -38,6 +41,7 @@ BEGIN_MESSAGE_MAP(CRegMozCtlDlg, CDialog)
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_REGISTER, OnRegister)
ON_BN_CLICKED(IDC_UNREGISTER, OnUnregister)
ON_BN_CLICKED(IDC_PICKDIR, OnPickDir)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
@ -106,13 +110,13 @@ void CRegMozCtlDlg::OnUnregister()
void CRegMozCtlDlg::RegisterMozillaControl(BOOL bRegister)
{
UpdateData();
CFileFind cFind;
CString szFile;
CString szPath;
CString szDir;
GetCurrentDirectory(1024, szDir.GetBuffer(1024));
szDir.ReleaseBuffer();
SetCurrentDirectory(m_szMozillaDir);
CRegKey cKey;
if (cKey.Open(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\SharedDlls")) != ERROR_SUCCESS)
@ -127,7 +131,7 @@ void CRegMozCtlDlg::RegisterMozillaControl(BOOL bRegister)
{
bWorking = cFind.FindNextFile();
szFile = cFind.GetFileName();
szPath = szDir + CString(_T("\\")) + szFile;
szPath = m_szMozillaDir + CString(_T("\\")) + szFile;
if (bRegister)
{
cKey.SetValue(1, szPath);
@ -137,9 +141,14 @@ void CRegMozCtlDlg::RegisterMozillaControl(BOOL bRegister)
cKey.DeleteValue(szPath);
}
}
cKey.Close();
cKey.Create(HKEY_LOCAL_MACHINE, _T("Software\\Mozilla"));
cKey.SetValue(m_szMozillaDir, _T("MozillaDir"));
cKey.Close();
// Now register the mozilla control
CString szMozCtl = szDir + CString(_T("\\npmozctl.dll"));
CString szMozCtl = m_szMozillaDir + CString(_T("\\npmozctl.dll"));
HINSTANCE hMod = LoadLibrary(szMozCtl);
if (hMod == NULL)
{
@ -155,3 +164,49 @@ void CRegMozCtlDlg::RegisterMozillaControl(BOOL bRegister)
AfxMessageBox(bRegister ? _T("Register completed") : _T("Unregister completed"));
}
void CRegMozCtlDlg::OnPickDir()
{
BROWSEINFO bi;
TCHAR szFolder[MAX_PATH + 1];
memset(szFolder, 0, sizeof(szFolder));
memset(&bi, 0, sizeof(bi));
bi.hwndOwner = GetSafeHwnd();
bi.pidlRoot = NULL;
bi.pszDisplayName = szFolder;
bi.lpszTitle = _T("Pick a folder to scan");
// Open the folder browser dialog
LPITEMIDLIST pItemList = SHBrowseForFolder(&bi);
if (pItemList)
{
IMalloc *pShellAllocator = NULL;
SHGetMalloc(&pShellAllocator);
if (pShellAllocator)
{
char szPath[MAX_PATH + 1];
if (SHGetPathFromIDList(pItemList, szPath))
{
// Chop off the end path seperator
int nPathSize = strlen(szPath);
if (nPathSize > 0)
{
if (szPath[nPathSize - 1] == '\\')
{
szPath[nPathSize - 1] = '\0';
}
}
m_szMozillaDir = CString(szPath);
UpdateData(FALSE);
}
pShellAllocator->Free(pItemList);
pShellAllocator->Release();
}
}}

View File

@ -20,7 +20,7 @@ public:
// Dialog Data
//{{AFX_DATA(CRegMozCtlDlg)
enum { IDD = IDD_REGMOZCTL_DIALOG };
// NOTE: the ClassWizard will add data members here
CString m_szMozillaDir;
//}}AFX_DATA
// ClassWizard generated virtual function overrides
@ -40,6 +40,7 @@ protected:
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnRegister();
afx_msg void OnUnregister();
afx_msg void OnPickDir();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()

View File

@ -7,6 +7,8 @@
#define IDI_ICON2 130
#define IDC_REGISTER 1001
#define IDC_UNREGISTER 1002
#define IDC_MOZILLADIR 1003
#define IDC_PICKDIR 1004
// Next default values for new objects
//
@ -14,7 +16,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 131
#define _APS_NEXT_COMMAND_VALUE 32771
#define _APS_NEXT_CONTROL_VALUE 1002
#define _APS_NEXT_CONTROL_VALUE 1005
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif