Markdown-Pod
view release on metacpan or search on metacpan
t/mkd/2011-12-07.mkd view on Meta::CPAN
Title: ìëì° íê²½ìì íë©´ ìº¡ì³ í ìë ì ì¥ ê¸°ë¥ì 구í
Package: Seoul.pm
Category: perl
Category: Seoul.pm
Author: owl0908
ì ì
-----
@owl0908 -
Perlê³¼ë ê·¸ë¥ ì´ì¸ë¦´ ê² ê°ìë³´ì´ì§ ìë, ë²íì ì ê³µí ê³ ì ì¤ë¹ì.
10ì¬ë
ì ê°ì¸ ííì´ì§ë¥¼ Perlë¡ êµ¬íí ê²ì´ ê³ê¸°ê° ëì´,
ì¬ë¼íê° ì¬ ëë§ë¤ íë¼ë ê³µë¶ë ìíê³ Perl ì½ë©ì í ê²°ê³¼,
ì´ì ë ìì ì ì ì²´ì±ì í¼ëì ê²ªê³ ìë¤(ë¬¼ë¡ ì¤ë ¥ê³¼ë ì í ê´ê³ê° ìë¤).
[ë¶ìì´ì ëë¬´êµ¬ë© ì ìì ê³µê°][blog-owl0908] ë¸ë¡ê·¸ë¥¼ ì´ìíê³ ìë¤.
webmaster _at_ dormouse.pe.kr
ììíë©°
---------
ì´ê²ì ê² ì¤í¬ë¦°ì·ì´ í¬í¨ë ê¸ì ì°ì¤ ë, ëê° ì´ë»ê² íìëì?
`Shift + PrtSc` í¤ë¥¼ ì´ì©íë©´ íì¬ íë©´ì ì½ê² í´ë¦½ë³´ëì ì ì¥í ì ììµëë¤.
ì´ë ê² í´ë¦½ë³´ëë¡ ì ì¥ë ì´ë¯¸ì§ë ì´ëìë `Ctrl-V` ë¡ ë¶ì¬ë£ê¸°ë¥¼ í ì ìì£ .
ê·¸ë¬ë, ì¤í¬ë¦°ì·ì´ íì¼ ííë¡ íìíë¤ë©´ ì´ë¨ê¹ì?
ì´ë¯¸ì§ í¸ì§ íë¡ê·¸ë¨ì ì¤íìí¨ ë¤ì, ë¶ì¬ë£ê¸°ë¥¼ í í, ì ì¥ì í´ì¼ í©ëë¤.
ìëì¥ì´ ìëë¼ ìì ìë°±ì¥ì íë©´ì ê°ë¬´ë¦¬í´ì¼ íë¤ë©´
ì¼ì¼ì´ ì´ë ê² ì ì¥íë ê²ì ë무 íë ì¼ì
ëë¤.
ì¤í¬ë¦°ì·ì ì°ì¼ë©´ ìëì¼ë¡ ììì íì¼ë¡ ì ì¥ê¹ì§ í´ì£¼ë©´ ë± ì¢ì ê² ê°ì§ ìëì?
ì, ììí´ë³´ì£ . :-)
ì¤ë¹ë¬¼
-------
ì°ì íì¬ íë©´ì ê°ë¬´ë¦¬í´ì, ê·¸ê²ì í¹ì íì¼ë¡ ì ì¥íë 기ë¥ì 구íí´ì¼ í©ëë¤.
ìëì°ì¦ë 기본ì ì¼ë¡ `Shift + PrtSc` í¤ë¥¼ ì
ë ¥íë©´ ì ì²´íë©´ì ê°ë¬´ë¦¬í´ì í´ë¦½ë³´ëì ì ì¥í©ëë¤.
ì´ ê¸°ë¥ì ì´ì©íë¤ê³ íìë ê³ ë¯¼í´ì¼í ë¶ë¶ì ë¤ìê³¼ ê°ìµëë¤.
- ì´ë¤ íì를 íìë íë©´ì ê°ë¬´ë¦¬ í ê²ì¸ì§ ê²°ì
- ê²°ì ë íìê° ì´ë£¨ì´ì¡ì ê²½ì° `Shift + PrtSc` í¤ê° ì
ë ¥ë ê²ì²ë¼ ëì
- í´ë¦½ë³´ëì ë´ì©ì ì½ì´ìì íì¼ë¡ ì ì¥
ì¸í°íì´ì¤ ëìì¸ì í´ë¹íë ë¶ë¶ì¼ë¡ ì´ë¤ ìì¼ë¡ ì»´í¨í°ìê² ëª
ë ¹ì ë´ë¦´ì§ ì í´ì¼ í©ëë¤.
ì¤í¬ë¦°ì·ì ì°ì ëë§ë¤ ì¤í¬ë¦½í¸ë¥¼ ì¤ííë ë°©ë²ì ë¶í¸í ê² ê°ìµëë¤.
ê°ë¥í ê°í¸íê² ì¬ì©í ì ìì¼ë©° ëì ëì§ìì ë°©ë²ì ìê°í´ë³´ë
ìì¤í
í¸ë ì´ì ìì´ì½ì ì주ìì¼ ëê³ ì´ ìì´ì½ì í´ë¦í ëë§ë¤
íë©´ì ê°ë¬´ë¦¬íë ê²ì´ 꽤ë ê·¸ë´ë¯í´ ë³´ì
ëë¤.
(믿기 ì´ë µê² ì§ë§, ìì¤í
í¸ë ì´ ìì´ì½ì ì´ì©íë ê²ì
꽤ë ìì´ë³´ì´ë ê²ì ë¹í´ ë무 ê°ë¨í©ëë¤. :)
íìí 모ëì ë¤ìê³¼ ê°ìµëë¤.
- [CPANì Win32::GUI 모ë][cpan-win32-gui]
- [CPANì Win32::GuiTest 모ë][cpan-win32-guitest]
- [CPANì Win32::HideConsole 모ë][cpan-win32-hideconsole]
- [CPANì Win32::Clipboard 모ë][cpan-win32-clipboard]
- [CPANì DateTime 모ë][cpan-datetime]
- [CPANì File::Slurp 모ë][cpan-file-slurp]
[ë¸ê¸°í][strawberry-perl]ì ì¬ì©íë¤ë©´ ì½ììì `cpan` ëª
ë ¹ì ì´ì©í´ì ì¤ì¹í©ëë¤.
[ë¸ê¸°í 5.14][strawberry-perl-514] ë²ì ìì íìí 모ë 모ëì´ ì ìì ì¼ë¡
ì¤ì¹ëë ê²ì íì¸íì¼ë¯ë¡ ë²ì ì íì ì°¸ê³ íì길 ë°ëëë¤.
#!bash
> cpan Win32::GUI
> cpan Win32::GuiTest
> cpan Win32::HideConsole
> cpan Win32::Clipboard
> cpan DateTime
> cpan File::Slurp
[ActiveStateì¬ì ActivePerl][activeperl]ì ì¬ì©íë¤ë©´ PPM ê´ë¦¬ì를 ì´ì©í´ì ì¤ì¹íë©´ ë©ëë¤.
ë¼ë ë§ë¤ê¸°
------------
GUI 구ì±ì ìëì°ì¦ ë¤ì´í°ë¸ UI ë¼ì´ë¸ë¬ë¦¬ì¸ `Win32::GUI` 모ëì ì¬ì©í©ëë¤.
ìëì°ì¦ì ìì¤í
í¸ë ì´ì ìì´ì½ì ì주ìí¤ë ê²ì `Win32::GUI` 모ëì´ ì ê³µíë
`AddNotifyIcon` ë©ìë를 ì¬ì©íë©´ ê°ë¨íê² êµ¬íí ì ììµëë¤.
기본ì ì¸ ë¼ë ì½ëë ë¤ìê³¼ ê°ìµëë¤.
#!perl
#!/usr/bin/env perl
use strict;
use warnings;
use Win32::GUI ();
# ì¬ì©í ìì´ì½ì ì ìí©ëë¤.
my $icon = Win32::GUI::Icon->new('icon.ico');
# 기본ì¼ë¡ ì¬ì©í ì°½ì ì ìí©ëë¤.
my $main = Win32::GUI::Window->new(
-name => 'Main',
-size => [ 1, 1 ],
);
# ìì¤í
í¸ë ì´ ìì´ì½ì ì ìí©ëë¤.
$main->AddNotifyIcon(
-name => "NI",
-icon => $icon,
-tip => "Click to Screenshot!",
-balloon => 0,
-onClick => sub {
# ì¤í¬ë¦°ì·ì ì°ë ë¶ë¶ì 구íí ìì ì
ëë¤.
return 0;
},
-onRightClick => sub {
# í¸ë ì´ì ì¢ë¹ ìì´ì½ì´ ê·¸ë¥ ë¨ììë ê²ì ë°©ì§í©ëë¤.
$main->NI->Remove;
# íë¡ê·¸ë¨ ì¢
ë£
return -1;
},
);
# ì°½ì ì¨ê¹ëë¤.
$main->Hide;
# GUI ë©ì¸ 루íì ì§ì
í©ëë¤.
Win32::GUI::Dialog;
ìì±í ì¤í¬ë¦½í¸ê° ìë ëë í°ë¦¬ì ëì¼í ìì¹ì ë§ìì ëë ìì´ì½ì 구í ë¤
`icon.ico`ë¡ ì´ë¦ì ë°ê¿ì ì ì¥í í ì¤í¬ë¦½í¸ë¥¼ ì¤ííë©´
ìì¤í
í¸ë ì´ì ìì´ì½ì´ ëíëë ê²ì ë³¼ ì ììµëë¤.
ìì´ì½ì ë§ì°ì¤ë¥¼ ê°ì ¸ê°ë©´ `Click to Screenshot!`ì´ë¼ë í´íì´ íìë ê²ì
ëë¤.
ìì´ì½ ììì ë§ì°ì¤ ì¼ìª½ ë²í¼ì ë르면 `onClick` ì´ë²¤í¸ê° ë°ìíë©°
ì¤ë¥¸ìª½ ë²í¼ì ë르면 `onRightClick` ì´ë²¤í¸ê° ë°ìí©ëë¤.
ì¤ë¥¸ìª½ ë²í¼ì ë를 ê²½ì° ì°ê²°ë í¨ì ë í¼ë°ì¤ê° `-1`ì ë°ííë¯ë¡ íë¡ê·¸ë¨ì´ ì¢
ë£ë©ëë¤.
*그림 1.* ì¤í í ìì¤í
í¸ë ì´ì ìì´ì½ì´ ì ì¬ë íë©´ [(ì본)][img-01-original]
![ì¤í í ìì¤í
í¸ë ì´ì ìì´ì½ì´ ì ì¬ë íë©´][img-01]
ì´ì ì¤í¬ë¦°ì·ì ì°ì ë¶ë¶ì 구íí´ì¼ê² ì£ .
`PrtSc` ëª
ë ¹ì [CPANì Win32::GuiTest 모ë][cpan-win32-guitest]ì `SendKeys` í¨ì를 ì´ì©íë©´ ë©ëë¤.
`SendKeys` í¨ìë 문ì ê·¸ëë¡ í¹ì í í¤ ì
ë ¥ì ì»´í¨í°ìê² ëì ¸ì£¼ë ìí ì í©ëë¤.
`onClick` ì´ë²¤í¸ ë°ìì ì¤íìí¤ë í¨ì ë í¼ë°ì¤ì ë¤ì ë´ì©ì ì¶ê°í©ëë¤.
#!perl
...
use Win32::GUI ();
use Win32::GuiTest qw(SendKeys); # ì¶ê°ë ë¶ë¶
...
$main->AddNotifyIcon(
-name => "NI",
-icon => $icon,
-tip => "Click to Screenshot!",
-balloon => 0,
-onClick => sub {
# ì¤í¬ë¦°ì·ì ì°ìµëë¤.
SendKeys( "+{PRTSCR}" ); # ì¶ê°ë ë¶ë¶
return 0;
},
...
);
`{PRTSCR}` ìì `+`ë `Shift`를 ê°ì´ ì
ë ¥íë¤ë ì미ì
ëë¤.
ì°¸ê³ ë¡ `^`ì `Ctrl`, `%`ë `Alt`를 ì미í©ëë¤.
ì¬ë¬ í¤ ì¡°í©ê³¼ ëë ì´ íìì ìµì
ì¼ë¡ ì§ì í ìë ì기 ë문ì,
`SendKeys`ì `Win32::GUI` 모ëì íì´ë¨¸ 기ë¥ì ê²°í©íë©´ ì¬ë¬ê°ì§ë¡ íì©ì´ ê°ë¥í©ëë¤.
ì를 ë¤ìë©´, í¹ì ì¨ë¼ì¸ ê²ìì ëìíë 매í¬ë¡ë ë§ë¤ ì ìê² ì£ . ;-)
í´ë¦½ë³´ë ì´ë¯¸ì§ë¥¼ íì¼ë¡ ì ì¥
------------------------------
ì´ì í´ë¦½ë³´ëë¡ ë¤ì´ê° ì´ë¯¸ì§ë¥¼ ì ì¥í´ì¼ê² ì£ ?
[CPANì Win32::Clipboard 모ë][cpan-win32-clipboard]ì ì¬ì©íë©´
ê°í¸íê² í´ë¦½ë³´ë ì´ë¯¸ì§ë¥¼ ë¶ë¬ì¬ ì ììµëë¤.
ë¶ë¬ì¤ê³ ì¶ë¤ë©´ ë¤ìì²ë¼ ë¨ ë ì¤ë§ ìì±íë©´ ë©ëë¤.
#!perl
use Win32::Clipboard;
my $bitmap = Win32::Clipboard::GetBitmap;
ì ë§ ëë´ì£¼ì§ ìëì? :-D
í´ë¦½ë³´ëì ì ì¥ë ë¹í¸ë§µì ë¶ë¬ì¤ë ê²ì´ë¯ë¡ í´ë¦½ë³´ëì ìë ê²ì´
ì´ë¯¸ì§ì¸ì§ í
ì¤í¸ì¸ì§ íì¸í íìë ìì ê² ê°ìµëë¤.
`$bitmap` ì¤ì¹¼ë¼ ë³ìì ë¹í¸ë§µ ì´ë¯¸ì§ê° ê³ ì¤ëí ì ì¥ë기 ë문ì
`.bmp` íì¼ì ì¨ì£¼ê¸°ë§ íë©´ íì¼ ì ì¥ë ëë©ëë¤.
íì¼ëª
ì ì¼ì¼ì´ ì¬ì©ììê² ë¬¼ì´ë³´ë ê²ë ë²ê±°ë¡ì´ ì¼ì´ëê¹
íì¬ ë ì§ê³¼ ìê°ì ì¬ì©í´ì ìëì¼ë¡ ì ì¥íëë¡ íê² ìµëë¤.
`onClick` ì´ë²¤í¸ì ëí í¨ì ë í¼ë°ì¤ë ì´ë ê² ë°ëëë¤.
#!perl
...
use Win32::GUI ();
use Win32::GuiTest qw(SendKeys);
use Win32::Clipboard;
use DateTime;
use File::Slurp
...
$main->AddNotifyIcon(
-name => "NI",
-icon => $icon,
-tip => "Click to Screenshot!",
-balloon => 0,
-onClick => sub {
# ì¤í¬ë¦°ì·ì ì°ìµëë¤.
SendKeys( "+{PRTSCR}" );
# ì¤í¬ë¦°ì·ì ì ì¥í©ëë¤.
my $dt = DateTime->now( time_zone => 'Asia/Seoul' );
my $filename = sprintf('%s %s.bmp', $dt->ymd, $dt->hms);
my $bitmap = Win32::Clipboard::GetBitmap;
write_file( $filename, {binmode => ':raw'}, $bitmap ) ;
return 0;
},
...
);
*그림 2.* íë©´ ê°ë¬´ë¦¬ ê²°ê³¼ [(ì본)][img-02-original]
![íë©´ ê°ë¬´ë¦¬ ê²°ê³¼][img-02]
ì©ë ì¤ì´ê¸°
------------
ì¼ë¨ íë¡ê·¸ë¨ ìì±ì ëë¬ìµëë¤.
ë¤ë§ ì¤íí´ë³´ë©´ ê°ë¬´ë¦¬ëë íì¼ì í¬ê¸°ê° ë¬´ì² í¬ë¤ë ê²ì ì ì ììµëë¤.
ë¹í¸ë§µ íìì ìì¶ì íì§ ì기 ë문ì ì¼ë°ì ì¸ HD í´ìëì íì¼ì ì½ 3MB,
ê·¸ë¦¬ê³ ê·¸ ì´ìì í´ìëì íë©´ì ì¬ì©íë¤ë©´ 5MBë ê°ë³ê² íì© ëê¹ëë¤.
t/mkd/2011-12-07.mkd view on Meta::CPAN
ì 리íë©°
---------
ê¸ì´ì´ ìê°ëì ì½ì¼ì
¨ìì§ ëª¨ë¥´ê² ì§ë§, ì ì ì°/ì»´í¨í°ìë ì í ê´ê³ ìë ë²í ì ê³µìê±°ë ì. (^^)
MS ìëì° íê²½ìì ì½ê°ì Perl ì§ìë§ ìë¤ë©´ Perlì ì´ì©í´ ìì ì´ íìí 기ë¥ì
ìì ì´ ì§ì ì¤ê³í´ì ì¬ì©í ì ìë¤ë ì¬ì¤ì ì ë§ ë§¤ë ¥ì ì
ëë¤.
모ëì ì¬ì©í ê²ì ì¨ì í ì ì§ìì´ ìëë¼êµ¬ì?
ë ê·¸ë¼ ì´ë¤ê°ì? ì´ì¨ë ë§ë¤ê³ ì¶ìë ê²ì ë§ë¤ì´ëììì!
ì´ë¯¸ ë¤ë¥¸ ì¬ëë¤ì´ ë§ë¤ì´ ëì ìë§ì CPAN 모ëë¤ì íì©íë©´,
í¼ì íì¼ë¡ë ìë¶ì¡±ì´ë¼ê³ ìê°íë ë¶ë¶ì í´ë¼ ì ìê²,
ê°ë¥í ë¶ë¶ì ëì± ë¹ ë¥¸ ìê°ë´ì 구íí ì ìê² ëìì¤ëë¤.
ì´ë¤ê°ì? ë§¤ë ¥ì ì´ì§ ìëì?
ì´ë¯¸ Perlì íë¥íê² ì¬ì©íê³ ê³ì ë§ì ë¶ë¤ì´ ìì§ë§,
ì ì²ë¼ ì ì° ì ê³µì´ ìë, ì¼ë°ì ì§ìë§ì ê°ì¶ *ì ì¬ì Perl ì´ì©ì*ê» ì´ ê¸ì ë°ì¹©ëë¤.
íì´í
! ;-)
ìê°í´ë³¼ 거리
--------------
ì§ê¸ íë¡ê·¸ë¨ì íì¼ì ì ì¥íë ê²½ë¡ê° ì í´ì ¸ììµëë¤.
ì¤ííë ìì ì ì¸ìë¡ ë긴ë¤ëê°, ëë ì¤ì íì¼ì ì°¸ê³ íëë¡ ìì í ìë ìê² ì§ì.
ëí í¸ë ì´ ìì´ì½ìì ì¤ë¥¸ìª½ ë²í¼ì ëë ìë ë°ë¡ ì¢
ë£ê° ëë ê²ì´ ìëë¼
íì
ë©ë´ë¥¼ ëì´ í ì¤ì ì ë³ê²½íê±°ë ì¢
ë£íë ìµì
ì ì¶ê°í ìë ìì ê²ì
ëë¤.
ë머ì§ë ì¬ë¬ë¶ì ììë ¥ì ë§¡ê¸°ê² ìµëë¤.
ë§ì§ë§ì¼ë¡ ì´ íë¡ê·¸ë¨ì ë¨ì¶í¤ 기ë¥ì ì¶ê°íë¤ë©´ ì´ë¨ê¹ì?
ì´ë¥¼í
ë©´ ìëì° íê²½ ì´ëìë CTRL-F12 를 í´ë¦íë©´ ì´ ê¸°ë¥ì´ ëìíëë¡ íë ê²ì
ëë¤.
ìëì°ì© Perlì [Win32::API][cpan-win32-api] 모ëì ì´ì©í´ ìëì° ê¸°ë³¸ API를 ì§ì ì¬ì©í ì ì기 ë문ì,
`user32.dll`ì `RegisterHotKey/UnregisterHotKey`를 ìí¬í¸í´ ì ë¹í í¤ ì¡°í©ì ë±ë¡íê³
í¤ë³´ë ì
ë ¥ì ì ìì¼ë¡ 모ëí°ë§(íí¹)íë©´, ë¨ì¶í¤ë¥¼ ì´ì©í ì¤í¬ë¦°ì·ì ì¡°ìì´ ê°ë¥í©ëë¤.
ë¨ì¶í¤ ë°©ìì ëì
í ê²½ì° ì§ê¸ê¹ì§ ì¬ì©í ì ì²´ íë©´ ì¤í¬ë¦°ìº¡ì³ ì¸ìë,
`Alt + PrtSc`를 ì¬ì©í´ íì¬ íì±í ë ì°½ë§ì ê°ë¬´ë¦¬ í ì ììµëë¤.
ì§ê¸ì²ë¼ ìì´ì½ì í´ë¦íë ë°©ìì´ë¼ë©´ ìì´ì½ì í´ë¦íë ìê° íì±ì°½ì´
ìì
íìì¤ë¡ ë°ë기 ë문ì, íì ìì
íìì¤ë§ ê°ë¬´ë¦¬ ë ê²ì
ëë¤.
기ì¬ìì ì¬ì©í 모ë íë©´ì ë¨ì¶í¤ê¹ì§ 구íí ìì í ì¤í¬ë¦½í¸ë¥¼ ì´ì©í´ì ê°ë¬´ë¦¬í ê²ì
ëë¤.
`PAR::Packer`ë¡ ë¹ëí [ì¤í ë°ì´ë리ì ì ì²´ ìì¤][capture-source]ë
ê¼ ë¤ì´ë¡ë ë°ìì íì¸í´ë³´ì¸ì. ;-)
[img-01]: 2011-12-07-1.png width=700
[img-02]: 2011-12-07-2.png width=700
[img-03]: 2011-12-07-3.png width=700
[img-01-original]: 2011-12-07-1.png
[img-02-original]: 2011-12-07-2.png
[img-03-original]: 2011-12-07-3.png
[activeperl]: http://www.activestate.com/activeperl
[blog-owl0908]: http://www.dormouse.pe.kr
[capture-source]: http://www.nightowl.pe.kr/software/prtscrsave
[cpan-gd]: https://metacpan.org/module/GD
[cpan-image-magick]: https://metacpan.org/module/Image::Magick
[cpan-imager]: https://metacpan.org/module/Imager
[cpan-par-packer]: https://metacpan.org/module/Par::Packer
[cpan-win32-api]: https://metacpan.org/module/Win32::API
[cpan-win32-clipboard]: https://metacpan.org/module/Win32::Clipboard
[cpan-win32-console]: https://metacpan.org/module/Win32::Console
[cpan-datetime]: https://metacpan.org/module/DateTime
[cpan-file-slurp]: https://metacpan.org/module/File::Slurp
[cpan-win32-gui-dibitmap]: https://metacpan.org/module/Win32::GUI::DIBitmap
[cpan-win32-gui]: https://metacpan.org/module/Win32::GUI
[cpan-win32-guitest]: https://metacpan.org/module/Win32::GuiTest
[cpan-win32-hideconsole]: https://metacpan.org/module/Win32::HideConsole
[home-bmp2png]: http://cetus.sakura.ne.jp/softlab/b2p-home/
[home-png]: http://www.libpng.org/pub/png/pngcode.html
[strawberry-perl-514]: http://strawberryperl.com/beta/index.html
[strawberry-perl]: http://strawberryperl.com
( run in 1.643 second using v1.01-cache-2.11-cpan-84e82930d8c )