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

**URL:** <https://www.ruby-forum.com/t/how-do-i-find-a-windows-process-with-a-specific-window-title/87742>\
**Category:** Ruby\
**Created:** [March 5, 2007, 6:16pm UTC](https://www.ruby-forum.com/t/how-do-i-find-a-windows-process-with-a-specific-window-title/87742 "2007-03-05T18:16:18Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![paul](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/bbe5ce/32.png) [@paul](https://www.ruby-forum.com/u/paul)\
**Post date:** [March 5, 2007, 6:16pm UTC](https://www.ruby-forum.com/t/how-do-i-find-a-windows-process-with-a-specific-window-title/87742/1 "2007-03-05T18:16:18Z")

</div>

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

```

## }

---

<div class="post-metadata">

**Author:** ![paul](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/bbe5ce/32.png) [@paul](https://www.ruby-forum.com/u/paul)\
**Post date:** [March 5, 2007, 7:17pm UTC](https://www.ruby-forum.com/t/how-do-i-find-a-windows-process-with-a-specific-window-title/87742/2 "2007-03-05T19:17:29Z")

</div>

On 3/5/07, Paul [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> are any other instances of this popup window on the desktop, and if  
> kill all the ruby processes in case some other scripts are already  
> 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…

---

<div class="post-metadata">

**Author:** ![paul](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/bbe5ce/32.png) [@paul](https://www.ruby-forum.com/u/paul)\
**Post date:** [March 5, 2007, 7:27pm UTC](https://www.ruby-forum.com/t/how-do-i-find-a-windows-process-with-a-specific-window-title/87742/3 "2007-03-05T19:27:31Z")

</div>

On Mar 5, 10:12 am, “Paul” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> are any other instances of this popup window on the desktop, and if  
> kill all the ruby processes in case some other scripts are already
> 
> 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
