How to determine if a program that i have started has finished loading

I need to know how to determine if a program that i have started with a call to CreateProcess() has finshed loading. I have developed a program that starts and stops programs all over a network and need to send messages to tell the programs to turn on or off but have to wait until they are through loading or sometimes the message isnt processed. I have the ProcessId, ThreadId and Handle of each program and am at this point saving their titles and sending the message after i find the title on the screen (very inefficient). If any one can help...
derekthompsonAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

cookreCommented:
if (0==CreateProcess(NULL,TempStr,NULL,NULL,FALSE,0,NULL,NULL,&StartInfo,&ProcInfo))
   {
   ...Unable to spawn
   }
else
  {
  Stati=0;
  lRC=GetExitCodeProcess(ProcInfo.hProcess,&Stati);
  while (lRC && Stati==STILL_ACTIVE)
          {
          Sleep(500);
          lRC=GetExitCodeProcess(ProcInfo.hProcess,&Stati);
          }
  }

Of course, no need for a loop to wait for it, just call GetExitCodeProcess() whenever you want to check and see if it returns STILL_ACTIVE.

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
rgeniusCommented:
i did something similar, but what i did was to create entries in a database for each user. once my program is executed, i add an entry to a table. when the user exists, i delete the entry.

simple but it works for me..  just a thought.... :-)
0
derekthompsonAuthor Commented:
im running some tests with this now but i dont think this is really any different that what im using now to detect if its been started, while (!IsWindow(hWnd)), the problem (i think) is the programs i am starting are all written in VB and are loading a common DLL they are using to load their window frame so if you watch real closely you can see the window actually change its name form ShellClient to the program name. If they receive a message during this time to start processing, for some resaon the message isnt processed (sending a msg of VK_F5 to start processing) which im pretty sure is due to the shellclient dll being loaded. The problem would be pretty simple to solve if the stupid things didnt take so long to load the dll. Some times a program can take as long as 30 sec to open (how inefficient is that) and other times the same program will open in less than a second. I put a timer in my program for a delay but its inefficient because of the inconstency of the time it takes to start up the other programs which results in A.my program seems slow because im waiting too long for other programs to start or B.not all of the programs start processing. I thought getting the actual title from the window for each added program would do the trick but i can watch in task manager and see the name of the program but it isnt on the screen yet which im pretty sure is when my program is sending the F5 message and its getting ignored. At this point i feel the only hope i have is if i can somehow tell if the window is actually visible to the user (if this is possible) but im not really for sure of anything. all comments are appreciated i still may be going down the wrong path
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Programming

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.