Forum: Ruby Finding Process Name using Window Handle

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Anukul S. (Guest)
on 2009-03-09 22:06
Hi,

In my project, I have a requirement to work with any client application
which I need to kill (if an instance exists) before invoking a fresh
instance. Currently, I have hardcoded the name of the process to
terminate a client before opening it. What I am looking for is a way to
find the process name (using any Win32API or using a Window Handle). I
found out how to get a Window Handle for the client application that is
invoked, is that something I can use to get the process name, or any
other way? Please see the code I am using:

     def killApp
  wmi = WIN32OLE.connect("winmgmts://")
  processes = wmi.ExecQuery("select * from win32_process")
  for process in processes do
     if process.Name.include? "AppName.exe" then
    process.Terminate
     end
  end
     end

Would really appreciate your help.

Thanks,
Anukul
daz (Guest)
on 2009-03-10 05:26
(Received via mailing list)
Ted Baker wrote:
 > Hi all,
 >
 > I have successfully managed to implement the following apis
 >
 > findWindow=Win32API.new("user32.dll", "FindWindow", ['P','P'], 'N')
 > sendMessage=Win32API.new("user32.dll",
"SendMessage",['N','N','N','P'],
 > 'N')
 > getMenu=Win32API.new("user32.dll", "GetMenu", ['N'], 'N')
 > getMenuItemCount=Win32API.new("user32.dll", "GetMenuItemCount",['N'],
 > 'N')
 > getSubMenu=Win32API.new("user32.dll", "GetSubMenu", ['N','N'], 'N')
 > deleteMenu=Win32API.new("user32.dll", "DeleteMenu",
['N','N','N',],'N')
 > drawMenuBar=Win32API.new("user32.dll", "DrawMenuBar", ['N'], 'N')
 > setWindowLong=Win32API.new("user32.dll",
"SetWindowLong",['N','N','N'],
 > 'N')
 >
 > but am unable to get getMenuItemInfo to work, this is because it
takes a
 > type structure and boolean as parameters and i can't figure it out...
 >
 > this is what i have
 >
 > getMenuItemInfo =Win32API.new("user32.dll", "GetMenuItemInfo",
 > ['L','L','NEED','NEED'], 'L')
 >
 > the api is as follows...
 >
 > BOOL GetMenuItemInfo(
 >     HMENU hMenu,
 >     UINT uItem,
 >     BOOL fByPosition,
 >     LPMENUITEMINFO lpmii
 > );
 >
 > typedef struct tagMENUITEMINFO {
 >   UINT    cbSize;
 >   UINT    fMask;
 >   UINT    fType;
 >   UINT    fState;
 >   UINT    wID;
 >   HMENU   hSubMenu;
 >   HBITMAP hbmpChecked;
 >   HBITMAP hbmpUnchecked;
 >   ULONG_PTR dwItemData;
 >   LPTSTR  dwTypeData;
 >   UINT    cch;
 >   HBITMAP hbmpItem;
 > } MENUITEMINFO, *LPMENUITEMINFO;
 >
 > any help greatly appreciated...
 >
 > Thanks
 >
 > Ted


Very late reply.

You should have been directed towards Ruby/DL in the
standard library.

This is now preferred to Win32API which is in the process
of being obsoleted.

http://www.jbrowse.com/text/rdl_en.html


daz
daz (Guest)
on 2009-03-10 05:31
(Received via mailing list)
>>> Oops, that was to the wrong thread.



Anukul S. wrote:
 > Hi,
 >
 > In my project, I have a requirement to work with any client
application
 > which I need to kill (if an instance exists) before invoking a fresh
 > instance. Currently, I have hardcoded the name of the process to
 > terminate a client before opening it. What I am looking for is a way
to
 > find the process name (using any Win32API or using a Window Handle).
I
 > found out how to get a Window Handle for the client application that
is
 > invoked, is that something I can use to get the process name, or any
 > other way? Please see the code I am using:
 >
 >      def killApp
 >   wmi = WIN32OLE.connect("winmgmts://")
 >   processes = wmi.ExecQuery("select * from win32_process")
 >   for process in processes do
 >      if process.Name.include? "AppName.exe" then
 >     process.Terminate
 >      end
 >   end
 >      end
 >
 > Would really appreciate your help.
 >
 > Thanks,
 > Anukul

Hi,

I only looked briefly at this but you might find some clues
from solutions in other languages and be able to convert them
yourself.

http://forums.networkautomation.com/forum/messagev...

http://www.purebasic.fr/english/viewtopic.php?p=26...


I hope this is more helpful than getting no reply :)


daz
This topic is locked and can not be replied to.