From: Daniel Berger Date: 2007-03-06T03:26:18+09:00 Subject: Re: How do I find a Windows process with a specific Window Title? 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