Chinaunix首页 | 论坛 | 博客
  • 博客访问: 226583
  • 博文数量: 36
  • 博客积分: 1188
  • 博客等级: 军士长
  • 技术积分: 802
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-08 21:45
文章分类

全部博文(36)

文章存档

2020年(1)

2017年(2)

2015年(1)

2014年(1)

2013年(1)

2012年(3)

2011年(27)

分类: WINDOWS

2011-04-12 09:34:08

本代码:
实现了数字0..10,大小写字母a..z字符的录入,将"-"变为10,其他键输出Virtual keycode of the key 。
功能键:Esc、Backspace、enter、4个方向键、大小写切换、小键盘切换可用。
按enter键时,附加保存最后一行至txt文档。
  1. #!/usr/bin/perl
  2. use threads;
  3. use Thread::Queue;
  4. use Win32::Console;
  5. use feature ":5.10";
  6. my $In = new Win32::Console(STD_INPUT_HANDLE) || die;
  7. my $Out = new Win32::Console(STD_OUTPUT_HANDLE) || die;

  8. #多线程生产者消费者
  9. my $q = Thread::Queue->new();
  10. my $producer = threads->create( \&produce );
  11. my $consumer = threads->create( \&consume );
  12. $producer->join();
  13. $consumer->join();

  14. sub produce {
  15.     while (1) {
  16.         my @event = $In->Input();

  17.         # keyboard event type = 1 key down=1 repeat count =1
  18.         if ( ($event[0] == 1)&&($event[1] == 1)&&($event[2] == 1) ) {
  19.             my ( $virtualKey, $asciiKey ) = @event[ 3, 5 ];
  20.             given ($virtualKey) {
  21.                 when (27) { exit 0 }
  22.                 when (/20|144/) { next }
  23.                 when (32) { $Out->Write(" ") }
  24.                 when ([48,96]) { $Out->Write("0 ") }
  25.                 when (189) { $Out->Write("10 ") }
  26.                 when (8) {
  27.                     my ( $x, $y ) = $Out->Cursor();
  28.                     $Out->Cursor( $x - 2, $y );
  29.                     $Out->Write(" ")
  30.                 }
  31.                 when (13) { $Out->Write("\n"); save_chr() }
  32.                 when (37) {
  33.                     my ( $x, $y ) = $Out->Cursor();
  34.                     $Out->Cursor( $x - 1, $y )
  35.                 }
  36.                 when (39) {
  37.                     my ( $x, $y ) = $Out->Cursor();
  38.                     $Out->Cursor( $x + 1, $y )
  39.                 }
  40.                 when (38) {
  41.                     my ( $x, $y ) = $Out->Cursor();
  42.                     $Out->Cursor( $x, $y - 1 )
  43.                 }
  44.                 when (40) {
  45.                     my ( $x, $y ) = $Out->Cursor();
  46.                     $Out->Cursor( $x, $y + 1 )
  47.                 }
  48.                 when ([ 49 .. 57, 65 .. 90, 97..105 ]) { $q->enqueue( chr($asciiKey) ) }
  49.                 default { $q->enqueue($virtualKey) }

  50.             }
  51.         }
  52.     }
  53.     sleep(1);
  54. }

  55. sub consume {
  56.     while ( my $key = $q->dequeue() ) {
  57.         $Out->Write("$key ");
  58.     }
  59. }

  60. sub save_chr {
  61.     my @info = $Out->Info();
  62.     my $Rchar = $Out->ReadChar( $info[0], 0, $info[3] - 1 );
  63.     open( FH, ">>Result.txt" );
  64.     print FH $Rchar . "\n";
  65.     close(FH);
  66. }
很早以前放在QQ空间上的文件,转过来这里。
阅读(1423) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~