[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

ShellExecute and Win32OLE callback

Ryan Allan

5/29/2008 5:48:00 PM

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
--
Posted via http://www.ruby-....

2 Answers

Siep Korteling

5/29/2008 9:44:00 PM

0

Ryan Allan wrote:
> 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/newbie... ), 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

--
Posted via http://www.ruby-....

Ryan Allan

5/29/2008 9:59:00 PM

0

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


--
Posted via http://www.ruby-....