Exemplo n.º 1
0
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;
}
Exemplo n.º 2
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;
}
Exemplo n.º 3
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;
  }
}