DonationCoder.com forum
 
Read-only archive. This is a static copy of the DonationCoder.com forum. Reading and searching work as before; logging in, posting and private messages do not.
Archive of 2026-10-21 · About this archive · Main site

Author Topic: Commandline execution VC++ using ShellExec  (Read 8,566 times)

renjithcr

  • Participant
  • Joined in 2015
  • *
  • Posts: 5
Commandline execution VC++ using ShellExec
« on: November 05, 2015, 04:49 PM »
Hi i am trying to save a screenshot file to the following path C:\Users\Rn\Desktop\ScreenshotCaptor. But i cant change the screenshot directory.

i used the following link to find the commandline options : http://www.donationcoder.com/Software/Mouser/screenshotcaptor/help/index.html

please find my code below. any help is appreciated.

////////////////////////////// VC++ code  //////////////////////////////

  CString sApp = _T("C:\\Program Files (x86)\\ScreenshotCaptor\\ScreenshotCaptor.exe");

  CString sParameters = _T("-show -capture screen -format png -dir \"C:\\Users\\Rn\\Desktop\\ScreenshotCaptor\" ");

  CString sWorkDir = _T("C:\\Users\\Rn\\Desktop\\ScreenshotCaptor");

  int nRet = (int)ShellExecute(NULL, NULL, sApp, sParameters, sWorkDir, SW_SHOWNORMAL);

/////////////////////////////////////////////////////////////////////////////

mouser

  • First Author
  • Administrator
  • Joined in 2005
  • *****
  • Posts: 40,931
    • Gathering Badge
    • Plugin Coding Medal
    • Participated in NANY Challenge Seventeen Times
    • Cody Award
    • Coding Snacks
    • Volunteers/Staff
Re: Commandline execution VC++ using ShellExec
« Reply #1 on: November 05, 2015, 04:58 PM »
For what you are trying to do (commandline screenshot grabbing), may I recommend Screenshot Captor's little brother: MiniCap
It is made to do exactly what you are doing and is built with same codebase as SC.

renjithcr

  • Participant
  • Joined in 2015
  • *
  • Posts: 5
Re: Commandline execution VC++ using ShellExec
« Reply #2 on: November 10, 2015, 10:35 AM »
Thanks Mouser... it works with ShellExecute()

is there any way to wait until the screen capture is completed? I mean using ShellExecuteEx and WaitForSingleObject functions?

my following code is not working

    SHELLEXECUTEINFO ShExecInfo = { 0 };
    ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
    ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
    ShExecInfo.hwnd = NULL;
    ShExecInfo.lpVerb = NULL;
    ShExecInfo.lpFile = GetMiniCapAppPath().AllocSysString();
    ShExecInfo.lpParameters = sParameters.AllocSysString();
    ShExecInfo.lpDirectory = NULL;
    ShExecInfo.nShow = SW_SHOWNORMAL;
    ShExecInfo.hInstApp = NULL;
    ShellExecuteEx(&ShExecInfo);
    WaitForSingleObject(ShExecInfo.hProcess, INFINITE);

« Last Edit: November 10, 2015, 01:44 PM by renjithcr »

mouser

  • First Author
  • Administrator
  • Joined in 2005
  • *****
  • Posts: 40,931
    • Gathering Badge
    • Plugin Coding Medal
    • Participated in NANY Challenge Seventeen Times
    • Cody Award
    • Coding Snacks
    • Volunteers/Staff
Re: Commandline execution VC++ using ShellExec
« Reply #3 on: November 10, 2015, 02:45 PM »
When you say your code isn't working -- specifically what is happening?

renjithcr

  • Participant
  • Joined in 2015
  • *
  • Posts: 5
Re: Commandline execution VC++ using ShellExec
« Reply #4 on: November 10, 2015, 03:17 PM »


With ShellExecute() i can make a screenshot.

CString sParameters = _T("-save \"") + sImagePath + _T("\" -captureappbyname \"") + sUniNgeExeName + _T("\" -exit");
iRet = (int)ShellExecute(NULL, NULL, GetMiniCapAppPath(), sParameters, NULL, SW_SHOWNORMAL);


but with ShellExecuteEx() and then WaitForSingleObject() as described in my previous post i want to wait until the MiniCap executable exits (using -exit in sParameters). but i see the executable on Task manager. and the function call WaitForSingleObject() waits.


mouser

  • First Author
  • Administrator
  • Joined in 2005
  • *****
  • Posts: 40,931
    • Gathering Badge
    • Plugin Coding Medal
    • Participated in NANY Challenge Seventeen Times
    • Cody Award
    • Coding Snacks
    • Volunteers/Staff
Re: Commandline execution VC++ using ShellExec
« Reply #5 on: November 10, 2015, 03:19 PM »
so you are saying that minicap never exits on its own?

try calling the commandline on your own in a dos commandline box to make sure it exits when called manually.

it seems to me that your commandline args may be slightly wrong, instead of adding at the end: + _T("\" -exit");
try: + _T(" -exit");

renjithcr

  • Participant
  • Joined in 2015
  • *
  • Posts: 5
Re: Commandline execution VC++ using ShellExec
« Reply #6 on: November 10, 2015, 03:19 PM »
Yes. those were the closing symbols _T(\") for -captureappbyname "filename.exe"
« Last Edit: November 10, 2015, 03:35 PM by renjithcr »

renjithcr

  • Participant
  • Joined in 2015
  • *
  • Posts: 5
Re: Commandline execution VC++ using ShellExec
« Reply #7 on: November 10, 2015, 04:15 PM »
it works with both the versions... Thanks mouser...


Original address: https://www.donationcoder.com/forum/index.php?topic=41878.0