From de411249e48c6acb3ffdf9fd84f27538b76953e1 Mon Sep 17 00:00:00 2001 From: "locka%iol.ie" Date: Sat, 8 May 1999 12:10:26 +0000 Subject: [PATCH] Added a directory picker so exe can be run from anywhere and still register the correct Mozilla dir --- .../ActiveX/tests/RegMozCtl/RegMozCtl.rc | 16 +++-- .../ActiveX/tests/RegMozCtl/RegMozCtlDlg.cpp | 69 +++++++++++++++++-- .../ActiveX/tests/RegMozCtl/RegMozCtlDlg.h | 3 +- .../embed/ActiveX/tests/RegMozCtl/resource.h | 4 +- 4 files changed, 76 insertions(+), 16 deletions(-) diff --git a/webshell/embed/ActiveX/tests/RegMozCtl/RegMozCtl.rc b/webshell/embed/ActiveX/tests/RegMozCtl/RegMozCtl.rc index 57e7f26e8504..755c06b9609e 100644 --- a/webshell/embed/ActiveX/tests/RegMozCtl/RegMozCtl.rc +++ b/webshell/embed/ActiveX/tests/RegMozCtl/RegMozCtl.rc @@ -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 diff --git a/webshell/embed/ActiveX/tests/RegMozCtl/RegMozCtlDlg.cpp b/webshell/embed/ActiveX/tests/RegMozCtl/RegMozCtlDlg.cpp index 8cc7d680783b..8bc9450203ec 100644 --- a/webshell/embed/ActiveX/tests/RegMozCtl/RegMozCtlDlg.cpp +++ b/webshell/embed/ActiveX/tests/RegMozCtl/RegMozCtlDlg.cpp @@ -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(); + } + + }} diff --git a/webshell/embed/ActiveX/tests/RegMozCtl/RegMozCtlDlg.h b/webshell/embed/ActiveX/tests/RegMozCtl/RegMozCtlDlg.h index d40001dd16a8..4bb914ad7793 100644 --- a/webshell/embed/ActiveX/tests/RegMozCtl/RegMozCtlDlg.h +++ b/webshell/embed/ActiveX/tests/RegMozCtl/RegMozCtlDlg.h @@ -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() diff --git a/webshell/embed/ActiveX/tests/RegMozCtl/resource.h b/webshell/embed/ActiveX/tests/RegMozCtl/resource.h index 6db16f56f0bd..1d28c1c3332c 100644 --- a/webshell/embed/ActiveX/tests/RegMozCtl/resource.h +++ b/webshell/embed/ActiveX/tests/RegMozCtl/resource.h @@ -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