From: Harlan C. <key...@ya...> - 2006-11-08 22:03:53
|
All, When I run the code attached at the bottom of this email, and terminate the window (via the Done button, the red X button, or Exit()) I get the following error: C:\Perl\memory>perl -w memparse.pl (in cleanup) Can't call method "DELETE" on an undefined value at C:/Perl /site/lib/Win32/GUI.pm line 3451 during global destruction. Thoughts? Thanks, Harlan ----------------------------------------------------- #! c:\perl\bin\perl.exe #--------------------------------------------------------------------- # memparse.pl # #--------------------------------------------------------------------- use strict; use Win32; use Win32::GUI qw(WS_CHILD WS_VISIBLE BS_DEFPUSHBUTTON WS_SYSMENU WS_MINIMIZEBOX WS_THICKFRAME); #--------------------------------------------------------------------- # Define some global variables #--------------------------------------------------------------------- my $VERSION = "0\.01_20061108"; my $dumpfile = ""; my $saveprofile = ""; my $loadprofile = ""; my $menu = new Win32::GUI::Menu( "&File" => "File", " > &Open Dump File..." => "Open", " > -" => 0, " > &Load Profile..." => "Load", " > &Save Profile..." => "Save", " > -" => 0, " > E&xit" => "Exit", # " " => "", "&Tools" => "Tools", " > &Get OS" => "OS", " > -" => 0, " > View Process &Details" => "Details", " > Dump Process &Memory" => "Memory", " > Extract Process &Image" => "Image", "&Help" => "Help", " > &About" => "About", ); my $mw = Win32::GUI::Window->new( -text => "Memory Dump Parser", -name => "MW", # [ width, height] -size => [ 600, 340 ], -maxsize => [ 600, 340 ], -pos => [ 200, 200 ], -menu => $menu, ); my $lv = $mw->AddListView( -pos => [ 30, 20 ], -size => [ 520, 200 ], -pushstyle => WS_CHILD | WS_VISIBLE | 1, -fullrowselect => 1, -gridlines => 1, -showselalways => 1, -name => "ListView", ); $lv->InsertColumn( -index => 0, -text => "PPID", -width => 50); $lv->InsertColumn( -index => 1, -subitem => 1, -text => "PID", -width => 50); $lv->InsertColumn( -index => 2, -subitem => 1, -text => "Name", -width => 100); $lv->InsertColumn( -index => 3, -subitem => 1, -text => "Exited", -width => 50); $lv->InsertColumn( -index => 4, -subitem => 1, -text => "Offset", -width => 100); $lv->InsertColumn( -index => 5, -subitem => 1, -text => "Creation Date", -width => 300); my $btn = $mw->AddButton( -text => "GO", -name => "GO", -addstyle => BS_DEFPUSHBUTTON, -tabstop => 1, -left => 410, -top => 230, -width => 50, -height => 20, ); my $btn2 = $mw->AddButton( -text => "DONE", -name => "DONE", -addstyle => BS_DEFPUSHBUTTON, -tabstop => 1, -left => 490, -top => 230, -width => 50, -height => 20, ); my $status = $mw->AddStatusBar( -name => "Status", -text => "Memory Dump Parser: Ready", ); $mw->Show; Win32::GUI::Dialog(); exit(0); sub GO_Click { if ($dumpfile eq "") { $status->Text("No dumpfile has been selected."); } elsif (! -e $dumpfile) { $status->Text("The dumpfile could not be found."); } else { # No more excuses, time to work } } sub Open_Click { my $ret = Win32::GUI::GetOpenFileName( -title => "Open Dump File", -file => "\0" . " " x 256, -filter => [ "DMP Files (*.dmp)" => "*.dmp", "VMEM Files (*.vmem)" => "*.vmem", "DD Files (*.dd)" => "*.dd", "IMG Files (*.img)" => "*.img", "All files", "*.*", ], ); if ($ret) { $dumpfile = $ret; $status->Text("Dump file = ".$dumpfile); } else { $status->Text("No dump file selected."); } } sub Load_Click { my $ret = Win32::GUI::GetOpenFileName( -title => "Load Profile", -file => "\0" . " " x 256, -filter => [ "PRF Files (*.prf)" => "*.prf", "All files", "*.*", ], ); $loadprofile = $ret; $status->Text("Profile to load: $loadprofile"); } sub Save_Click { my $file = ""; my $file_spec = "*.prf\0" . " " x 256; $file = Win32::GUI::GetOpenFileName( -owner => $mw, -directory => Win32::GetCwd(), -title => "Save Profile...", -file => $file_spec, ) || ""; if ($file eq undef || $file eq "") { $status->Text("No file selected."); } else { $saveprofile = $file."\.prf"; $status->Text("Saving profile to $saveprofile..."); } } sub Exit_Click {exit(-1);} sub MW_Terminate{exit(-1);} sub DONE_Click {exit(-1);} sub Image_Click { } sub Memory_Click { } sub About_Click { my $str = "Memory Dump Parser version $VERSION\n". "by Harlan Carvey, keydet89\@yahoo\.com\n". "\n". "copyright 2006 H. Carvey\n"; my $ret = Win32::MsgBox($str,48+1,"About..."); } ------------------------------------------ Harlan Carvey, CISSP "Windows Forensics and Incident Recovery" http://www.windows-ir.com http://windowsir.blogspot.com ------------------------------------------ |
From: Kind, U. (AGIS) <uwe...@al...> - 2006-11-09 01:38:16
|
Hi Harlan, the example works for me without any warnings or errors. - WinXP SP2 (German) - ActivePerl 5.8.7 - Win32::GUI 1.05 Regards, Uwe -----Urspr=FCngliche Nachricht----- Von: per...@li... = [mailto:per...@li...] Im Auftrag = von Harlan Carvey Gesendet: Mittwoch, 8. November 2006 23:04 An: per...@li... Betreff: [perl-win32-gui-users] Win32::GUI v1.05 issue All, When I run the code attached at the bottom of this email, and terminate the window (via the Done button, the red X button, or Exit()) I get the following error: C:\Perl\memory>perl -w memparse.pl (in cleanup) Can't call method "DELETE" on an undefined value at C:/Perl /site/lib/Win32/GUI.pm line 3451 during global destruction. Thoughts? Thanks, Harlan ----------------------------------------------------- #! c:\perl\bin\perl.exe #--------------------------------------------------------------------- # memparse.pl # #--------------------------------------------------------------------- use strict; use Win32; use Win32::GUI qw(WS_CHILD WS_VISIBLE BS_DEFPUSHBUTTON WS_SYSMENU WS_MINIMIZEBOX WS_THICKFRAME); #--------------------------------------------------------------------- # Define some global variables #--------------------------------------------------------------------- my $VERSION =3D "0\.01_20061108"; my $dumpfile =3D ""; my $saveprofile =3D ""; my $loadprofile =3D ""; my $menu =3D new Win32::GUI::Menu( =20 "&File" =3D> "File", " > &Open Dump File..." =3D> "Open", " > -" =3D> 0, " > &Load Profile..." =3D> "Load", " > &Save Profile..." =3D> "Save", " > -" =3D> 0, " > E&xit" =3D> "Exit", # " " =3D> "", "&Tools" =3D> "Tools", " > &Get OS" =3D> "OS", " > -" =3D> 0, " > View Process &Details" =3D> "Details", " > Dump Process &Memory" =3D> "Memory", " > Extract Process &Image" =3D> "Image", "&Help" =3D> "Help", " > &About" =3D> "About", ); my $mw =3D Win32::GUI::Window->new( -text =3D> "Memory Dump Parser", -name =3D> "MW", # [ width, height] -size =3D> [ 600, 340 ], -maxsize =3D> [ 600, 340 ], -pos =3D> [ 200, 200 ], -menu =3D> $menu, ); =20 my $lv =3D $mw->AddListView( -pos =3D> [ 30, 20 ], -size =3D> [ 520, 200 ], -pushstyle =3D> WS_CHILD | WS_VISIBLE | 1, -fullrowselect =3D> 1, -gridlines =3D> 1, -showselalways =3D> 1, -name =3D> "ListView", ); $lv->InsertColumn( -index =3D> 0, -text =3D> "PPID", -width =3D> 50); $lv->InsertColumn( -index =3D> 1, -subitem =3D> 1, -text=20 =3D> "PID", -width =3D> 50); $lv->InsertColumn( -index =3D> 2, -subitem =3D> 1, -text =3D> "Name", -width =3D> 100); $lv->InsertColumn( -index =3D> 3, -subitem =3D> 1, -text=20 =3D> "Exited", -width =3D> 50); $lv->InsertColumn( -index =3D> 4, -subitem =3D> 1, -text =3D> "Offset", -width =3D> 100); $lv->InsertColumn( -index =3D> 5, -subitem =3D> 1, -text =3D> "Creation Date", -width =3D> 300); =20 my $btn =3D $mw->AddButton( -text =3D> "GO", -name =3D> "GO",=20 -addstyle =3D> BS_DEFPUSHBUTTON, -tabstop =3D> 1, -left =3D> 410, -top =3D> 230, -width =3D> 50, -height =3D> 20, );=20 =20 my $btn2 =3D $mw->AddButton( -text =3D> "DONE", -name =3D> "DONE", -addstyle =3D> BS_DEFPUSHBUTTON,=20 -tabstop =3D> 1, -left =3D> 490, -top =3D> 230, -width =3D> 50, -height =3D> 20, ); =20 my $status =3D $mw->AddStatusBar( =20 -name =3D> "Status", -text =3D> "Memory Dump Parser: Ready", ); =20 $mw->Show; Win32::GUI::Dialog(); exit(0); sub GO_Click { if ($dumpfile eq "") { $status->Text("No dumpfile has been selected."); } elsif (! -e $dumpfile) { $status->Text("The dumpfile could not be found."); } else { # No more excuses, time to work =09 } } sub Open_Click { my $ret =3D Win32::GUI::GetOpenFileName( -title =3D> "Open Dump File", -file =3D> "\0" . " " x 256, -filter =3D> [ "DMP Files (*.dmp)" =3D> "*.dmp",=20 "VMEM Files (*.vmem)" =3D> "*.vmem",=20 "DD Files (*.dd)" =3D> "*.dd",=20 "IMG Files (*.img)" =3D> "*.img",=20 "All files", "*.*", ], ); if ($ret) { $dumpfile =3D $ret; $status->Text("Dump file =3D ".$dumpfile); } else { $status->Text("No dump file selected."); } } sub Load_Click { my $ret =3D Win32::GUI::GetOpenFileName( -title =3D> "Load Profile", -file =3D> "\0" . " " x 256, -filter =3D> [ "PRF Files (*.prf)" =3D> "*.prf", =20 "All files", "*.*", ], ); $loadprofile =3D $ret; $status->Text("Profile to load: $loadprofile"); } sub Save_Click { my $file =3D ""; my $file_spec =3D "*.prf\0" . " " x 256; $file =3D Win32::GUI::GetOpenFileName( -owner =3D> $mw, -directory =3D> Win32::GetCwd(), -title =3D> "Save Profile...", -file =3D> $file_spec, ) || ""; if ($file eq undef || $file eq "") { =20 $status->Text("No file selected."); } else { $saveprofile =3D $file."\.prf"; $status->Text("Saving profile to $saveprofile..."); } } sub Exit_Click {exit(-1);} sub MW_Terminate{exit(-1);} sub DONE_Click {exit(-1);} sub Image_Click { =09 =09 } sub Memory_Click { =09 =09 } sub About_Click { my $str =3D "Memory Dump Parser version $VERSION\n". "by Harlan Carvey, keydet89\@yahoo\.com\n". "\n". "copyright 2006 H. Carvey\n"; my $ret =3D Win32::MsgBox($str,48+1,"About..."); } ------------------------------------------ Harlan Carvey, CISSP "Windows Forensics and Incident Recovery" http://www.windows-ir.com http://windowsir.blogspot.com ------------------------------------------ -------------------------------------------------------------------------= Using Tomcat but need to do more? Need to support web services, = security? Get stuff done quickly with pre-integrated technology to make your job = easier Download IBM WebSphere Application Server v.1.0.1 based on Apache = Geronimo http://sel.as-us.falkag.net/sel?cmd=3Dlnk&kid=3D120709&bid=3D263057&dat=3D= 121642 _______________________________________________ Perl-Win32-GUI-Users mailing list Per...@li... https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users http://perl-win32-gui.sourceforge.net/ |
From: Harlan C. <key...@ya...> - 2006-11-09 01:40:46
|
Uwe, > the example works for me without any warnings or > errors. > - WinXP SP2 (German) > - ActivePerl 5.8.7 > - Win32::GUI 1.05 Thanks. I'm using XP SP2 (english), Perl 5.8.8 build 819 from ActiveState. ------------------------------------------ Harlan Carvey, CISSP "Windows Forensics and Incident Recovery" http://www.windows-ir.com http://windowsir.blogspot.com ------------------------------------------ |