How do I find a Windows process with a specific Window Title?

Discussion in 'Ruby' started by Paul, Mar 5, 2007.

  1. Paul

    Paul Guest

    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
    }
    ----
    Paul, Mar 5, 2007
    #1
    1. Advertising

  2. Paul

    Jan Svitok Guest

    On 3/5/07, Paul <> 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
    > }


    You can for sure use AutoIt or AutoIt's dll or AutoIt's COM object to
    find & kill the window.
    Although there should be a more straightforward way...
    Jan Svitok, Mar 5, 2007
    #2
    1. Advertising

  3. On Mar 5, 10:12 am, "Paul" <> 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
    Daniel Berger, Mar 5, 2007
    #3
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Andreas Klemt
    Replies:
    1
    Views:
    437
    Steve C. Orr, MCSD
    Aug 10, 2003
  2. Replies:
    0
    Views:
    502
  3. Replies:
    1
    Views:
    521
    David
    Apr 24, 2007
  4. soonic
    Replies:
    11
    Views:
    1,758
    soonic
    Jul 27, 2011
  5. Russell
    Replies:
    2
    Views:
    267
    Russell
    Sep 13, 2004
Loading...

Share This Page