Markdown-Pod
view release on metacpan or search on metacpan
t/2011-12-07.mkd.t view on Meta::CPAN
#!perl
use Win32::Clipboard;
my $bitmap = Win32::Clipboard::GetBitmap;
ì ë§ ëë´ì£¼ì§ ìëì? :-D
í´ë¦½ë³´ëì ì ì¥ë ë¹í¸ë§µì ë¶ë¬ì¤ë ê²ì´ë¯ë¡ í´ë¦½ë³´ëì ìë ê²ì´
ì´ë¯¸ì§ì¸ì§ í
ì¤í¸ì¸ì§ íì¸í íìë ìì ê² ê°ìµëë¤.
C<$bitmap> ì¤ì¹¼ë¼ ë³ìì ë¹í¸ë§µ ì´ë¯¸ì§ê° ê³ ì¤ëí ì ì¥ë기 ë문ì
C<.bmp> íì¼ì ì¨ì£¼ê¸°ë§ íë©´ íì¼ ì ì¥ë ëë©ëë¤.
íì¼ëª
ì ì¼ì¼ì´ ì¬ì©ììê² ë¬¼ì´ë³´ë ê²ë ë²ê±°ë¡ì´ ì¼ì´ëê¹
íì¬ ë ì§ê³¼ ìê°ì ì¬ì©í´ì ìëì¼ë¡ ì ì¥íëë¡ íê² ìµëë¤.
C<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;
},
...
);
I<그림 2.> íë©´ ê°ë¬´ë¦¬ ê²°ê³¼ L<(ì본)|2011-12-07-2.png>
=for html <img src="2011-12-07-2.png" alt="íë©´ ê°ë¬´ë¦¬ ê²°ê³¼" width="700" />
=head2 ì©ë ì¤ì´ê¸°
ì¼ë¨ íë¡ê·¸ë¨ ìì±ì ëë¬ìµëë¤.
ë¤ë§ ì¤íí´ë³´ë©´ ê°ë¬´ë¦¬ëë íì¼ì í¬ê¸°ê° ë¬´ì² í¬ë¤ë ê²ì ì ì ììµëë¤.
ë¹í¸ë§µ íìì ìì¶ì íì§ ì기 ë문ì ì¼ë°ì ì¸ HD í´ìëì íì¼ì ì½ 3MB,
ê·¸ë¦¬ê³ ê·¸ ì´ìì í´ìëì íë©´ì ì¬ì©íë¤ë©´ 5MBë ê°ë³ê² íì© ëê¹ëë¤.
본격ì ì¼ë¡ ëë 캡ì³ë¥¼ íë ¤ê³ ìê°íëë°, ì´ë¬ë©´ ì¢ ê³¤ëíê² ì£ .
BMP ëì PNG íì¼ í¬ë§·ì ì¬ì©í´ì ì©ë 문ì 를 í´ê²°íëë¡ íê² ìµëë¤.
BMP를 PNGë¡ ë³ííë ë°©ë²ì ë¤ìí©ëë¤.
CPANì L<GD 모ë|https://metacpan.org/module/GD>, L<Image::Magick|https://metacpan.org/module/Image::Magick>,
L<Imager|https://metacpan.org/module/Imager>ë ë¬¼ë¡ ì´ê³ C<Win32::GUI> 모ëì ë¸ë ¤ ëì¤ë
[Win32::GUI::DIBitmap][cpan-win32-gui-dbbitmap] 모ëì ì¬ì©íë ë±
ì¬ë¬ê°ì§ ë°©ë²ì´ ììµëë¤.
ë¤ë§ ê°ê°ì 모ëì 모ë ìëì°ì¦ì ììí 문ì ë¤ì´ ììµëë¤.
C<GD> 모ëì ê²½ì° BMP í¬ë§·ì ì§ìíì§ ìì¼ë©°,
C<Image::Magick>ë ë°ë¡ ë°ì´ë리 ë¼ì´ë¸ë¬ë¦¬ë¥¼ ì¤ì¹í í CPAN 모ëì
ì¤ì¹í´ì¼ íë¯ë¡ ì´ë³´ìì ê²½ì° ì ê·¼ì´ ì´ë µìµëë¤.
ëí C<Imager>ë BMP를 ì§ìíì§ë©´ ê²°ì ì ì¼ë¡ ìëì°ì¦ìì
캡ì³í ë ìì±ëë BMP íì(ë§)ì ì§ìíì§ ììµëë¤.
ë§ì§ë§ì¼ë¡ C<Win32::GUI::DIBitmap> 모ëì ê²½ì° ActivePerlì ê²½ì° ë¬¸ì ìì´
ì¬ì©ì´ ê°ë¥íë ë¸ê¸°í ì¬ì©ìì ê²½ì° ì»´íì¼ë¬ í¸í 문ì ë¡ ì¤ì¹ëì§ ìì
ì¬ì©í ìê° ììµëë¤.
ì´ ë¬¸ì 를 í´ê²°íë ê°ì¥ ê°ë¨í ë°©ë²ì BMP를 PNGë¡ ë³íí´ì£¼ë ê°ë²¼ì´ ì í¸ë¦¬í°ë¥¼
구í´ì BMP íì¼ì ìì±í ë¤ì ë°ë¡ ì¤íìì¼ ë³íìí¤ë ê²ì
ëë¤.
L<PNG ë¼ì´ë¸ë¬ë¦¬ ê³µì ííì´ì§|http://www.libpng.org/pub/png/pngcode.html>ìë ë³íí´ë¡ì ê°ë²¼ì´
L<bmp2png|http://cetus.sakura.ne.jp/softlab/b2p-home/>를 ìê°íê³ ììµëë¤.
bmp2pngë ë¨ íëì ì¤ííì¼ë¡ 구ì±ëì´ ìì¼ë©° ìëì°ì¦ ëª
ë ¹ì¤ìì
ì¸ìë¡ BMP íì¼ì ë기면 íì¥ìë§ ë°ê¿ì PNG íì¼ì ìì±í´ì¤ëë¤.
bmp2png를 ë¤ì´ë¡ë ë°ìì ìì¶ì í¼ ë¤ìì C<BMP2PNG.EXE> íì¼ì ì¤í¬ë¦½í¸ê°
ìë ê²½ë¡ì ëê±°ë ëë C<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;
},
...
);
I<그림 2.> PNGë¡ ë³íí ìº¡ì² íë©´ L<(ì본)|2011-12-07-3.png>
=for html <img src="2011-12-07-3.png" alt="PNGë¡ ë³íí ìº¡ì² íë©´" width="700" />
=head2 보기 ì«ì ì½ì ì°½ì ìì ì
ìëì°ì¦ íê²½ìì Perl ì¤í¬ë¦½í¸ë¥¼ ì¤ííë©´ 기본ì ì¼ë¡
íì ëíëë ê¹ë§ ì½ì ì°½ì ì무ëë ì¢ ë¶ë´ì¤ë½ìµëë¤.
ì´ì ì´ ì½ì ì°½ì ìì ë´
ìë¤.
L<CPANì PAR::Packer 모ë|https://metacpan.org/module/Par::Packer>ì ì¬ì©íë©´
ì¤í ë°ì´ë리를 ë§ëë ìì ì ìµì
ì ì´ì©í´ ì½ì ì°½ì ë³´ì´ì§ ìê² í ì ììµëë¤.
C<PAR::Packer>를 ì´ì©í´ì ë°ì´ëë¦¬ë¡ ë§ë¤ì§ ìëë¼ë
ì½ì ì°½ì ìì ë ¤ë©´ L<CPANì Win32::HideConsole 모ë|https://metacpan.org/module/Win32::HideConsole>ì
ì´ì©(L<CPANì Win32::Console 모ë|https://metacpan.org/module/Win32::Console>ë íë² íì¸í´ë³´ì¸ì) í©ëë¤.
ì¤í¬ë¦½í¸ìë ë¤ì ì½ë를 ì¶ê°í©ëë¤.
( run in 2.296 seconds using v1.01-cache-2.11-cpan-99c4e6809bf )