From: Jan Svitok Date: 2007-03-06T03:16:57+09:00 Subject: Re: How do I find a Windows process with a specific Window Title? 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...