Voyer, Paul wrote:
The module Win32::AdminMisc did not work for me, even if it returned successful!


I have used Bill's solution, it worked just fine!
I may miss something here. But how do we find those constant value for
HWND_BROADCAST and WM_SETTINGCHANGE?
I have the SDK installed on my machine and an old Dev Studio and Cygwin
and just grep them for the values I want.  I call it typdef.pl and I have
it aliased in tcsh 'alias td perl D:/home/dbe/bin/typedef.pl \!*' so I
can just type
	td WM_SETTINGCHANGE
or
	td 'WM_.*'
and get all WM_ constants.  I'll include my script here:

#!perl -w --

#- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

use strict;
use Data::Dumper; $Data::Dumper::Indent=1;
$| = 1; binmode STDOUT;
our %A;				# holds command line switches
for (my $ii = 0; $ii < @ARGV; ) {
	last if $ARGV[$ii] =~ /^--$/;
	if ($ARGV[$ii] !~ /^-{1,2}(.*)$/) {	# if not switch
		$ii++; next;			# ignore
	}
	my $arg = $1;
	splice @ARGV, $ii, 1;			# remove arg
	if ($arg =~ /^([\w]+)=(.*)$/) {		# if assign
		$A{$1} = $2;
	} else {				# boolean
		$A{$1}++;
	}
}

#- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

my $usage = <<EOD;
Usage: $0 [-c] [-i] [-m] [-p] [-s] <expr> ...
	-c		search Cygwin includes
	-i		case insensitive
	-m		search MSDEV includes (default)
	-p		print typedefs list out
	-s		search SDK includes
	<expr>		expr to match (usually a word)

EOD
die $usage if $A{h} or $A{help};

# I use these for picking Win32::API arg types

my $defs = <<EOD;
	char = (8)
	uchar = (8)
	short = (16)
	ushort = (16)
	int = (32)
	uint = (32)
	long = (32)
	ulong = (32)

	WCHAR = WORD = ushort (16)
	wchar_t = ushort (16)
	WORD = ushort (16)

	DWORD = ulong (32)
	GLOBALHANDLE = HANDLE = void * = ulong (32)
	HANDLE = PVOID = void * = ulong (32)
	HINSTANCE = void * = ulong (32)
	HKEY = void * = ulong (32)
	HMODULE = HINSTANCE = void * = ulong (32)
	HWND = void * = ulong (32)
	LHANDLE = ulong (32)
	LOCALHANDLE = HANDLE = void * = ulong (32)
	LP = WCHAR FAR * = ulong (32)
	LPDWORD = DWORD * = ulong (32)
	LPHANDLE = HANDLE * = void * = ulong (32)
	LPLHANDLE = ulong (32)
	PDWORD = near * WORD = ulong (32)
	SPHANDLE = near * HANDLE = void * = ulong (32)
	OLE_HANDLE = uint (32)
	PHANDLE = HANDLE * = void * = ulong (32)
	PHKEY = HKEY * = void * = ulong (32)
	PWCHAR = WCHAR * = void * = ulong (32)
	SC_HANDLE = HANDLE = void * = ulong (32)
	SDWORD = long (32)
	SERVICE_STATUS_HANDLE = DWORD = ulong (32)
	SQLHWND = HWND = void * = ulong (32)
	UDWORD = ulong (32)

	DWORDLONG = __uint64 (64) or double (64)

EOD

print $defs and exit if $A{p};

my @dirs;
my @bases = ();

# modify to fit your installation of header files

push @bases, 'H:/MSDev/include' if $A{m};	# msdev includes
push @bases, 'O:/MicrosoftSDK/include' if $A{s}; # SDK includes
push @bases, 'H:/Cygwin/usr/include' if $A{c};	# Cygwin

push @bases, 'h:/msdev/include' if not @bases;

# get subdirs of dirs

foreach my $dir (@bases) {

	push @dirs, $dir;
	opendir DIR, $dir or die "Error opendir '$dir': $!";
	my @d = grep { -d "$dir/$_" and not /^\.{1,2}$/ } readdir DIR;
	closedir DIR;
	push @dirs, "$dir/$_" foreach @d;
}

# search all dirs

foreach my $dir (@dirs) {

	print "$dir:\n";
	opendir DIR, $dir or die "Error opendir '$dir': $!";
	while (my $file = readdir DIR) {

		next if $file =~ /^\.{1,2}$/ or -d "$dir/$file";

		open IN, "$dir/$file" or warn "Error opening '$dir/$file': $!";
		my $first = 0;
		while (<IN>) {
			foreach my $arg (@ARGV) {
				my $match = "(?-xism:$arg)";
				$match = "(?i-xsm:$arg)" if $A{i};
				if (/\b$match\b\s*;/ or
				  /^\s*#define\s+\b$match\b/) {
					print "\t$dir/$file:\n" if
					  ++$first == 1;
					print $_;
				}
			}
		}
		close IN;
	}
	closedir DIR;
}

__END__


--
  ,-/-  __      _  _         $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