<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>skyilover's 낙서장 with soojung</title>
<link>http://skyilover.ruree.net/soojung</link>
<description>skyilover's 낙서장입니다. 이 사이트는 Firefox2.x를 권장합니다.</description>
<copyright></copyright>
<pubDate>Wed, 10 Mar 2010 14:04:51 +0900</pubDate>
<generator>soojung 0.4.9</generator>

<item>
<title>공지</title>
<link>http://skyilover.ruree.net/soojung/entry.php?blogid=269</link>
<pubDate>Mon, 10 Feb 2025 17:17:49 +0900</pubDate>
<category>잡담</category>
<description>나름대로 공지입니다~&lt;br /&gt;
&lt;br /&gt;
제 블로그에 리플을 쓸려면 &lt;b&gt;반드시 자바스크립트가 가능한 브라우져&lt;/b&gt;로 해야한답니다~&lt;br /&gt;
&lt;br /&gt;
안그러면 글이 안써지는 사태가... [응?]&lt;br /&gt;
&lt;br /&gt;
스팸방지를 위하여 이러저러 방법을 사용하고 있습니다.&lt;br /&gt;
&lt;br /&gt;
좋은 의견 있으면 리플 달아주세요~</description>
</item>
<item>
<title>용어를 기억하자</title>
<link>http://skyilover.ruree.net/soojung/entry.php?blogid=341</link>
<pubDate>Thu, 22 Oct 2015 11:46:46 +0900</pubDate>
<category>Programming</category>
<description>그때 그때 배웠거나 들은 용어들 정리..&lt;br /&gt;
&lt;br /&gt;
&lt;a onclick=&quot;this.innerHTML=(this.nextSibling.style.display=='none')?'용어 닫기':'용어 전체 보기';this.nextSibling.style.display=(this.nextSibling.style.display=='none')?'block':'none';&quot; href=&quot;#none&quot;&gt;용어 전체 보기&lt;/a&gt;&lt;div style=&quot;DISPLAY: none&quot;&gt;&lt;br /&gt;
&lt;br /&gt;
SAX : Simple API for XML&lt;br /&gt;
DOM : Document Object Model&lt;br /&gt;
FLEX : Fast LEX&lt;br /&gt;
LEX : Lexical Analyzer(lexer)&lt;br /&gt;
YACC : Yet Another Compiler Compiler&lt;br /&gt;
NSIS : Nullsoft Scriptable Install System [NSIS] &lt;br /&gt;
JSON : JavaScript Object Notation&lt;br /&gt;
YUI : Yahoo! UI library&lt;br /&gt;
ISA : Instructure Set Architecture&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</description>
</item>
<item>
<title>vcredist 몰래 설치</title>
<link>http://skyilover.ruree.net/soojung/entry.php?blogid=361</link>
<pubDate>Fri, 05 Mar 2010 11:34:19 +0900</pubDate>
<category>Tip</category>
<description>http://secuprint.tistory.com/entry/vcredist-몰래설치&lt;br /&gt;
&lt;br /&gt;
게임 인스톨러 만들 때 &lt;br /&gt;
&lt;br /&gt;
vcredist와 phyx를 몰래설치 하면 되려나..</description>
</item>
<item>
<title>차세대 매크로?</title>
<link>http://skyilover.ruree.net/soojung/entry.php?blogid=360</link>
<pubDate>Thu, 18 Feb 2010 10:06:59 +0900</pubDate>
<category>잡담</category>
<description>http://groups.csail.mit.edu/uid/sikuli/&lt;br /&gt;
http://sikuli.org&lt;br /&gt;
&lt;br /&gt;
보통 매크로 프로그램들은 마우스좌표와 키보드의 조작만 컨트롤하는게 일반적이였다.&lt;br /&gt;
&lt;br /&gt;
그런데 이 어플은 마우스 좌표에 해당하는 부분을 화면상의 이미지를 찾아 조작을 해주는 것이다.&lt;br /&gt;
&lt;br /&gt;
매력적인건 자바로 개발되어 있기 때문에 플렛폼에서나 다 된다는 것.&lt;br /&gt;
&lt;br /&gt;
자세한건 튜토리얼로...&lt;br /&gt;
&lt;br /&gt;
&lt;object width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/FxDOlhysFcM&amp;rel=0&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/FxDOlhysFcM&amp;rel=0&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; allowScriptAccess=&quot;always&quot; width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;/embed&gt;&lt;/object&gt;</description>
</item>
<item>
<title>[C#] Drag &amp; Drop</title>
<link>http://skyilover.ruree.net/soojung/entry.php?blogid=359</link>
<pubDate>Fri, 12 Feb 2010 11:42:07 +0900</pubDate>
<category>Programming</category>
<description>계속 쓰다보니 개념이 슬슬 잡힌다..&lt;br /&gt;
&lt;br /&gt;
주요 사용 이벤트&lt;br /&gt;
&lt;br /&gt;
[Source]&lt;br /&gt;
ItemDrag : 최초 아이템을 끌때 DoDragDrop함수 실행하는 위치&lt;br /&gt;
GiveFeedback : Effect에따라 커스터마이징하게 커서를 바꾸고싶을 때 구현&lt;br /&gt;
QueryContinueDrag : 누른 키에 따라 특별한 액션(드래그취소,드랍)을 하고 싶을 때&lt;br /&gt;
&lt;br /&gt;
[Target]&lt;br /&gt;
DragOver(or DragEnter) : 현재 어떤 컨트롤에 있느냐에 따라 Effect를 수정할 때 사용&lt;br /&gt;
DragDrop : 아이템을 놓았을 때 사용</description>
</item>
<item>
<title>PInvoke Interop Assistant</title>
<link>http://skyilover.ruree.net/soojung/entry.php?blogid=358</link>
<pubDate>Tue, 09 Feb 2010 15:31:47 +0900</pubDate>
<category>Programming</category>
<description>PInvoke Interop Assistant :&lt;br /&gt;
&lt;br /&gt;
http://nekolatte.tistory.com/90&lt;br /&gt;
 =&gt; http://www.codeplex.com/clrinterop/Release/ProjectReleases.aspx?ReleaseId=14120</description>
</item>
<item>
<title>Invoke 관련</title>
<link>http://skyilover.ruree.net/soojung/entry.php?blogid=357</link>
<pubDate>Wed, 03 Feb 2010 15:12:26 +0900</pubDate>
<category>Programming</category>
<description>Invoke 관련&lt;br /&gt;
&lt;br /&gt;
보통 delegate를 선언해서 Invoke를 걸어준다.&lt;br /&gt;
&lt;br /&gt;
private delegate int InvokeControlTreeNodeAddWithNode(TreeNode node);&lt;br /&gt;
&lt;br /&gt;
....&lt;br /&gt;
Invoke(new InvokeControlTreeNodeAddWithNode(treeView1.Nodes.Add), tnb);&lt;br /&gt;
&lt;br /&gt;
--------------------&lt;br /&gt;
&lt;br /&gt;
이거슨 다른 방법.... c#에서도 람다를 지원하는줄은 몰랐다.. &lt;br /&gt;
&lt;br /&gt;
Invoke(new MethodInvoker(delegate { panel1.Enabled = true; }));&lt;br /&gt;
&lt;br /&gt;
2010에서는 delegate예약어가 없어도 되는거같긴하던데</description>
</item>
<item>
<title>[C#] 스크롤 컨트롤 캡쳐프로그램</title>
<link>http://skyilover.ruree.net/soojung/entry.php?blogid=356</link>
<pubDate>Wed, 23 Dec 2009 23:05:36 +0900</pubDate>
<category>Works</category>
<description>오픈캡쳐의 스크롤 캡쳐기능이 안된다고해서 캡쳐 프로그램을 간단히 만들어 봤다.&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;http://skyilover.ruree.net/soojung/contents/upload/scrollcapture1.PNG&quot;&gt;&lt;br /&gt;
&lt;br /&gt;
기능은 간단하다.&lt;br /&gt;
&lt;br /&gt;
캡쳐위치찾기 버튼을 누르면 오픈캡쳐처럼 컨트롤에 가져다 델때마다 테두리가 그려진다.&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;http://skyilover.ruree.net/soojung/contents/upload/scrollcapture2.PNG&quot;&gt;&lt;br /&gt;
(TOP PAID APPS페이지를 출력하는 컴포넌트를 선택한 상태이다)&lt;br /&gt;
&lt;br /&gt;
컨트롤을 이곳저곳 옮겨다니면 캡쳐 컨트롤 정보에 마우스 커서 아래에 있는 컨트롤의 클래스 아이디를 출력한다.&lt;br /&gt;
&lt;br /&gt;
캡쳐할 컨트롤이 선택됐으면 클릭을한다.&lt;br /&gt;
&lt;br /&gt;
그리고서 캡쳐버튼을 누르면 스르륵 스크롤되면서 캡쳐하기 시작한다.&lt;br /&gt;
&lt;br /&gt;
(이때 캡쳐할 화면이 가려져 있으면 안된다)&lt;br /&gt;
&lt;br /&gt;
캡쳐가 끝나면 프로그레스바가 올라가기시작한다.&lt;br /&gt;
&lt;br /&gt;
캡쳐한 이미지들을 합치는 과정을 하는것이다.&lt;br /&gt;
&lt;br /&gt;
그리고서 끝나면 폼안에 PictureBox에 캡쳐한 이미지가 보인다.&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;http://skyilover.ruree.net/soojung/contents/upload/scrollcapture3.PNG&quot;&gt;&lt;br /&gt;
&lt;br /&gt;
저장...버튼을 누르면 어디 위치에 저장할지 뜨게된다.&lt;br /&gt;
&lt;br /&gt;
파일이름을 지정하고 확인을 누르면 저장이된다.&lt;br /&gt;
&lt;br /&gt;
저장할때 파일이름에 따라 포멧이 결정된다.&lt;br /&gt;
&lt;br /&gt;
jpg,bmp,png등 포멧들을 지원한다.&lt;br /&gt;
&lt;br /&gt;
---------------------&lt;br /&gt;
&lt;br /&gt;
기능구현을 위해 참고한 API들을 보면&lt;br /&gt;
&lt;br /&gt;
WindowFromPoint&lt;br /&gt;
GetCursorPos&lt;br /&gt;
GetClassName&lt;br /&gt;
GetWindowRect&lt;br /&gt;
SendMessage&lt;br /&gt;
&lt;br /&gt;
그리고 핵심적인 객체와 매소드들&lt;br /&gt;
&lt;br /&gt;
Graphics.CopyFromScreen // 스크린샷&lt;br /&gt;
ControlPaint.DrawReversibleFrame // 선택된 컨트롤에 프레임 그리기&lt;br /&gt;
Image.Save // 이미지 저장&lt;br /&gt;
&lt;br /&gt;
시나리오는 다음과 같다.&lt;br /&gt;
GetCursorPos로 현재 마우스 위치를 알아내고&lt;br /&gt;
WindowFromPoint로 마우스아래에 있는 객체를 가져와서&lt;br /&gt;
GetClassName으로 객체 이름을 셋팅해주고&lt;br /&gt;
GetWindowRect로 컨트롤 위치를 알아낸다음에&lt;br /&gt;
ControlPaint.DrawReversibleFrame로 화면에 선택됐다고 표시를해준다.&lt;br /&gt;
&lt;br /&gt;
Graphics.CopyFromScreen로 스크린샷을 찍고&lt;br /&gt;
SendMessage로 스크롤을 움직여준다. &lt;br /&gt;
 - WM_KEYDOWN과 WM_KEYUP을 이용해서 아래 방향키를 누르도록했다.&lt;br /&gt;
 - 오픈캡쳐에서는 스크롤바의 아래방향키를 누르는 것 같았다.&lt;br /&gt;
&lt;br /&gt;
이미지를 적절히 합쳐주고..&lt;br /&gt;
&lt;br /&gt;
합친 Bitmap객체를 Save로 저장해준다.&lt;br /&gt;
&lt;br /&gt;
정리 끝~</description>
</item>
<item>
<title>[C#] 날짜 포멧팅</title>
<link>http://skyilover.ruree.net/soojung/entry.php?blogid=355</link>
<pubDate>Wed, 23 Dec 2009 21:52:45 +0900</pubDate>
<category>Programming</category>
<description>예전에 VB시절 날짜를 출력할때 포멧팅을 몰라서 substr노가다를 하던 기억이 새록새록난다..&lt;br /&gt;
&lt;br /&gt;
오늘도 기능을 구현중에 날짜를 적을일이 있어서 substr노가다를 하려고 했다.&lt;br /&gt;
&lt;br /&gt;
그러다가 설마 포멧팅기능이 없을까 싶어서 검색을 해보기 시작했다.&lt;br /&gt;
&lt;br /&gt;
역시나.. 찾아보면 왠만한 것은 다있는거 같다.&lt;pre&gt;
String date = DateTime.Now.ToString(&quot;yyMMdd&quot;);
&lt;/pre&gt;매우 심플하다.&lt;br /&gt;
&lt;br /&gt;
그 외 시스템에 미리 정의된 정보를 가져 올 수도 있다.&lt;br /&gt;
&lt;br /&gt;
CultureInfo와 DateTimeFormatInfo라는 것이 있다.&lt;pre&gt;
CultureInfo t = new CultureInfo(CultureInfo.CurrentCulture.LCID);
DateTimeFormatInfo dtFormat = new DateTimeFormatInfo();
//dtFormat.FullDateTimePattern = &quot;yyyy-MM-dd tt HH:mm:ss&quot;;
dtFormat.FullDateTimePattern = t.DateTimeFormat;
String date = DateTime.Now.ToString(dtFormat.FullDateTimePattern);
&lt;/pre&gt;</description>
</item>
<item>
<title>[C#] SetROP2(R2_NOT)을 대체하는 방법</title>
<link>http://skyilover.ruree.net/soojung/entry.php?blogid=354</link>
<pubDate>Wed, 23 Dec 2009 19:53:32 +0900</pubDate>
<category>Programming</category>
<description>SetROP2(R2_NOT) 기능을 찾던중.. 꽤 적절한 포스팅을 찾았다&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://bybi.tistory.com/283&quot;&gt;http://bybi.tistory.com/283&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
GDI+에는 기본적으로 저런 API를 제공해주는 것은 없다.&lt;br /&gt;
&lt;br /&gt;
다른방법으로 ControlPaint.DrawReversibleFrame를 쓰면 된다.&lt;br /&gt;
&lt;br /&gt;
rect는 그릴 영역이고(화면의 0,0을 기준으로 그린다) color는 black을 넣어주면되고&lt;br /&gt;
&lt;br /&gt;
framestyle은 thick으로 적절히 하면된다.&lt;pre&gt;
	RECT rt = new RECT();
	GetWindowRect(handle, ref rt);
	ControlPaint.DrawReversibleFrame(
		new Rectangle(rt.left, rt.top, rt.right - rt.left, rt.bottom - rt.top),
		Color.Black, FrameStyle.Thick);

&lt;/pre&gt;예전에도 이걸 찾아서 썼던적이 있었는데....&lt;br /&gt;
&lt;br /&gt;
다시 찾으려니 도저히 아무것도 생각이 안나더라 ㄷㄷ&lt;br /&gt;
&lt;br /&gt;
그런 이유에서 또 잊어먹기전에 포스팅을 바로바로 한다.</description>
</item>

</channel>
</rss>

