Well, I answered my own question, so I thought I'd post the answer in case
it helps someone else who wants to close a window in this manner. Turns out
I had to create a quoted word list and add WM_CLOSE to it (as a part of my
"use Win32::GUI" line):

 

####################################################

 

use Win32::GUI qw( WM_CLOSE );

 

my $tray = Win32::GUI::FindWindow("PGPtray_Hidden_Window
","PGPtray_Hidden_Window");

Win32::GUI::SendMessage($tray,WM_CLOSE,0,0);

 

####################################################

 

To be perfectly honest, I don't understand *why* that fixed the problem, but
it did. I couldn't get any windows to close until I did that-now I can close
any window (that allows it) by finding its handle and sending it the
WM_CLOSE message.

 

-Rob

 

  _____  

From: Perl Rob [mailto:[EMAIL PROTECTED] 
Sent: Wednesday, August 15, 2007 5:06 PM
To: 'Win32 GUI Users Mailing List'
Subject: RE: FindWindow and SendMessage

 

D'oh!

 

I just saw that FindWindow() and SendMessage() are both listed in the
"Common Methods" of the ActivePerl documentation. I apologize that I didn't
RTFM before posting!

 

However, I can't figure out how to properly call the SendMessage() method.
It requires an object reference, but how can I create an object reference to
a window that isn't mine?

 

#####################################################

 

use Win32::GUI;

 

my $windowToClose =
Win32::GUI::FindWindow("PGPtray_Hidden_Window","PGPtray_Hidden_Window"); #
This is a window started by another application

$windowToClose->Win32::GUI::SendMessage("WM_CLOSE",0,0); # This fails
because $windowToClose is not an object reference.

 

#####################################################

 

Thanks,

Rob

 

  _____  

From: Perl Rob [mailto:[EMAIL PROTECTED] 
Sent: Wednesday, August 15, 2007 12:17 PM
To: 'Win32 GUI Users Mailing List'
Subject: FindWindow and SendMessage

 

Hi all,

 

I'm attempting to close a window using the FindWindow() and SendMessage()
functions as documented in MSDN. I can't get it to work, so I was wondering
if anyone might help me see what's wrong with my code:

 

######################################################

 

use Win32::API;

 

my $findWindow = Win32::API->new( 'user32', 'FindWindow', 'PP', 'P' );

my $sendMessage = Win32::API->new( 'user32', 'SendMessage', 'PIIN', 'P' );

 

my $windowToClose =
$findWindow->Call("PGPtray_Hidden_Window","PGPtray_Hidden_Window");

$sendMessage->Call($windowToClose,"WM_CLOSE",0,0);

 

######################################################

 

In particular, I'm not sure whether I'm specifying the correct parameters
for each method. (Should the parameters for FindWindow() be 'PP', with a
return value of 'P'? And should the parameters for SendMessage() be 'PIIN',
with a return value of 'P'?)

 

Thanks in advance,

Rob

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
Perl-Win32-GUI-Users mailing list
Perl-Win32-GUI-Users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users
http://perl-win32-gui.sourceforge.net/

Reply via email to