http://qs321.pair.com?node_id=265082

Foggy Bottoms has asked for the wisdom of the Perl Monks concerning the following question:

I'm currently developing a win32::GUI based application where I want to track window events. I want to know which is the active window at any time.

The code for this is the following
Win32::GUI::GetForegroundWindow();

What I want is to save the value it returns when it changes. For the time being, I'm using the following bit of code :
while(1)
{
   $activeWindow=Win32::GUI::GetForegroundWindow();
}
The best thing would be to write a listener that'd be triggered when there's an active window changed. Does anyone have an idea ? Thanks guys.

Replies are listed 'Best First'.
Re: create a listener in Win32::GUI
by dada (Chaplain) on Jun 11, 2003 at 16:43 UTC
    if you mean which Win32::GUI window is the active one, you can simply track this with the Activate() events. an example:
    my $activeWindow; sub Window1_Activate { $activeWindow = $Window1; } sub Window2_Activate { $activeWindow = $Window2; } sub Window3_Activate { $activeWindow = $Window3; } # and so on...
    if you instead mean any window on your screen (and you don't need realtime monitoring -- which will hog your CPU), then I would do it setting up a timer object:
    my $checkActive = $Window1->AddTimer( -name => "checkActive", 10 ); # note: 10 milliseconds means 100 times/second sub checkActive_Timer { $activeWindow = Win32::GUI::GetForegroundWindow(); }
    hope this helps...

    cheers,
    Aldo

    King of Laziness, Wizard of Impatience, Lord of Hubris