Win32::API *can* be included in compiled .exe perl scripts. What packer are you using?
 -----Original Message-----
From: []On Behalf Of
Sent: 19 February 2004 11:02
Subject: [perl-win32-gui-users] New Win32 Package suggestion and sample code

Hello All,
I am suggesting we start a new package for Win32 like say Win32::Windows or Win32::General
where in this package we can add or request a specific windows functions that is not already included
in Win32 current packages. For example, I needed to get the Memory status function I know there is a module
called Sysinfo or so but is used by callng WIn32::API which can not currently included with compiled .exe perl scripts
therefore it was a must for me to build s little module for this function. However every little time I needed one other
function. Here is a code to get the memory ststus function and it is tested and working.
Any one is welcomed to start this package and set the rules for it.
TODO: of course anyone can help adding these needed by everyone:
1)- Loading Windows Help files using WinHelp function:
BOOL WinHelp(
    HWND hWndMain,
    LPCTSTR lpszHelp,
    UINT uCommand,
    DWORD dwData
WinHelp(ghWndMain, gszHELPfilename, HELP_QUIT, 0); // unload help
2)-Getting and changing the .DLL and .EXE version information, specially
these info is not updated to your compied .exe usig perlapp or perl2exe
if you see any .exe file you generated by windows explorer "property" it
will refer to indygostar website and perl.exe file only.
    WORD  wLength;
    WORD  wValueLength;
    WORD  wType;
    WCHAR szKey[];
    WORD  Padding1[];
    WORD  Padding2[];
    WORD  Children[];
typedef struct _VS_FIXEDFILEINFO {  // vsffi
    DWORD dwSignature;
    DWORD dwStrucVersion;
    DWORD dwFileVersionMS;
    DWORD dwFileVersionLS;
    DWORD dwProductVersionMS;
    DWORD dwProductVersionLS;
    DWORD dwFileFlagsMask;
    DWORD dwFileFlags;
    DWORD dwFileOS;
    DWORD dwFileType;
    DWORD dwFileSubtype;
    DWORD dwFileDateMS;
    DWORD dwFileDateLS;
// File version
            bRetCode = VerQueryValue((LPVOID)lpstrVffInfo,
                (LPVOID *)&lpVersion,

This code for 2 functions, get memory status and get system path directory
calling directly as my @Mems = &Win32::MemoryStatus::MemStatus();
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "ppport.h"
#include <windows.h>
MODULE = Win32::MemoryStatus  PACKAGE = Win32::MemoryStatus  
# GlobalMemoryStatus exists in the  kernel32.dll library
  EXTEND(SP, 8);
  LPTSTR  lpBuff;
  UINT  PathLen;
  int  BufSize;
  BufSize = 300;
  lpBuff = (LPTSTR) safemalloc(BufSize);
  PathLen = GetSystemDirectory(lpBuff, BufSize);
  EXTEND(SP, 1);
  PUSHs(sv_2mortal(newSVpv(lpBuff, PathLen)));
and this is a perl module suggestion for it, of course it can be called directly
package Win32::MemoryStatus;
#use 5.008002;
use strict;
use warnings;
require Exporter;       # to export the constants to the main:: space
require DynaLoader;     # to dynuhlode the module.
our @ISA = qw( Exporter DynaLoader );
# Items to export into callers namespace by default. Note: do not export
# names by default without a very good reason. Use EXPORT_OK instead.
# Do not simply export all your public functions/methods/constants.
# This allows declaration use Win32::MemoryStatus ':all';
# If you do not need this, moving things directly into @EXPORT or @EXPORT_OK
# will save memory.
our %EXPORT_TAGS = ( 'all' => [ qw(
) ] );
our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
our @EXPORT = qw(
our $VERSION = '0.01';
#require XSLoader;
#XSLoader::load('Win32::MemoryStatus', $VERSION);
# kernel32.dll
bootstrap Win32::MemoryStatus;
sub MemoryStatus{
 my @Mems = &Win32::MemoryStatus::MemStatus();
 my %Meminfo;
 undef %Meminfo;
 #print join "\n=",@Mems;
 if ($Mems[7] == 0) {return undef;} #The size in bytes of the MEMORYSTATUS data structure.
 $Meminfo{MemLoad} = int($Mems[0]);
 $Meminfo{TotalPhys} = $Mems[1];
 $Meminfo{AvailPhys} = $Mems[2];
 $Meminfo{TotalPage} = $Mems[3];
 $Meminfo{AvailPage} = $Mems[4];
 $Meminfo{TotalVirtual} = $Mems[5];
 $Meminfo{AvailVirtual} = $Mems[6];
 return %Meminfo;
# Preloaded methods go here.
# Below is stub documentation for your module. You'd better edit it!
=head1 NAME
Win32::MemoryStatus - Perl extension for blah blah blah
  use Win32::MemoryStatus;
  blah blah blah
Stub documentation for Win32::MemoryStatus, created by h2xs. It looks like the
author of the extension was negligent enough to leave the stub
Blah blah blah.
=head2 EXPORT
None by default.
=head1 SEE ALSO
Mention other useful documentation such as the documentation of
related modules or operating system documentation (such as man pages
in UNIX), or any relevant external documentation such as RFCs or
If you have a mailing list set up for your module, mention it here.
If you have a web site set up for your module, mention it here.
=head1 AUTHOR
A. U. Thor, E<lt>a.u.thor@a.galaxy.far.far.awayE<gt>
Copyright (C) 2004 by A. U. Thor
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.8.2 or,
at your option, any later version of Perl 5 you may have available.