Parse-Win32Registry
view release on metacpan or search on metacpan
bin/wxregview.pl view on Meta::CPAN
return unless $key->can('get_list_of_values');
my @values = $key->get_list_of_values;
$self->DeleteAllItems;
my $index = 0;
foreach my $value (@values) {
my $name = $value->get_name;
$name = "(Default)" if $name eq '';
$name =~ s/\0/[NUL]/g;
$name =~ s/\n/[LF]/g;
$name =~ s/\r/[CR]/g;
my $type = $value->get_type_as_string;
my $data = substr($value->get_data_as_string, 0, 200);
$data =~ s/\0/[NUL]/g;
$data =~ s/\n/[LF]/g;
$data =~ s/\r/[CR]/g;
$index = $self->InsertImageStringItem($index+1, $name, 0);
$self->SetItem($index, 1, $type);
$self->SetItem($index, 2, $data);
}
$self->{_key} = $key;
$self->{_values} = \@values;
}
sub GetValue {
my ($self, $index) = @_;
return $self->{_values}[$index];
}
sub Clear {
my ($self) = @_;
$self->DeleteAllItems;
$self->{_key} = undef;
$self->{_values} = undef;
}
sub GoToValue {
my ($self, $value_name) = @_;
for (my $index = 0; $index < @{$self->{_values}}; $index++) {
if ($value_name eq $self->{_values}[$index]->get_name) {
$self->EnsureVisible($index);
$self->SetItemState($index, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED);
}
}
}
package ViewFrame;
use File::Basename;
use FindBin;
use Parse::Win32Registry qw(hexdump);
use Wx qw(:everything);
use Wx::DND; # required for copying to clipboard
use Wx::Event qw(:everything);
use base qw(Wx::Frame);
use constant ID_DUMP_KEYS => Wx::NewId;
use constant ID_FIND_NEXT => Wx::NewId;
use constant ID_TIMELINE => Wx::NewId;
use constant ID_SELECT_FONT => Wx::NewId;
sub new {
my ($class, $parent) = @_;
my $self = $class->SUPER::new($parent, -1, "Registry Viewer", wxDefaultPosition, [600, 400]);
bless $self, $class;
$self->SetMinSize([600, 400]);
my $menu1 = Wx::Menu->new;
$menu1->Append(wxID_OPEN, "&Open...\tCtrl+O");
$menu1->Append(wxID_CLOSE, "&Close\tCtrl+W");
$menu1->AppendSeparator;
$menu1->Append(wxID_EXIT, "E&xit\tAlt+F4");
my $menu2 = Wx::Menu->new;
$menu2->Append(wxID_COPY, "&Copy Key Path\tCtrl+C");
my $menu3 = Wx::Menu->new;
$menu3->Append(wxID_FIND, "&Find...\tCtrl+F");
$menu3->Append(ID_FIND_NEXT, "Find &Next\tF3");
$menu3->AppendSeparator;
$menu3->Append(ID_TIMELINE, "Show &Timeline...");
my $menu4 = Wx::Menu->new;
$menu4->Append(ID_SELECT_FONT, "Select &Font...");
my $menu5 = Wx::Menu->new;
$menu5->Append(wxID_ABOUT, "&About...");
my $menubar = Wx::MenuBar->new;
$menubar->Append($menu1, "&File");
$menubar->Append($menu2, "&Edit");
$menubar->Append($menu3, "&Search");
$menubar->Append($menu4, "&View");
$menubar->Append($menu5, "&Help");
$self->SetMenuBar($menubar);
my $statusbar = Wx::StatusBar->new($self, -1);
$self->SetStatusBar($statusbar);
EVT_MENU($self, wxID_OPEN, \&OnOpenFile);
EVT_MENU($self, wxID_CLOSE, \&OnCloseFile);
EVT_MENU($self, wxID_EXIT, \&OnQuit);
EVT_MENU($self, wxID_COPY, \&OnCopy);
EVT_MENU($self, wxID_FIND, \&OnFind);
EVT_MENU($self, ID_FIND_NEXT, \&FindNext);
EVT_MENU($self, ID_TIMELINE, \&ShowTimeline);
EVT_MENU($self, wxID_ABOUT, \&OnAbout);
EVT_MENU($self, ID_SELECT_FONT, \&OnSelectFont);
( run in 1.071 second using v1.01-cache-2.11-cpan-81fc1098f69 )