Hello! Maybe you could me help?
I have the code (read later please). What is my problem? The aim of the program is to catch keyboard events and write them into string named $_EVENT. However it works different in WindowsXP (correctly I think) and in Windows98 (wrong). It can be seen in console printouts on the both systems. In windows 98 I notice the application with this "catching" stops with errors which point to Dialog function. In Windows XP everything is allright. cheers Waldemar =============================================================================================== #!/usr/bin/perl -w use strict; use Win32::GUI qw(); my $_EVENT = ''; my $Window = new Win32::GUI::Window ( -name => "Window", -pos => [0,0], -size => [200,100], -onResize => sub { my ($self) = @_; my ($width,$height) = ($self->GetClientRect())[2..3]; $self->Pole->Resize($width+1, $height+1) if exists $self->{Pole};}, -onKeyDown => \&keydown, -onTerminate => sub { return -1 }, ); $Window->AddTextfield( -name => "Pole", -pos => [0,0], -size => [800,600], -onKeyDown => \&keydown, ); $Window->Pole->Text(""); $Window->Pole->Append("Exit = Alt+F4"); $Window->Pole->SetFocus(); $Window->Show(); Win32::GUI::Dialog(); ########################################################################## #--------------------------------------------- sub keydown { my ( $self, undef, $key ) = @_; my $hash_EVENT = Win32::GUI::GetKeyboardState; $_EVENT = what_event( $hash_EVENT ); print $_EVENT,"|\n"; return 1; } #--------------------------------------------- sub what_event { my $_EVENT = shift; my $result = ''; my $SHIFT = ''; my $CTRL = ''; my $ALT = ''; if (( $_EVENT->[160] )||( $_EVENT->[161] )) { $SHIFT = 'Shift' } if (( $_EVENT->[162] )||( $_EVENT->[163] )) { $CTRL = 'Ctrl' } if (( $_EVENT->[164] )||( $_EVENT->[165] )) { $ALT = 'Alt' } if (( $_EVENT->[16] )) { $SHIFT = 'Shift' } if (( $_EVENT->[17] )) { $CTRL = 'Ctrl' } if (( $_EVENT->[18] )) { $ALT = 'Alt' } for ( my $i = 0; $i < 256; $i++ ) { if ( $_EVENT->[$i] ) { print $i,'|'; if ( $i == 0 ) { $result .= 'Null' } elsif ( $i == 8 ) { $result = 'Backspace' } elsif ( $i == 9 ) { $result = $CTRL.$SHIFT.'Tab' } elsif ( $i == 13 ) { $result = $CTRL.$SHIFT.'Enter' } elsif ( $i == 27 ) { $result = $CTRL.$SHIFT.'Escape' } elsif ( $i == 33 ) { $result = $CTRL.$SHIFT.'PgUp' } elsif ( $i == 34 ) { $result = $CTRL.$SHIFT.'PgDn' } elsif ( $i == 36 ) { $result = $CTRL.$SHIFT.'Home' } elsif ( $i == 35 ) { $result = $CTRL.$SHIFT.'End' } elsif ( $i == 38 ) { $result = $CTRL.$SHIFT.'Up' } elsif ( $i == 37 ) { $result = $CTRL.$SHIFT.'Left' } elsif ( $i == 39 ) { $result = $CTRL.$SHIFT.'Right' } elsif ( $i == 40 ) { $result = $CTRL.$SHIFT.'Down' } elsif ( $i == 45 ) { $result = $CTRL.$SHIFT.'Insert' } elsif ( $i == 46 ) { $result = $CTRL.$SHIFT.'Delete' } elsif (( 47 < $i )&&( $i < 58 )) { $result = $CTRL.$SHIFT.chr( $i ) } elsif (( 64 < $i )&&( $i < 91 )) { my $shift = 0; $shift = 32 if (( $SHIFT eq 'Shift' )||( $CTRL eq 'Ctrl' )); $result = $CTRL.$ALT.chr( $i + 32 - $shift ) } elsif (( 111 < $i )&&( $i < 124 )) { $result = $ALT.$CTRL.$SHIFT.'F'.($i-111); } else { if (( $i != 160 )&&( $i != 161 )&&( $i != 16 )&& ( $i != 162 )&&( $i != 163 )&&( $i != 17 )&& ( $i != 164 )&&( $i != 165 )&&( $i != 18 )) { } } } } return $result; } ===============================================================================================
test_kbd.pl
Description: Perl program