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-...
.
Servizio di avviso nuovi messaggi
Ricevi direttamente nella tua mail i nuovi messaggi per
ShellExecute and Win32OLE callback
Inserendo la tua e-mail nella casella sotto, riceverai un avviso tramite posta elettronica ogni volta che il motore di ricerca troverà un nuovo messaggio per te
Il servizio è completamente GRATUITO!
x
Login to ForumsZone
Login with Google
Login with E-Mail & Password