Detecting active windows process

Hi,

Is there a way to detect if a specified program e.g. firefox.exe is
active / on top?

Thanks in advance

Danny Hiemstra wrote:

Is there a way to detect if a specified program e.g. firefox.exe is
active / on top?

One way is to use the GetForegroundWindow() Windows API. In case the user is in a dialog window, you might need to step back through the ownership chain to get the real main window. Then check the window class name for the application's main window, often that gives away the application.

Best regards,

Jari Williamsson

require 'sys/proctable'
require 'win32/api'
include Win32
include Sys

GetForegroundWindow = API.new('GetForegroundWindow', 'V', 'L',
'user32')
GetWindowThreadProcessId = API.new('GetWindowThreadProcessId', 'LP',
'L', 'user32')

pid = [0].pack('L')
hwnd = GetForegroundWindow.call
GetWindowThreadProcessId.call(hwnd, pid)
pid = pid.unpack('L')[0]

p ProcTable.ps(pid).comm

Regards,

Dan

···

On Nov 26, 6:10 am, Danny Hiemstra <dannyhiems...@gmail.com> wrote:

Hi,

Is there a way to detect if a specified program e.g. firefox.exe is
active / on top?

Thank you very much, this seems to work:
Win32API.new("user32","GetForegroundWindow",,"N").call

The only problem I have now is that the above example returns an
integer of a pointer / program id?
Now I have searched on google for an half an hour but I cannot find
out how to get the name of the process returned by the Win32API.

Thanks in advance

···

On 26 nov, 14:44, Jari Williamsson <jari.williams...@mailbox.swipnet.se> wrote:

Danny Hiemstra wrote:
> Is there a way to detect if a specified program e.g. firefox.exe is
> active / on top?

One way is to use the GetForegroundWindow() Windows API. In case the
user is in a dialog window, you might need to step back through the
ownership chain to get the real main window. Then check the window class
name for the application's main window, often that gives away the
application.

Best regards,

Jari Williamsson