running another application from my application

Hello,
I have an MDI application that on a specific case runs a 3rd party
application.
I use PeekMessage so my application will be drawn corretly while working on
the 3rd party app.
I want to prevent the user from doing anything in my application while te
3rd party app is running, until the user closes the 3rd party application.
Also I want my application to be shown correctly (handle WM_PAINT, WM_DRAW
etc.).
Currently my application is displayed very well, but the user may do things
in my application while the 3rd party app is running.
I use the following code (pseuo):

BOOL bRetVal =
CreateProcess(filename,commandLine,NULL,NULL,FALSE,0,NULL,workingDir.c_str()
,&startupInfo,&processInfo);

if(!bRetVal)

{

DWORD dwErrorCode = GetLastError();

return;

}

HANDLE handleArray[1];

DWORD dwRetWait = -1;

handleArray[0] = processInfo.hProcess;


while(dwRetWait != WAIT_OBJECT_0)

{

dwRetWait =
MsgWaitForMultipleObjects(1,handleArray,FALSE,INFINITE,QS_ALLEVENTS);

switch(dwRetWait)

{

case WAIT_OBJECT_0:

break;

case WAIT_OBJECT_0+1:

{

MSG msg;

while(PeekMessage(&msg,0,0,0,PM_REMOVE))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

continue;

}

break;

default:

break;

}

}

//close process and thread handles.

CloseHandle(processInfo.hProcess);

CloseHandle(processInfo.hThread);



Thanks,

Janiv Ratson




0
janiv (189)
6/7/2005 2:53:35 PM
vc.mfc 33608 articles. 0 followers. Follow

4 Replies
437 Views

Similar Articles

[PageSpeed] 30

See below...
On Tue, 7 Jun 2005 16:53:35 +0200, "Janiv Ratson" <janiv@aoe6.net> wrote:

>Hello,
>I have an MDI application that on a specific case runs a 3rd party
>application.
>I use PeekMessage so my application will be drawn corretly while working on
>the 3rd party app.
****
First thing to ask yourself when using PeekMessage: Have I a clue about what I'm doing?
The answer is almost always "No". You should only use this call in esoteric conditions,
and its existence should be ignored for normal applications. I see nothing in your
description that suggests you are doing anything esoteric. So remove it.
****
>I want to prevent the user from doing anything in my application while te
>3rd party app is running, until the user closes the 3rd party application.
>Also I want my application to be shown correctly (handle WM_PAINT, WM_DRAW
>etc.).
****
OnUpdateCommandUI works well for this. PeekMessage isn't going to stop anything from
happening; you have to explicitly disable actions. 

What I do is set a boolean indicating the process is running. I then have a thread blocked
on the process handle, waiting for the process to close. When the process closes, I
PostMessage to my main GUI thread a notification that the process has terminated, and that
clears the boolean.

The OnUpdateCOmmandUI handlers would look like

void CMyClass::OnUpdateWhatever(CCmdUI * pCmdUI)
   {
    pCmdUI->Enable(whatever && !process_running);
  }

where the normal enable disable is represented above by "whatever". If "whatever" is
'true' then only the !process_running boolean would participate
*****
>Currently my application is displayed very well, but the user may do things
>in my application while the 3rd party app is running.
>I use the following code (pseuo):
>
****
Pretty much lose all this code. Look at my article on asynchronous process notification on
my MVP Tips site.

if(!CreateProcess(...))
    {
      ... report error 
     return; // or something approrpiate
   }
else
  {
   CWaiter * wait = new CWaiter(this, processinfo.hProcess); // class CWaiter
                                                              // as per my article
   AfxBeginThread(waiter, (LPVOID) wait);
   process_running = TRUE;
  }

