$Bill Luebkert wrote:
Voyer, Paul wrote:

Hello!

I did a Perl script to do some automated setting...

It is running on Windows 2000, a part on my script is using Win32::TieRegistry.
I update environment variable, when I look in to the registry, the variable is
updated correctly. Starting a new "cmd" window, the same variable has the
previous value.

I found on a site (http://www.codeproject.com/system/pcset.asp) that we have to
broadcast the variable WM_SETTINGSCHANGE to all windows in the system after
updating variable in to the registry.

Is this apply? How can I do it in Perl?

I use setx.exe as a patch right now... It is working, but I will prefer to use
Perl only.

I think this should do it (untested in this form):

notify_windows ('Environment');
exit 0;

sub notify_windows {
use Win32::API;
use constant HWND_BROADCAST => 0xFFFF;
use constant WM_SETTINGCHANGE => 0x001A;

my $registry_key = shift;
print "Flushing key: $registry_key \n";
my $SendMessage = new Win32::API("user32", "SendMessage", [qw(N N P P)], 'N') or
die "Finding SendMessage: " . Win32::FormatMessage (Win32::GetLastError ());
my $result = $SendMessage->Call(HWND_BROADCAST, WM_SETTINGCHANGE, 0,
'Environment');
Actually, that should be:

my $result = $SendMessage->Call(HWND_BROADCAST, WM_SETTINGCHANGE, 0,
  $_[0] || 'Environment');

or you could leave the arg off on the call and leave it fixed at 'Environment'.

print "SendMessage result: $result \n";

}


--
  ,-/-  __      _  _         $Bill Luebkert   ICQ=162126130
 (_/   /  )    // //       DBE Collectibles   Mailto:dbe@;todbe.com
  / ) /--<  o // //      http://dbecoll.tripod.com/ (Free site for Perl)
-/-' /___/_<_</_</_     Castle of Medieval Myth & Magic http://www.todbe.com/

_______________________________________________
Perl-Win32-Admin mailing list
[EMAIL PROTECTED]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to