Daniel Berger
3/5/2007 6:18:00 PM
On Mar 5, 10:12 am, "Paul" <tester.p...@gmail.com> wrote:
> Hi there. I'm still kind of new to scripting with Ruby. I have
> written a small Ruby/Fox app that displays a message in a window at
> regular intervals. The 'regular intervals' part is done using the
> Windows Task Scheduler.
>
> I'd like only one message window to appear at a time though. What I
> am seeing is that if I step away from my computer for a few hours,
> there can sometimes be several of these popup windows on the desktop.
>
> I'd like the app to check (when it first starts up) to see if there
> are any other instances of this popup window on the desktop, and if
> so, just exit... or maybe kill the other window's process (I haven't
> decided which yet).
>
> I've found a few snippets of code that let me find the windows
> processes and kill them (e.g. see below), but they don't work for me.
> My popup window falls under the process name 'ruby.exe' even if the
> window title says 'foo'.
>
> Can someone please tell me if this is possible? How can I use Ruby to
> find a specific window with a specific title? I don't want to just
> kill all the ruby processes in case some other scripts are already
> running that should be.
>
> ----
> require 'win32ole'
>
> mgmt = WIN32OLE.connect('winmgmts:\\\\.')
> mgmt.InstancesOf("win32_process").each{ |proc|
> puts proc.name
>
> }
>
> mgmt.ExecQuery("Select * from Win32_Process Where Name =
> 'ruby.exe'").each { |item|
> # item.Terminate()
> puts 'item = ' + item.to_s}
>
> ----
There's no way to do that via Win32_Process that I can see. There may
be another WMI class that provides that information, but I don't know
what it is.
It's possible to get the information via GetWindowText(), which you'll
have to use in conjunction with other Windows functions.
Regards,
Dan