Markdown-Pod
view release on metacpan or search on metacpan
t/mkd/2011-12-07.mkd view on Meta::CPAN
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ë ê°ë³ê² íì© ëê¹ëë¤.
본격ì ì¼ë¡ ëë 캡ì³ë¥¼ íë ¤ê³ ìê°íëë°, ì´ë¬ë©´ ì¢ ê³¤ëíê² ì£ .
BMP ëì PNG íì¼ í¬ë§·ì ì¬ì©í´ì ì©ë 문ì 를 í´ê²°íëë¡ íê² ìµëë¤.
BMP를 PNGë¡ ë³ííë ë°©ë²ì ë¤ìí©ëë¤.
CPANì [GD 모ë][cpan-gd], [Image::Magick][cpan-image-magick],
[Imager][cpan-imager]ë ë¬¼ë¡ ì´ê³ `Win32::GUI` 모ëì ë¸ë ¤ ëì¤ë
[Win32::GUI::DIBitmap][cpan-win32-gui-dbbitmap] 모ëì ì¬ì©íë ë±
ì¬ë¬ê°ì§ ë°©ë²ì´ ììµëë¤.
ë¤ë§ ê°ê°ì 모ëì 모ë ìëì°ì¦ì ììí 문ì ë¤ì´ ììµëë¤.
`GD` 모ëì ê²½ì° BMP í¬ë§·ì ì§ìíì§ ìì¼ë©°,
`Image::Magick`ë ë°ë¡ ë°ì´ë리 ë¼ì´ë¸ë¬ë¦¬ë¥¼ ì¤ì¹í í CPAN 모ëì
ì¤ì¹í´ì¼ íë¯ë¡ ì´ë³´ìì ê²½ì° ì ê·¼ì´ ì´ë µìµëë¤.
ëí `Imager`ë BMP를 ì§ìíì§ë©´ ê²°ì ì ì¼ë¡ ìëì°ì¦ìì
캡ì³í ë ìì±ëë BMP íì(ë§)ì ì§ìíì§ ììµëë¤.
ë§ì§ë§ì¼ë¡ `Win32::GUI::DIBitmap` 모ëì ê²½ì° ActivePerlì ê²½ì° ë¬¸ì ìì´
ì¬ì©ì´ ê°ë¥íë ë¸ê¸°í ì¬ì©ìì ê²½ì° ì»´íì¼ë¬ í¸í 문ì ë¡ ì¤ì¹ëì§ ìì
ì¬ì©í ìê° ììµëë¤.
ì´ ë¬¸ì 를 í´ê²°íë ê°ì¥ ê°ë¨í ë°©ë²ì BMP를 PNGë¡ ë³íí´ì£¼ë ê°ë²¼ì´ ì í¸ë¦¬í°ë¥¼
구í´ì BMP íì¼ì ìì±í ë¤ì ë°ë¡ ì¤íìì¼ ë³íìí¤ë ê²ì
ëë¤.
[PNG ë¼ì´ë¸ë¬ë¦¬ ê³µì ííì´ì§][home-png]ìë ë³íí´ë¡ì ê°ë²¼ì´
[bmp2png][home-bmp2png]를 ìê°íê³ ììµëë¤.
bmp2pngë ë¨ íëì ì¤ííì¼ë¡ 구ì±ëì´ ìì¼ë©° ìëì°ì¦ ëª
ë ¹ì¤ìì
ì¸ìë¡ BMP íì¼ì ë기면 íì¥ìë§ ë°ê¿ì PNG íì¼ì ìì±í´ì¤ëë¤.
bmp2png를 ë¤ì´ë¡ë ë°ìì ìì¶ì í¼ ë¤ìì `BMP2PNG.EXE` íì¼ì ì¤í¬ë¦½í¸ê°
ìë ê²½ë¡ì ëê±°ë ëë `PATH` íê²½ë³ìë¡ ê´ë¦¬ëê³ ìë ëë í°ë¦¬ì ëì¸ì.
ìë¡ê² ê°±ì í ì½ë ì¡°ê°ì ë¤ìê³¼ ê°ì ê²ì
ëë¤.
#!perl
$main->AddNotifyIcon(
...
-onClick => sub {
# ì¤í¬ë¦°ì·ì ì°ìµëë¤.
SendKeys( "+{PRTSCR}" );
# ì¤í¬ë¦°ì·ì ì ì¥í©ëë¤.
my $dt = DateTime->now( time_zone => 'Asia/Seoul' );
my $bitmap = Win32::Clipboard::GetBitmap;
my $filename = sprintf(
'%4d%02d%02d-%02d%02d%02d.bmp',
$dt->year, $dt->month, $dt->day,
$dt->hour, $dt->minute, $dt->second,
);
write_file($filename, { binmode => ':raw' }, $bitmap);
# BMP íìì PNGë¡ ë³íí©ëë¤.
system('BMP2PNG.EXE', $filename);
unlink($filename);
return 0;
},
...
);
*그림 2.* PNGë¡ ë³íí ìº¡ì² íë©´ [(ì본)][img-03-original]
![PNGë¡ ë³íí ìº¡ì² íë©´][img-03]
보기 ì«ì ì½ì ì°½ì ìì ì
---------------------------
ìëì°ì¦ íê²½ìì Perl ì¤í¬ë¦½í¸ë¥¼ ì¤ííë©´ 기본ì ì¼ë¡
íì ëíëë ê¹ë§ ì½ì ì°½ì ì무ëë ì¢ ë¶ë´ì¤ë½ìµëë¤.
ì´ì ì´ ì½ì ì°½ì ìì ë´
ìë¤.
[CPANì PAR::Packer 모ë][cpan-par-packer]ì ì¬ì©íë©´
ì¤í ë°ì´ë리를 ë§ëë ìì ì ìµì
ì ì´ì©í´ ì½ì ì°½ì ë³´ì´ì§ ìê² í ì ììµëë¤.
`PAR::Packer`를 ì´ì©í´ì ë°ì´ëë¦¬ë¡ ë§ë¤ì§ ìëë¼ë
ì½ì ì°½ì ìì ë ¤ë©´ [CPANì Win32::HideConsole 모ë][cpan-win32-hideconsole]ì
ì´ì©([CPANì Win32::Console 모ë][cpan-win32-console]ë íë² íì¸í´ë³´ì¸ì) í©ëë¤.
t/mkd/2011-12-07.mkd view on Meta::CPAN
$main->Hide;
# GUI ë©ì¸ 루íì ì§ì
í©ëë¤.
Win32::GUI::Dialog;
ì 리íë©°
---------
ê¸ì´ì´ ìê°ëì ì½ì¼ì
¨ìì§ ëª¨ë¥´ê² ì§ë§, ì ì ì°/ì»´í¨í°ìë ì í ê´ê³ ìë ë²í ì ê³µìê±°ë ì. (^^)
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 2.006 seconds using v1.01-cache-2.11-cpan-0d23b851a93 )