ShellExec - view output
CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 4 of 4

Thread: ShellExec - view output

  1. #1
    Join Date
    Jul 2014
    Posts
    31

    ShellExec - view output

    I have this functions that executes DOS commands in the specified command line and git function in the specified command line.
    I want to view the the output of the commands however the windows DOS shell opens and close to fast for me to do that.

    I can't find a way to make the windows DOS shell window stay open.

    I can't find a way to redirect the command output to a text file that I can read outside my MFC app (DOS redirect >> does not work or at least I can't find the out file)

    And I can open a permanent DOS shell window but I can't find a way to re-direct all subsequent command lines to it rather than them being executed in their own individual DOS shells that open and close too fast.

    Any suggestions folks?

    Code:
    bool CCmdLine::ExecCon(CWnd* pParent, LPCSTR lpszCmdLine)
    {
    	HINSTANCE hResult = ShellExecute(pParent->GetSafeHwnd(), "open", "cmd.exe", lpszCmdLine + m_strRedir, m_strWorkingFolder, SW_SHOWNORMAL);
    
    	if ((int)hResult < 33)
    		AfxMessageBox(GetErrorMessage(hResult), MB_OK | MB_ICONERROR);
    	return (int)hResult > 32;
    }
    bool CCmdLine::ExecGit(CWnd* pParent, LPCSTR lpszCmdLine)
    {
    	HINSTANCE hResult = ShellExecute(pParent->GetSafeHwnd(), "open", "git.exe ", lpszCmdLine + m_strRedir, m_strWorkingFolder, SW_SHOWNORMAL);
    
    	if ((int)hResult < 33)
    		AfxMessageBox(GetErrorMessage(hResult), MB_OK | MB_ICONERROR);
    	return (int)hResult > 32;
    }

  2. #2
    2kaud's Avatar
    2kaud is offline Super Moderator Power Poster
    Join Date
    Dec 2012
    Location
    England
    Posts
    5,787

    Re: ShellExec - view output

    Code:
    lpszCmdLine + m_strRedir
    Assuming m_strRedir is of type char*, then you can't concatenate strings of this type like this. With c++, you need something like
    Code:
    auto cmdline = std::string(lpszCmdLine) + m_strRedir;
    
    HINSTANCE hResult = ShellExecute(pParent->GetSafeHwnd(), "open", "cmd.exe", cmdline.c_str(), m_strWorkingFolder, SW_SHOWNORMAL);
    All advice is offered in good faith only. You are ultimately responsible for the effects of your programs and the integrity of the machines they run on. Anything I post, code snippets, advice, etc is licensed as Public Domain https://creativecommons.org/publicdomain/zero/1.0/

    C++17 Compiler: Microsoft VS2017 (15.4.1)

  3. #3
    Join Date
    Jul 2014
    Posts
    31

    Re: ShellExec - view output

    Quote Originally Posted by 2kaud View Post
    m_strRedir is of type char*, then you can't concatenate strings of this type like this.
    m_strRedir is a CString - concatenates as expected.

  4. #4
    2kaud's Avatar
    2kaud is offline Super Moderator Power Poster
    Join Date
    Dec 2012
    Location
    England
    Posts
    5,787

    Re: ShellExec - view output

    Also, if you want to execute a command at the command prompt using cmd.exe and keep the console open after, then you need to use the /K option for cmd which has to be specified with the command and not as part of cmd.exe.

    Consider
    Code:
    auto cmdline = "/K " + std::string(lpszCmdLine) + m_strRedir;
    
    HINSTANCE hResult = ShellExecute(pParent->GetSafeHwnd(), "open", "cmd.exe", cmdline.c_str(), m_strWorkingFolder, SW_SHOWNORMAL);
    All advice is offered in good faith only. You are ultimately responsible for the effects of your programs and the integrity of the machines they run on. Anything I post, code snippets, advice, etc is licensed as Public Domain https://creativecommons.org/publicdomain/zero/1.0/

    C++17 Compiler: Microsoft VS2017 (15.4.1)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  


Windows Mobile Development Center


Click Here to Expand Forum to Full Width

This a Codeguru.com survey!


On-Demand Webinars (sponsored)