LRESULT PageSettingsTabs1::OnClickedBtnBrowseShell(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { CFileDialog fileDialog( TRUE, NULL, NULL, OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_NOCHANGEDIR|OFN_PATHMUSTEXIST|OFN_NODEREFERENCELINKS, L"Executable Files (*.exe)\0*.exe\0Shell Links (*.lnk)\0*.lnk\0Batch Files (*.bat;*.cmd)\0*.bat;*.cmd\0All Files (*.*)\0*.*\0\0"); if (fileDialog.DoModal() == IDOK) { CString strShell(fileDialog.m_szFileName); this->ConvertShellLink(strShell); } return 0; }
LRESULT PageSettingsTabs1::OnClickedBtnBrowseShell(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { std::wstring strFilter = Helpers::LoadFileFilter(MSG_SETTINGS_EXECUTABLE_FILES_AND_LINKS); CFileDialog fileDialog( TRUE, NULL, NULL, OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_NOCHANGEDIR | OFN_PATHMUSTEXIST | OFN_NODEREFERENCELINKS, strFilter.c_str()); if (fileDialog.DoModal() == IDOK) { CString strShell(fileDialog.m_szFileName); this->ConvertShellLink(strShell); } return 0; }
int Run(LPTSTR lpstrCmdLine = NULL, int nCmdShow = SW_SHOWDEFAULT) { try { CMessageLoop theLoop; _Module.AddMessageLoop(&theLoop); wstring strConfigFile(L""); bool bReuse = false; wstring strSyncName; ParseCommandLine( lpstrCmdLine, strConfigFile, bReuse, strSyncName); if (strConfigFile.length() == 0) { strConfigFile = wstring(L"console.xml"); } if (!g_settingsHandler->LoadSettings(Helpers::ExpandEnvironmentStrings(strConfigFile))) { throw std::exception("enable to load settings!"); } if (!bReuse) { bReuse = !g_settingsHandler->GetBehaviorSettings2().instanceSettings.bAllowMultipleInstances; } if (!strSyncName.empty()) { wstring strWindowTitle; vector<wstring> startupTabs; vector<wstring> startupTabTitles; vector<wstring> startupDirs; vector<wstring> startupCmds; vector<DWORD> basePriorities; int nMultiStartSleep = 0; wstring strWorkingDir; MainFrame::ParseCommandLine ( lpstrCmdLine, strWindowTitle, startupTabs, startupTabTitles, startupDirs, startupCmds, basePriorities, nMultiStartSleep, strWorkingDir ); TabSettings& tabSettings = g_settingsHandler->GetTabSettings(); // find tab with corresponding name... for (auto tabData = tabSettings.tabDataVector.begin(); tabData != tabSettings.tabDataVector.end(); ++tabData) { if (tabData->get()->strTitle == startupTabs[0]) { wstring strInitialDir(g_settingsHandler->GetConsoleSettings().strInitialDir); if (startupDirs.size() > 0 && startupDirs[0].length() > 0) { strInitialDir = startupDirs[0]; } else if (tabData->get()->strInitialDir.length() > 0) { strInitialDir = tabData->get()->strInitialDir; } wstring strShell(g_settingsHandler->GetConsoleSettings().strShell); if (tabData->get()->strShell.length() > 0) { strShell = tabData->get()->strShell; } wstring strInitialCmd = strWorkingDir; if (startupCmds.size() > 0 && startupCmds[0].length() > 0) { strInitialCmd = startupCmds[0]; } DWORD dwBasePriority = ULONG_MAX; if (basePriorities.size() > 0) { dwBasePriority = basePriorities[0]; } if (dwBasePriority == ULONG_MAX) dwBasePriority = tabData->get()->dwBasePriority; try { ConsoleHandler ConsoleHandler; ConsoleHandler.StartShellProcessAsAdministrator ( strSyncName, strShell, strInitialDir, strInitialCmd, dwBasePriority, tabData->get()->environmentVariables ); } catch (const ConsoleException& ex) { MessageBox(NULL, ex.GetMessage().c_str(), Helpers::LoadString(IDS_CAPTION_ERROR).c_str(), MB_ICONERROR|MB_OK); return 1; } break; } } return 0; } if (bReuse && HandleReuse(lpstrCmdLine)) return 0; // create main window NoTaskbarParent noTaskbarParent; MainFrame wndMain(lpstrCmdLine); if (!g_settingsHandler->GetAppearanceSettings().stylesSettings.bTaskbarButton) { noTaskbarParent.Create(NULL); } if(wndMain.CreateEx(noTaskbarParent.m_hWnd) == NULL) { ATLTRACE(_T("Main window creation failed!\n")); return 1; } #ifdef _USE_AERO // restore the drop files message in elevated console ::ChangeWindowMessageFilter(WM_DROPFILES, MSGFLT_ADD); ::ChangeWindowMessageFilter(WM_COPYDATA, MSGFLT_ADD); ::ChangeWindowMessageFilter(0x0049, MSGFLT_ADD); #endif wndMain.ShowWindow(nCmdShow); SharedMemory<HWND> sharedInstance; if (bReuse) { sharedInstance.Create(L"ConsoleZ", 1, syncObjNone, _T("")); sharedInstance = wndMain.m_hWnd; } WallPaperThread wallPaperThread(wndMain); if (Helpers::CheckOSVersion(6, 1)) { // Win7 or more, we use the wallpaper slideshow monitoring wallPaperThread.Start(); } TranslateMessageEx = (_t_TranslateMessageEx)::GetProcAddress(::GetModuleHandle(L"user32.dll"), "TranslateMessageEx"); if( !TranslateMessageEx ) Win32Exception::ThrowFromLastError("TranslateMessageEx"); int nRet = theLoop.Run(); if (noTaskbarParent.m_hWnd != NULL) noTaskbarParent.DestroyWindow(); _Module.RemoveMessageLoop(); return nRet; } catch(std::exception& e) { ::MessageBoxA(0, e.what(), "exception", MB_OK); return 1; } }