ShellExecute and Win32OLE callback

R

Ryan Allan

Hi everybody,

I'm trying to add a callback to a ShellExecute call. (Or at least get
some way to find out when it finishes running.) I'm not having any luck
with WIN32OLE_EVENT, and all the examples I can find use Internet
Explorer or Excel.

The code:

shell=WIN32OLE.new('Shell.Application')

shell.ShellExecute(file_to_use, arguments, directory, operation, show)
#All of these arguments are defined earlier. This call does what I want.

callback=WIN32OLE_EVENT.new(shell, "Quit")
callback.on_event("Quit"){|*args| do_something}
#do_something is defined earlier.

No matter what is in place of "Quit", even nil, it says "interface not
supported" and refuses to run. Any suggestions? (It doesn't have to use
the event class, I only need to know when the ShellExecute process
ends.)

This application is limited to core Ruby, no gems.

Thank you very much,
-Ryan
 
S

Siep Korteling

Ryan said:
Hi everybody,

I'm trying to add a callback to a ShellExecute call. (Or at least get
some way to find out when it finishes running.) I'm not having any luck
with WIN32OLE_EVENT, and all the examples I can find use Internet
Explorer or Excel.

The code:

shell=WIN32OLE.new('Shell.Application')

shell.ShellExecute(file_to_use, arguments, directory, operation, show)
#All of these arguments are defined earlier. This call does what I want.
(...)
-Ryan

You need ShellExecuteEx (see
http://www.codeproject.com/KB/system/newbiespawn.aspx ), but win32ole
doesn't seem to support ShellExecuteEx.

This is what I use in such cases (winXP) :

system('start /w notepad')
# waits until notepad exits
system('start calc')
# does not wait
puts "calc should be running, bye."

hth,

Siep
 
R

Ryan Allan

Thanks Siep;

This does almost exactly what I want:
This is what I use in such cases (winXP) :

system('start /w notepad')
# waits until notepad exits
system('start calc')
# does not wait
puts "calc should be running, bye."

However, it does have the problem for which I originally used
ShellExecute;
I can't have the cmd.exe black window popping up with it. How can I keep
it from showing on screen? (I'm running a background thread to another
process, and stuff flashing on screen annoys the users.)

Thanks again!
-Ryan
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,581
Members
45,056
Latest member
GlycogenSupporthealth

Latest Threads

Top