(Don't forget to set process_running to FALSE in the class constructor)

the rest follows as per my article.
*****

>BOOL bRetVal =
>CreateProcess(filename,commandLine,NULL,NULL,FALSE,0,NULL,workingDir.c_str()
>,&startupInfo,&processInfo);
>
>if(!bRetVal)
>
>{
>
>DWORD dwErrorCode = GetLastError();
>
>return;
>
>}
>
>HANDLE handleArray[1];
>
>DWORD dwRetWait = -1;
>
>handleArray[0] = processInfo.hProcess;
>
>
>while(dwRetWait != WAIT_OBJECT_0)
>
>{
>
>dwRetWait =
>MsgWaitForMultipleObjects(1,handleArray,FALSE,INFINITE,QS_ALLEVENTS);
****
There is no need to create a separate handle array here; &processinfo.hProcess would have
done the job just as easily
****
>
>switch(dwRetWait)
>
>{
>
>case WAIT_OBJECT_0:
>
>break;
>
>case WAIT_OBJECT_0+1:
>
>{
>
>MSG msg;
>
>while(PeekMessage(&msg,0,0,0,PM_REMOVE))
>
>{
>
>TranslateMessage(&msg);
>
>DispatchMessage(&msg);
>
>}
>
>continue;
>
>}
>
>break;
>
>default:
>
>break;
>
>}
>
>}
>
>//close process and thread handles.
>
>CloseHandle(processInfo.hProcess);
>
>CloseHandle(processInfo.hThread);
>
>
>
>Thanks,
>
>Janiv Ratson
>
>
>

Joseph M. Newcomer [MVP]
email: newcomer@flounder.com
Web: http://www.flounder.com
MVP Tips: http://www.flounder.com/mvp_tips.htm
0
newcomer (15977)
6/7/2005 9:36:54 PM
>I want to prevent the user from doing anything in my application while te
>3rd party app is running, until the user closes the 3rd party application.

Disable your top level window (use EnableWindow).

Dave
0
davidl7375 (2061)
6/8/2005 8:51:43 AM
Maybe something like this. I did not test it,
just wrote it from memory.
Note that in this scenario you have no chance
to get access to your program back if the child
process does finish properly. so be careful with
things like that.

BOOL bRetVal =
CreateProcess(filename,commandLine,NULL,NULL,FALSE,0,NULL,workingDir.c_str()
,&startupInfo,&processInfo);

if (!bRetVal)
{
 DWORD dwErrorCode = GetLastError();
 return;
}

DWORD dwRetWait = WAIT_FAILED;
AfxGetMainWnd()->EnableWindow(FALSE);
while(TRUE)
{
 dwRetWait =
 WaitForSingleObject(processInfo.hProcess, 10);

 if(dwRetWait == WAIT_OBJECT_0)
  break;

 CWinThread* pWinThread = AfxGetThread();
 MSG msg;
 while (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
 {
  if (!pWinThread->PumpMessage())
  {
   ASSERT(pWinThread->m_msgCur.message == WM_QUIT);
   AfxPostQuitMessage(pWinThread->m_msgCur.wParam);
   return;
  }
 }

 // let MFC do its idle processing
 LONG lIdle = 0;
 while (pWinThread->OnIdle(lIdle++));
}
AfxGetMainWnd()->EnableWindow(TRUE);

//close process and thread handles.
CloseHandle(processInfo.hProcess);
CloseHandle(processInfo.hThread);

0
6/8/2005 10:35:43 AM
As you point out, this is risky. Also, it is CPU-intensive, because that 10ms timeout
basically means that the thread is always running. The problem here is one I see far too
often: apply sequential programming models to asynchronous event-driven code. You have to
think asynchronously in an event-driven world. I consider disabling the main window to be
somewhat user-hostile, because the user can't exit the program or do anything at all. In
general, there should be a philosophy of "keep the GUI alive".
					joe

On 8 Jun 2005 03:35:43 -0700, "Uwe Kotyczka" <uwe.kotyczka@web.de> wrote:

>Maybe something like this. I did not test it,
>just wrote it from memory.
>Note that in this scenario you have no chance
>to get access to your program back if the child
>process does finish properly. so be careful with
>things like that.
>
>BOOL bRetVal =
>CreateProcess(filename,commandLine,NULL,NULL,FALSE,0,NULL,workingDir.c_str()
>,&startupInfo,&processInfo);
>
>if (!bRetVal)
>{
> DWORD dwErrorCode = GetLastError();
> return;
>}
>
>DWORD dwRetWait = WAIT_FAILED;
>AfxGetMainWnd()->EnableWindow(FALSE);
>while(TRUE)
>{
> dwRetWait =
> WaitForSingleObject(processInfo.hProcess, 10);
>
> if(dwRetWait == WAIT_OBJECT_0)
>  break;
>
> CWinThread* pWinThread = AfxGetThread();
> MSG msg;
> while (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
> {
>  if (!pWinThread->PumpMessage())
>  {
>   ASSERT(pWinThread->m_msgCur.message == WM_QUIT);
>   AfxPostQuitMessage(pWinThread->m_msgCur.wParam);
>   return;
>  }
> }
>
> // let MFC do its idle processing
> LONG lIdle = 0;
> while (pWinThread->OnIdle(lIdle++));
>}
>AfxGetMainWnd()->EnableWindow(TRUE);
>
>//close process and thread handles.
>CloseHandle(processInfo.hProcess);
>CloseHandle(processInfo.hThread);

Joseph M. Newcomer [MVP]
email: newcomer@flounder.com
Web: http://www.flounder.com
MVP Tips: http://www.flounder.com/mvp_tips.htm
0
newcomer (15977)
6/8/2005 4:16:01 PM
Reply:

Similar Artilces:

enter data in 1 cell and produce a number in another cell
I am trying to set up a form for co-workers with limited computer skills. In cell "A" the employee would enter a name and I need to have a corresponding number appear in another cell. As the form is used for legal documentation, the corresponding number must be accurate and since the numbers are long, we are trying to avoid errors upfront. Any assistance would be appreciated. See if this helps: http://contextures.com/xlFunctions02.html -- Biff Microsoft Excel MVP "Towboat Girl" <Towboat Girl@discussions.microsoft.com> wrote in message ne...

Need only one DLL instance to run...
Hi all, 1: if two apps load the same DLL - LoadLibrary(...) - system will create to different instance of the DLL... Now, in my DLL i've a CList and i need it to be visible to all instance and all apps!!!! Is there a way!? 2: I need the dll to remain loaded till machine reboot!!! Is it possible!? Thanks Ale >if two apps load the same DLL - LoadLibrary(...) - system will create to >different instance of the DLL... >Now, in my DLL i've a CList and i need it to be visible to all instance and >all apps!!!! > >Is there a way!? It'll be difficult to share a ...

SOAP Server Application Faulted 08-10-04
Hi! When i execute an asp.net code for MS CRM, i get the following error message : ERREUR SOAP: SOAP Server Application Faulted <detail><error> <code>80040225</code> <description> The specified user is either disabled or is not a member of any business unit. </description> <file>d:\crm\build\3297 \src\platform\security\crmsecurity\secmain.cpp</file><line> 2281</line></error></detail> Source: System.Web.Services 'The lines that create the CRM user object : Dim BizUser as new Microsoft.CRM.Proxy.BizUser bizUser.C...

credentials to run this report are not stored
Hi all, I'm getting this problem when I try and create a timed subscription. Error: ...credentials to run this report are not stored..... ok I created another folder under the same folder where I'm having this problem. loaded the report and I have no problem. I even moved the current folder with that report in it. Creted another folder with the same name and still the same problem with that named folder. With a different name for the folder I have no problem??? I'm stuck here.. almost all post just talk about storing the credentials, Already done and works...

Repost: Error running Report in an Access 2003 db from Access 2007
Ok, clarification - ignore the code from my original post, some of the reports do work. The ones that don't are reports that I have being filtered. Here is the code from one of those buttons: Private Sub Ok_Click() On Error GoTo Ok_Click_Err 'using the customer sub form for customer state report to filter the report, clicking ok will open report for selected state Dim stDocName As String Dim stLinkCriteria As String If Not IsNull(Me.Search_Results) Then stLinkCriteria = "[StateOrProvince] = """ & Me![Search Results] & """"...

run time error 10-22-03
I am having a lot of trouble when I open up word I get run time error 52 in VB. I have tried uninstalling word and reinstalling it. WE have tried deleting the macro but still to no avail can someone help me please? ...

Automatically run macro
My name is Mike and i have a question about microsoft excel macro's. Attached is a copy of the excel sheet im working on. Below the excel sheet is the macro I built. Some of the cells contain given values and some cells are calculated from formulas. Cell (G4) is my given value...it is related to cell (C32). The point is, I plug a value into cell (C10) and it runs through the rest of the calcs in the other cells and gives me a value to cell (C32). I built a macro that works as a goal seek pretty much. The macro makes cell (C32) equal to cell (G4) and gives me the value for cell (C10). I wan...

display changing label caption on form as sub runs w/o screen flic
let's say i have this routine Sub Test label1.caption = "Starting ... " 'do events label1.caption = "Getting there ... " 'do events label1.caption = "Finished! ... " End Sub on my form, i have label1 right in the middle what happens is sometimes the message will change, and then sometimes it wont, or it will show the first one, skip the second and jump to the third etc etc etc so it is inconsistent. is there a way to make sure the label caption displays consistently, on time, wh...

Excel Continuous Running Total
I posted a message earlier and have received a partial solution. I want to keep track of how much stock prices go up or down with a running total of how much they go up or down over several days until the direction changes. For example, if price go up 10 on Mon, 20 on Tues, 30 on Thurs and down 10 on Fri I want my running total column to show a positive number of 60 and then a red number of 10 and continue adding the amount of the total of the down days until the market shows an up day. The formula I am now using total the first and second day but does not do a running total count if t...

Appointment acceptance going to another user
Hi, While a staff member was away on maternity leave, I gave her co-worker rights to her Mailbox allowing her to open it in her Outlook and send on behalf of etc. Since the maternity leave finished I have removed all the rights I setup but one issue remains. When the maternity leave staff member makes a new appointment and invites participants, the co-worker receives a copy of the acceptance by invited staff members. The co-worker doesn't receive any other mail addressed to the maternity leave person nor the appointment itself, just the appointment acceptances. Does anyone know w...

Money 2002 will not run
I had been using Money 2002 for approx. 3 yrs on my home pc (Dell Dim 2100, XP Home Ed. w/SP2). Last year, it simply would not launch. No error message, no splash screen, no app opening, no process listed in Task Manager. Just.... nothing.... The only change that was made to the system since M2k2 last ran was upgrading my a/v solution from Trend Micro PC-Cillin to TM Internet Security. I have tried disabling every aspect of the Internet Security product, as well as completely un-installing the app, and then attempting to run Money, but the same thing (nothing) happens. I was considerin...

Exchange 2k3 Recovery in another h/w
Friends Need your help guys!,, Is there any way i can restore exchange2003 in another h/w with same os? Existing exchange server name :osiExchange OS :Windows 2003 Standerd SP1. Domain member :osiExchnage.osi.local New H/w I hv installed Windows2003 Sp1 and joined to my existing domain ! do i need to keep the same hostname for new server? pls heelp me out by steps and advises Best Regards, On 27 Jan 2007 21:01:14 -0800, "Vamsi" <konasanimurali@gmail.com> wrote: >Friends > >Need your help gu...

Re: Workflow just wont run automatically, i have to run them manually
Yes, but i realized what i was doing wrong. I assumed [bad idea] that if i create a case and hit Save & Close the first time, taht the rule will run. In order for the rule to run automatically, it has to be Save, once it saves it, then Save & Close. Thanks for your reply. "Hi, Did you check the workflow monitor to see if the rules get triggered correctly and complete sucessfully ? Have a nice day, St=E9phane Dorrekens " --------------= Posted using GrabIt =---------------- ------= Binary Usenet downloading made easy =--------- -= Get GrabIt for free from http://...

Outlook Still Running
I am running XP Pro with Office 2003 Pro and sometimes when I exit out of Outlook, Outlook.exe and Winword.exe stay as processes still running. Does anyone else have this problem and what can do to make sure this does not happen? Thanks for your help -- Neil Remove ABCD from Email address to reply <neil154ABCD@earthlink.net> wrote: > I am running XP Pro with Office 2003 Pro and sometimes when I exit > out of Outlook, Outlook.exe and Winword.exe stay as processes still > running. Does anyone else have this problem and what can do to make > sure this does not happ...

Another Bug ?
Hi Apologies if you people already know this - but I was asked a question by someone I cannot answer. The person was setting a conditional format too show values >= 0.03, and he have the following calculation in to arrive at this value - but did not format the cell as the condition was not true ??? Enter 12.5 to A1 Enter 12.47 to B1 Enter = ABS(A1-B1) to C1 the answer is 0.03 - but if you expand the decimal places it isn't !! It also doesnt work with 6.5-6.47, 24.5-24.47........I havent gone any further because I am horrified :-( Any suggestions or advice would be gratefully recei...

Very strange problems while running Great Plains on workstations
I notice that a few workstations in an office I support are having problems when they run Great Plains. Excel, Outlook, Word and Dynamics.exe are showing in the Application event log as being Hanging or Faulting. I also see Fault Bucket errors, but when I search online I cannot find any information online. Here is one of the Fault Bucket errors: 3:15:35 pm 28-Sep-06 Application Hang None 1001 N/A Fault bucket 296734104. Also, these workstations are experiencing problems printing PDF files. Has anyone out there seen this behavior and if so, how can these problems be fixed? Thank you, ...

Publisher 2000 will not run
I had problems with Publisher 98 not running which we=20 never did solve so I installed office 2000 to see if=20 Publisher 2000 would function. Same problem: The flash=20 screen pops up and then disappears. No program. Microsoft=AE Publisher 2000 Version 6.0 has encountered a=20 problem and needs to close. We are sorry for the=20 inconvenience. Howard, hi again, Have you tried opening Publisher in safe mode? Publisher retains all printer information within its publications. If you can open Publisher in safe mode, either regress or update your printer and video drivers. -- Mary Sauer MS MV...

another for the experts
I have now figured out my VLOOKUP problem, so let me proceed with my troubles. I have a sheett of data that represents the entire human genome, organized in ascending order by chromosome. The list is around 9500 rows, and consists of 9 columns. The first is always going to be my x series (the whole point of this is to make a dynamic scatter plot), and each subsequent column is a log2 value, for 1 of 8 individual data sets, which represent my y series. I know how to keep the x series constant, and choose which y series i want via a combo box and linked cell, with the help of an offset...

Another Rejection of Online Services
Apparently my 2007 Money file is using a date from back in 2005 (must be the date I upgraded to Money 2006) to claim my online services are expired. Closing and reopening the file is of little value since it only avoids the initial expiration notice but still displays the expiration notice in the reminders section cutting off any chance at updating my financial records. Bad timing as the first of the month is just around the corner. Best solution I've received so far has been to completely deconstruct and rebuild my money file. Not a task I relish since my records go back to 1998. I...

Macro automatic run at open
Is there a simple way to have a macro automatically started when a workbook is open? Thanks Francesco Francesco, use the workbook open event, like this, Private Sub Workbook_Open() MsgBox "It Works!" End Sub To put in this macro, from your workbook right-click the workbook's icon and pick View Code. This icon is at the top-left of the spreadsheet this will open the VBA editor to the thisworkbook module, then, paste the code in the window that opens on the right hand side, press Alt and Q to close this window and go back to your workbook, now this will run every time you ...

Can I sort text data by reference to text data in another column?
I have imported text data (e-mail addresses) into a worksheet that also has a column of text data (also e-mail addresses), many of which, but not all, are the same as the imported text data. I wish to sort the imported text data into the rows of the matching original text data. How do I do that? The basic process would be to get all email addresses into a single column. Then select ALL columns to be sorted and use Data --> Sort and choose the column with the email addresses as the column to base the sort on. Duplicate email addresses will end up on adjacent rows. &q...

Running diferent query with one command
I would like to run queries with just one botton and a date dispalyed in a form. If Sunday March 09, 2008, is dispalyed I would like to click on a button and run a query that will select emloyees that are scheduled to work on this day of the week along with other pertinent information already preselected by that query. Currenlty I am using 7 diferrent buttons to run 7 differnrent append queries but it is too confusing and I am sure there is an better way. Thanks Charles -- Message posted via AccessMonster.com http://www.accessmonster.com/Uwe/Forums.aspx/access-queries/200803/1 Why 7 butt...

Win 7 Pro running 64 bit with Outlook 2007. Problem: frequent cras
I have a brand-new computer with i-7 processors and 8 GB of RAM running Win 7 Pro 64-bit. At the time of upgrading to new computer, i upgraded office 2003 to 2007. For the first month, all was well. Suddenly, my computer started crashing regularly, as in every 30 minutes. The screen would go blank, the mouse and keyboard wouldn't work, and I would have to do a hard reboot. The store where i bought the PC has done everything imaginable to try to isolate the problem. They have swapped out every component, including the RAM, motherboard, power supply, video card and all ca...

Run AutoDim without running Integration
I wonder how to modify the AutoDim.txt file so that every time the it only execute the macro file to logon into Great Plains, run couple of posting and then logoff Great Plains after posting. Is AutoDim able to run without running any integration? I don't see that happening as it wasn't the original idea behind the application. However if all you want to do is what you are saying, just create a macro to do this and run it via a scheduler. I believe there are several KB articles that talk about macros and dynamics/great plains. patrick developer support -- This posting is...

DTM Need help deciding which tests to run.
Hello all, I'm not sure if this is the right group, so if I'm in the wrong place please tell me. I'm trying to get drivers signed for a USB device, and I'm not certain which category it falls under. The device uses winusb. It is an embedded system for test and measurement that only uses control and bulk transfers. It also has an embedded hub that exposes an additional port for general use. Thank you for your time, Jay Dolan Did you ever get through WHQL testing with winusb and the inf file? I am trying to pass WHQL testing and have encountered 3 errors ...