Eh?
Win32::API *can* be included in compiled .exe perl scripts. What packer are you
using?
Steve
-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Behalf Of [EMAIL PROTECTED]
Sent: 19 February 2004 11:02
To: [email protected]
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.
VS_VERSIONINFO {
WORD wLength;
WORD wValueLength;
WORD wType;
WCHAR szKey[];
WORD Padding1[];
VS_FIXEDFILEINFO Value;
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;
} VS_FIXEDFILEINFO;
// File version
bRetCode = VerQueryValue((LPVOID)lpstrVffInfo,
TEXT("\\StringFileInfo\\040904E4\\FileVersion"),
(LPVOID *)&lpVersion,
puVersionLen);
#================================================================
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
PROTOTYPES: DISABLE
#================================================
# GlobalMemoryStatus exists in the kernel32.dll library
void
MemStatus()
PREINIT:
MEMORYSTATUS * mem;
PPCODE:
GlobalMemoryStatus(mem);
EXTEND(SP, 8);
PUSHs(sv_2mortal(newSVuv(mem->dwMemoryLoad)));
PUSHs(sv_2mortal(newSVuv(mem->dwTotalPhys)));
PUSHs(sv_2mortal(newSVuv(mem->dwAvailPhys)));
PUSHs(sv_2mortal(newSVuv(mem->dwTotalPageFile)));
PUSHs(sv_2mortal(newSVuv(mem->dwAvailPageFile)));
PUSHs(sv_2mortal(newSVuv(mem->dwTotalVirtual)));
PUSHs(sv_2mortal(newSVuv(mem->dwAvailVirtual)));
PUSHs(sv_2mortal(newSVuv(mem->dwLength)));
XSRETURN(8);
void
WinSystemDirectory()
PREINIT:
LPTSTR lpBuff;
UINT PathLen;
int BufSize;
PPCODE:
BufSize = 300;
lpBuff = (LPTSTR) safemalloc(BufSize);
PathLen = GetSystemDirectory(lpBuff, BufSize);
EXTEND(SP, 1);
PUSHs(sv_2mortal(newSVpv(lpBuff, PathLen)));
safefree(lpBuff);
XSRETURN(1);
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.
1;
__END__
# Below is stub documentation for your module. You'd better edit it!
=head1 NAME
Win32::MemoryStatus - Perl extension for blah blah blah
=head1 SYNOPSIS
use Win32::MemoryStatus;
blah blah blah
=head1 DESCRIPTION
Stub documentation for Win32::MemoryStatus, created by h2xs. It looks like the
author of the extension was negligent enough to leave the stub
unedited.
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
standards.
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>[EMAIL PROTECTED]<gt>
=head1 COPYRIGHT AND LICENSE
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.
=cut
Ramy