[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[原创代码] [Perl]循环捕获windows [prt sc] 键的截图

本帖最后由 523066680 于 2015-3-19 12:02 编辑

刚刚试了一下,没有做文件名冲突判断(Snap1.bmp Snap2.bmp Snap3.bmp....),再执行一次的时候会将上次的截图覆盖。
有闲情了再改吧。
  1. =info
  2.     Via 523066680 @ bathome.net
  3.     2015-03
  4. =cut
  5. use Win32::Clipboard;
  6. use Term::ReadKey;
  7. use Time::HiRes qw/sleep/;
  8. use IO::Handle;
  9. STDOUT->autoflush(1);
  10. my $Fold = "D:\\Snap";
  11. my $i = 0;
  12. my $clip = Win32::Clipboard->new();
  13. $clip->Empty();
  14. mkdir $Fold unless (-e $defult);
  15. my $timesec = &timesec();
  16. while (1) {
  17.     $image = $clip->GetBitmap();
  18.     if ($image) {
  19.         $i++;
  20.         print "Catch one!\n";
  21.         &savepic("$timesec $i.bmp", \$image);
  22.         $clip->Empty();
  23.     }
  24.     &keyout();
  25.     sleep 0.2;
  26.     print ".";
  27. }
  28. sub savepic {
  29.     my ($name, $rdata) = (shift, shift);
  30.     open    BITMAP, ">$Fold\\$name";
  31.     binmode BITMAP;
  32.     print   BITMAP ${$rdata};
  33.     close   BITMAP;
  34. }
  35. sub keyout {
  36.     my $key;
  37.     $key = ReadKey(-1);
  38.     if ( ord($key) == 27 ) {
  39.         print "Quit";
  40.         sleep 1.0;
  41.         exit;
  42.     }
  43. }
  44. sub timesec {
  45.     my ($sec,$min,$hour,$day,$mon,$year) = localtime();
  46.     return
  47.         sprintf (
  48.             "%02d-%02d %02d.%02d.%02d",
  49.             $mon, $day, $hour, $min, $sec
  50.         );
  51. }
复制代码
按Prt Screen键截图,自动保存到D盘snap文件夹。
按Esc 键退出。

执行输出类似这样:
──────────┐
.......Catch one!   │
....Catch one!      │
..........Catch one!│
....Catch one!      │
.......Quit         │
──────────┘


命名格式为  月-日 时.分.秒 序号.bmp

万一不是截图的呢?

TOP

人家只是在 qq 里复制了一张图,就被你个禽兽拦截了
1

评分人数

TOP

返回列表