.... or maybe I’ll start on this one.

Thanks again,

Mike 

Sent from my iPad

> On 13 Dec 2019, at 17:36, Devon McCormick <[email protected]> wrote:
> 
> I think that code was an older version.  This looks more complete:
> //* createProcess.cpp: create a process and return.
> 
> #include "stdafx.h"
> #include "windows.h"
> #include "shellapi.h"
> #include <iostream> // cerr, endl, flush
> #include <stdlib.h> // exit()
> 
> using namespace std;
> 
> #define BUFSZ 2048
> 
> int _tmain(int argc, wchar_t* argv[])
> {       int SHOWFLAG = SW_NORMAL;
> if (argc < 2)
> { wcout << "Syntax is:" << endl;
> wcout << "   " << argv[0] << " [/h or /m] <executable> [arg1 arg2 ...]" <<
> endl;
> wcout << "To run <executable>, [hide or minimize window] with optional
> arguments, as stand-alone process." << endl;
> wcout << "E.g." << endl;
> wcout << argv[0] << " C:\\Windows\\system32\\notepad.exe someFile.txt" <<
> endl;
> return -1;
> }
> 
> SHELLEXECUTEINFO shExecInfo;
> shExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
> shExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
> shExecInfo.hwnd = NULL;
> shExecInfo.lpVerb = L"runas";
> 
> wchar_t args[BUFSZ]; args[0] = L'\0';
> if (argc > 1)
>        {   int StartIx = 1;
>   if( 0==_wcsicmp( argv[StartIx], L"/h")) { StartIx = 2; SHOWFLAG =
> SW_HIDE;}  // Flag "/h" means "hide window"
>       if( 0==_wcsicmp( argv[StartIx], L"/m")) { StartIx = 2; SHOWFLAG =
> SW_SHOWMINIMIZED;}  // Flag "/m" means "minimize window"
>   shExecInfo.lpFile = argv[StartIx];
>   if (argc > (StartIx+1)) wcscpy_s(args, BUFSZ, argv[StartIx+1]);
>   for (int ii = StartIx+2; ii < argc; ii++)
>   {   wcscat_s(args, BUFSZ, L" \0"); wcscat_s(args, BUFSZ, argv[ii]);
>   }
>   args[wcslen(args)] = L'\0';
> } else
> { shExecInfo.lpFile = L"CrapOut";
> }
> shExecInfo.lpParameters = args;
> shExecInfo.lpDirectory = NULL;
> shExecInfo.nShow = SHOWFLAG;
> /*
> vShow [in, optional] / Type: Variant
> A recommendation as to how the application window should be displayed
> initially. The application can ignore this recommendation. This parameter
> can be one of the following values. If this parameter is not specified, the
> application uses its default value.
> Value Meaning
> 0        Open the application with a hidden window.
> 1        Open the application with a normal window. If the window is
> minimized or maximized, the system restores it to its original size and
> position.
> 2        Open the application with a minimized window.
> 3        Open the application with a maximized window.
> 4        Open the application with its window at its most recent size and
> position. The active window remains active.
> 5        Open the application with its window at its current size and
> position.
> 7        Open the application with a minimized window. The active window
> remains active.
> 10       Open the application with its window in the default state
> specified by the application.
> */
> shExecInfo.hInstApp = NULL;
> ShellExecuteEx(&shExecInfo);
> /*
> wcout << L"Process: " << shExecInfo.hProcess << endl;
> wcout << L"Handle: " << shExecInfo.hwnd << endl;
> wcout << L"Instance: " << shExecInfo.hInstApp << endl;
> wcout << L"IDList: " << shExecInfo.lpIDList << endl;
> */
> return 0;
> }
> 
> bool cmdOptionExists(char** begin, char** end, const std::string& option)
> {   return std::find(begin, end, option) != end;
> }
> 
> 
>> On Fri, Dec 13, 2019 at 12:32 PM Devon McCormick <[email protected]> wrote:
>> 
>> Hi - I get different behavior than this running "shell" from a J-console
>> session running under emacs: control returns to the J session after the
>> spreadsheet starts up.  This is under Windows, which you appear to be
>> running.  Also, I get the same behavior under JQt.
>> 
>> However, I have seen the behavior you're reporting when I invoke a .bat
>> file.  For this reason, I wrote a little C module, called "createProcess",
>> to spin off a process and return.
>> 
>> The code for that follows, if you are interested.
>> 
>> Regards,
>> 
>> Devon
>> ---
>> //* createProcess.cpp: create a process and return.
>> 
>> #include "stdafx.h"
>> #include "windows.h"
>> #include "shellapi.h"
>> #include <iostream> // cerr, endl, flush
>> #include <stdlib.h> // exit()
>> 
>> using namespace std;
>> 
>> #define BUFSZ 2048
>> 
>> int _tmain(int argc, wchar_t* argv[])
>> {
>> SHELLEXECUTEINFO shExecInfo;
>> shExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
>> shExecInfo.fMask = NULL;
>> shExecInfo.hwnd = NULL;
>> shExecInfo.lpVerb = L"runas";
>> 
>> wchar_t args[BUFSZ]; args[0] = L'\0';
>> if (argc > 1)
>> { shExecInfo.lpFile = argv[1];
>> if (argc > 2) wcscpy_s(args, BUFSZ, argv[2]);
>> for (int ii = 3; ii < argc; ii++)
>> {   wcscat_s(args, BUFSZ, L" \0"); wcscat_s(args, BUFSZ, argv[ii]);
>> }
>> args[wcslen(args)] = L'\0';
>> } else
>> { shExecInfo.lpFile = L"foo";
>> }
>> shExecInfo.lpParameters = args;
>> shExecInfo.lpDirectory = NULL;
>> shExecInfo.nShow = SW_NORMAL;
>> shExecInfo.hInstApp = NULL;
>> 
>> ShellExecuteEx(&shExecInfo);
>> //WaitForSingleObject(ShExecInfo.hProcess,INFINITE);
>> return 0;
>> }
>> 
>> On Fri, Dec 13, 2019 at 8:56 AM 'Mike Day' via Programming <
>> [email protected]> wrote:
>> 
>>> I've just tried firing up a spreadsheet from J,  and appear to find that
>>> J has to wait for
>>> the spreadsheet to be closed  before the JQT terminal session can proceed.
>>> 
>>> Specifically, if I enter the following from the terminal:
>>>    shell_jtask_ 'c:/d/j901/user/temp/test1.ods'     NB. Open Office
>>> document
>>> 
>>> the cursor hangs at that line until I close the spreadsheet cleanly or
>>> messily using
>>> taskmaster.
>>> 
>>> Odd perhaps,  as shell is a cover for spawn:
>>> ''&$: :(spawn ('cmd /c ' , ]))
>>> 
>>> 
>>> and MSDOS help tells me that cmd/c terminates:
>>> 
>>> "
>>> 
>>> C:\Windows\System32>cmd/?
>>> Starts a new instance of the Windows command interpreter
>>> 
>>> CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]
>>>     [[/S] [/C | /K] string]
>>> 
>>> /C      Carries out the command specified by string and then terminates
>>> 
>>> "
>>> 
>>> 
>>> Not too important for me - just puzzling.
>>> 
>>> 
>>> Thanks,
>>> 
>>> 
>>> Mike
>>> 
>>> 
>>> 
>>> 
>>> ----------------------------------------------------------------------
>>> For information about J forums see http://www.jsoftware.com/forums.htm
>>> 
>> 
>> 
>> --
>> 
>> Devon McCormick, CFA
>> 
>> Quantitative Consultant
>> 
>> 
> 
> -- 
> 
> Devon McCormick, CFA
> 
> Quantitative Consultant
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to