'2011/01'에 해당되는 글 16건

  1. 2011/01/31 [C#] 활성윈도우 이름 과 핸들 알아내기 와 익스플로러 주소값 알아내기 (162)
  2. 2011/01/30 [super Bot] (55)
  3. 2011/01/30 [오늘은칼퇴 v0.1] (47)
  4. 2011/01/26 Processing In Eclipse (55)
  5. 2011/01/25 [Shell32.DLL] *.LNK , *.URL 분석하기 (97)
  6. 2011/01/20 [c# , Thread] lock Test (103)
  7. 2011/01/20 [c# ThreadApartment] ActiveX 컨트롤 , COM 객체를 새로운 쓰레드에서 접근할때 (85)
  8. 2011/01/20 [Virtual windows ] (83)
  9. 2011/01/19 [new Thread in new Form] 새로운 쓰레드 안에 새로운 윈도우폼 (119)
  10. 2011/01/17 [AxShockwaveFlashObjects] AS3 in C# (141)
  11. 2011/01/16 [.Net Profiler] ANTS Memory Profiler 사용해보기 (160)
  12. 2011/01/10 [LINQ _ XML] 간략한 LINQ to XML 사용법 (182)
  13. 2011/01/07 [Zxing , QR Sample ] C# 에서 QR 라이브러리 사용하기 (241)
  14. 2011/01/07 [MS SURFACE2] (118)
  15. 2011/01/06 [C# Simple Callback] C# 의 정말 간단한 콜백 호출방법 (58)
  16. 2011/01/04 [Delegate] c# , Delegate 간단정리 (99)

[C#] 활성윈도우 이름 과 핸들 알아내기 와 익스플로러 주소값 알아내기

|



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

//[0] 필요한 DLL 추가 SHDocVw는 윈도우에서 찾기
using SHDocVw; 
using System.Runtime.InteropServices;

namespace LINK_HELPER2
{
    public partial class MainWindow : Window
    {
        TRACE.TraceDele trace = TRACE.getTrace;
        bool isCk = false;

        //[1] user32.dll 의 필요한 함수 선언
        [DllImport("user32.dll")]
        static extern int GetForegroundWindow();
        [DllImport("user32.dll")]
        static extern int GetWindowText(int hWnd, StringBuilder text, int count);


        public MainWindow()
        {
            InitializeComponent();

            //[2] 체크박스 이벤트 선언
            checkBox1.PreviewMouseDown += new MouseButtonEventHandler(checkBox1_MouseDown); 
            check();
        }
        //[3] 체크박스의 핸들러 [검색의 실행 / 대기]  
        void checkBox1_MouseDown(object sender, MouseButtonEventArgs e)
        {
            if (!checkBox1.IsChecked == true)
                isCk = true;
            else
                isCk = false;
        }


        //[4]체크 시작
        private void check()
        {
            System.Timers.Timer t = new System.Timers.Timer();
            t.Interval = 1000;
            t.Elapsed += (s, e) =>
            {
                if (isCk == true)
                {
                    ckIE();
                    getWindow();
                }
            };
            t.Start();
        }

        //[5] 윈도우의 타이틀 얻기
        void getWindow()
        {
            const int nChars = 256;
            int handle = 0;
            StringBuilder Buff = new StringBuilder(nChars);
            handle = GetForegroundWindow();
            if (GetWindowText(handle, Buff, nChars) > 0)
            {
                trace("caption ", Buff.ToString());
                trace("handle", handle.ToString());
            }
        }

        //[6] 익스플로러의 이름과 현제 URL 얻기
        private void ckIE()
        {
            foreach (InternetExplorer ie in new ShellWindowsClass())
            {
                trace(ie.Name, ie.LocationURL);
            }
            trace("--->");
        }
    }
}


@p.s
익스플로러에 검출에 "Windows 탐색기" 도 걸린다.
트랙백 0 And Comment 162

[super Bot]

|

'New Tech' 카테고리의 다른 글

Amnesia Connect  (56) 2011/02/09
[super Bot]  (55) 2011/01/30
[Virtual windows ]  (83) 2011/01/20
[MS SURFACE2]  (118) 2011/01/07
[ZEBRA Display] 보는사람의 각도에 따라 투사되는 정말 홀로그램  (97) 2010/12/10
[KINECT] 로봇 헬리콥터  (69) 2010/12/10
트랙백 0 And Comment 55

[오늘은칼퇴 v0.1]

|






@ 화면 설명!



@ DEMO


@권장사양
윈도우7 혹은( .net Framework 3.5 이상), [그외 키보드 , 마우스 , 모니터가  필요함]

@이동:

마우스 우클릭 드래그

@테이블 모드 :
인터넷 주소의 '/' 를 검출하여 엑셀에 칸칸이 적용 (데모영상과 같음)


@테이블 아닌 모드 :
그냥 순수하게 링크 주소만 적용


@스페샬땡스 :
동기부여와 아이디어 제공해준 (HR , DR , UJ )누나들 감사.




@ 업데이트 내용
 -(v 0.1)
* 투명도 기능
* 자동삭제 모드
* 테이블 모드
* 오른쪽 마우스 버튼드래그 기능

-(v 0.2)
* 우클릭 -> 좌클릭 이동
* 투명도Bar 클릭 제거

-(v 0.3)
* 왼쪽컨트롤키 캡쳐모드 ( 최상단 IE의 주소를 불러온다 : [플래시사이트 용] )
* 수익발생 = 수익모델로 발전가능성 확인
수입 : "비타요구" 5줄 , "미미 보리건빵" 1봉지 


@피드백은 댓글로!

'App' 카테고리의 다른 글

[오늘은칼퇴 v0.1]  (47) 2011/01/30
트랙백 0 And Comment 47

Processing In Eclipse

|


먼저 필요한 것들.

1. 이클립스 : http://www.eclipse.org/downloads/packages/eclipse-ide-java-developers/heliossr1
2. PDE : http://www.processing.org/download/

3.이짓을 하는 이유 : 기존 PDE 에서 자동완성(코드 힌팅 , 인텔리센스)이 안된다. 단지.


그럼 , 위의 파일들을 적당한곳에 압축을 풀고

이클립스를 실행하자!



새로운 프로젝트 를 만든다. 





아무 이름이나 집어넣고 ->완료.







프로젝트 상단에서 우클릭 , 임포트



제너럴 -> 파일시스템 선택







프로세싱을 압축 풀었던 폴더를 찾아 확인!





이미지 에서 보이는것처럼 하이라키를 맞춰서 core.jar 선택후 -> 완료!



추가된 라이브러리를 등록 !





새로운 클래스 생성




슈퍼클래스선택의 브라우져를 연다.




"PApplet" 를 검색,

추가 한다.






클래스 이름 입력후 완료!







코드 입력!! 드디어 자동완성이 지원된다!








F11 키로 컴파일!

완료 !

'Processing' 카테고리의 다른 글

Processing In Eclipse  (55) 2011/01/26
트랙백 0 And Comment 55

[Shell32.DLL] *.LNK , *.URL 분석하기

|




/**************************LNK파일 모양******************************/
L        ?      F?       ?|邂栗S執네??|邂栗 t                    W P???i↖ +00? /E:\                   l 1     ?? PROGRA~1  T 絶?뢒??*   퉠                   P r o g r a m   F i l e s   ( x 8 6 )   X 1     ?? ARTHRO~1  @ 絶????*  
                   A r t h r o p o d   d 2  t ??  ARTHRO~1.EXE  H 絶????*   U
                  A r t h r o p o d . e x e      d            4       c         Kd끘   새 볼륨 E:\Program Files (x86)\Arthropod\Arthropod.exe  (      ?   1SPS?XF퍵8C샜?쁬?        `     쟚       uf15-pc                         V솝??? $?^                V솝??? $?^   
/********************************************************************/



/*********************URL 파일 모양 ***********************************/
[DEFAULT]
BASEURL=http://cafe.naver.com/gosusi.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=4109
[{000214A0-0000-0000-C000-000000000046}]
Prop3=19,2
[InternetShortcut]
URL=http://cafe.naver.com/gosusi.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=4109
IDList=
IconFile=http://cafe.naver.com/favicon.ico
IconIndex=1
/**********************************************************************/


처럼 LNK는 바이너리 타입이고 URL은 텍스트타입이다.

코드를 보면,




Created with colorer-take5 library. Type 'csharp'

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.IO;
using Shell32;
using System.Reflection;

namespace LnkASMB2
{
    public partial class MainWindow : Window
    {
        TRACE_Lib.TRACE.TRACE_DELE trace = TRACE_Lib.TRACE.getTrace;
        public MainWindow()
        {
            InitializeComponent();

            //[0]
            this.AllowDrop = true;
            this.Drop += new DragEventHandler(MainWindow_Drop);
        }

        void MainWindow_Drop(object sender, DragEventArgs e)
        {
            //[1]
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                //[2]
                string[] files = e.Data.GetData(DataFormats.FileDrop, true) as string[];
                FileInfo info = new FileInfo(files[0]);
                
                //[3]
                if (info.Extension == ".lnk" || info.Extension == ".LNK")
                    AssembleLNK(files[0]);
                else if (info.Extension == ".url" || info.Extension == ".URL")
                    AssembleURL(files[0]);
                else
                    MessageBox.Show("모르는파일입니다.");
            }
        }

        //[4]
        void AssembleLNK(string _path)
        {
            //[5]
            Shell shl = new Shell();
            //[6]
            Folder dir = shl.NameSpace(System.IO.Path.GetDirectoryName(_path));
            //[7]
            FolderItem item = dir.Items().Item(System.IO.Path.GetFileName(_path));

            //[8]
            List<object> itemPis = new List<object>();
            itemPis.Add(new { str = "단축아이�� 바이너리" });
            itemPis.Add(new {item.Application});
            itemPis.Add(new {hash = item.GetHashCode()});
            itemPis.Add(new {item.IsBrowsable});
            itemPis.Add(new {item.IsFolder});
            itemPis.Add(new {item.IsLink});
            itemPis.Add(new {item.Path});
            itemPis.Add(new {item.Name});
            itemPis.Add(new {item.Parent});
            itemPis.Add(new {item.Size});
            itemPis.Add(new {item.Type});

            //[9]
            ShowText(itemPis);
        }

        //[10]
        void AssembleURL(string _path)
        {
            TextReader tr = new StreamReader(_path);
            String tempLine = null;
            String result = null;
            while ((tempLine = tr.ReadLine()) != null)
            {
                //[11]
                if (tempLine.IndexOf("URL=") > -1)
                {
                    result = tempLine.Substring(4);
                }
            }
            //[12]
            textBox1.Text = "";
            textBox1.Text = "인터넷바로가기" + Environment.NewLine + result;
        }

        void ShowText(List<object> itemPis)
        {
            textBox1.Text = "";
            foreach (var o in itemPis)
            {
                textBox1.Text += o.ToString() + Environment.NewLine;
            }
        }
    }
}

 
주석
[0] : 드래그 드롭 설정과 이벤트
[1] : 만약 드롭파일의 유효성검사
[2] : 드롭된 파일위치 검출 과 FileInfo 생성
[3] : 확장자 식별과 예외처리
[4] : LNK 분석 (바이너리)
[5] : System32 폴더에서 Shell32.dll 을 가져와 참조추가 하여 사용
[6] : 디렉토리 검출
[7] : FolderItem 검출
[8] : 속성들의 리스트화
[9] : 출력
[10] : URL 분석 (텍스트)
[11] : 해당 줄에 "URL=" 검출 <*>
[12] : 출력!


주석 [11]은 윈도우의 경우이고 , MacOS계열에서 넘어오는것은 그냥 ( http://www.abc.com )꼴이다.
Shell32.dll 을 이용하면 윈도가 생성한 대부분의 파일을 분석할수 있다.
하지만 COM 객체라서 그런지 기본코드레벨로 리플렉션을 할수 없어 해당 속서을 파악할수 없다( PropertyInfo[] )
[ 파일속성관련 포스트 :  http://www.scripter.co.kr/entry/any ]
트랙백 0 And Comment 97

[c# , Thread] lock Test

|




@MainThread Render
         void renderTimer_Tick(object sender, EventArgs e)
        {
            button1.Location = pos;
            pos.X = (int)(Math.Sin(Math.PI / 180 * i) * 100) + 100;
            lock (bitmap)
            {
                panel1.DrawToBitmap(bitmap, panel1.ClientRectangle);
            }
            ++i;
        }


@Child Thread Render


        void timer_Tick(object sender, EventArgs e)
        {
            lock (Form1.GetData)
            {
                //pb is PictureBox
               //.GetData => Bitmap
                pb.Image = (Bitmap)Form1.GetData.Clone();
            }
        }




※ 그런데 .. lock 을 쓰지 않고 병렬처리 하는 법이 있다고 함 = = ??


트랙백 0 And Comment 103

[c# ThreadApartment] ActiveX 컨트롤 , COM 객체를 새로운 쓰레드에서 접근할때

|


예를 들어 새로운 쓰레드의 새로운폼 에서 아래와 같이 AX 객체를 생성하면,,



이러한 에러를 내밷는다..


왜,, 사람들이 영문판을 쓸까? 하는 이유를 조금 알것 같다 , "아파트" , 도대체 ., 한국말로 아파트는 주택을 의미하는데 ,,

쓰레드가 내집마련의 꿈에 실패했다는 에러도 아니고 ...

그래서 axWindowsMediaPlayer1 에서 Thread 에러로 구글링해봐도 질문만 있지 누구하나 답변이 없었다.

그리고 msdn 포럼에 질문을 했다.

http://social.msdn.microsoft.com/Forums/ko-KR/visualcsharpko/thread/a541e7bd-d9c0-4729-a006-4269dfa1c054

요번에도 Boram Kang 님이 답을 해주셨다.

답은 : http://support.microsoft.com/kb/841295 

참고 : http://blogs.msdn.com/b/cbrumme/archive/2004/02/02/66219.aspx
         http://byung.egloos.com/3547030


사용법은
Thread 가 Start 되기 전에 지정하면 된다.

t = new Thread(startThread);
t.ApartmentState = ApartmentState.STA;
t.Start();


결과로 새로운 쓰레드에서 Ax 가 정상적으로 플레이 된다.



트랙백 0 And Comment 85

[Virtual windows ]

|



Virtual windows take you where you want to go (2:58) 

Jan 19 - A small Silicon Valley-based company is making it possible for homeowners to look through their windows and enjoy a view of any scene they desire. Winscape's virtual windows are designed to transport homeowners to another place -- or time -- by projecting scenes like the Grand Canyon or Taj Mahal into their living rooms. Ben Gruber reports.




키넥트로 .. 흠 ...

'New Tech' 카테고리의 다른 글

Amnesia Connect  (56) 2011/02/09
[super Bot]  (55) 2011/01/30
[Virtual windows ]  (83) 2011/01/20
[MS SURFACE2]  (118) 2011/01/07
[ZEBRA Display] 보는사람의 각도에 따라 투사되는 정말 홀로그램  (97) 2010/12/10
[KINECT] 로봇 헬리콥터  (69) 2010/12/10
트랙백 0 And Comment 83

[new Thread in new Form] 새로운 쓰레드 안에 새로운 윈도우폼

|
무작정 쓰레드를 생성하여 폼을 생성한다면... 
 
Thread t2 = new Thread(sample);
        t2.Start();
...
        private void sample()
        {
            Form n = new Form();
            n.Show();
        }
바로 폼이 깜빡 거리고 만다. 해당쓰레드가 바로 죽기 때문이다.
새로운 폼은 새로운 어플리케이션으로 생성해야 한다.
 
 
 
 
 
Thread t2 = new Thread(sample);
        t2.Start();
...
        private void sample()
        {
            //Form n = new Form();
            //n.Show();
Application.Run(new Form2());
        }
 
 주의할점은 Application.Run 앞에 모든 명령이 와야 한다.
해당 쓰레드는 Application을 기점으로 돌고 있기 때문에 Application 뒤에 명령이 온다면,
Application 이 종료된다음에 실행된다. while 문과 같다고 생각하면 되겠다.
 
Dispose 를 구현한다면 Application 뒤에 오는것도 나쁘지 않겠다.
 
ex> 
 
Application.Run(...);
Consol.writeLine("해당 어플리케이션이 종료되었습니다.");
 
 
 
 
 
더욱 안전한 방법을 원한다면 
BackgroundWorker 를 사용하는 방법도 있다.
 
보기
 
구현방법은 역시 같다.
트랙백 0 And Comment 119

[AxShockwaveFlashObjects] AS3 in C#

|

 

 

http://www.scripter.co.kr/entry/FlashExternal-c-안에-as3-AVM2-넣기

에서 같은주제를 아주 예전에 다루었지만 내용이 너무 부실하고, 철없었기 때문에 보강을 해야겠다.

사실 구글에 많이 올라와 있는 "AxShockwaveFlashObjects" 관련글들을 그대로 따라했다가는

이유도 모르는 FileNotFoundException 이 나올것이다.

그런 분들은 아래의 DLL 을 사용하기 바란다 .










코드를 살펴 보겠다.



c#



Created with colorer-take5 library. Type 'csharp'

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using TRACE_Lib;

using Flash.External;
using AxShockwaveFlashObjects;
using System.IO;
using System.Collections;

namespace FlashTEST_1
{
    public partial class Form1 : Form
    {
        public TRACE.TRACE_DELE trace = TRACE.getTrace;
        public Form1()
        {
            InitializeComponent();
        }
        //[0]
        private AxShockwaveFlash flash;
        private ExternalInterfaceProxy proxy;
        
        protected override void OnLoad(EventArgs e)
        {
            //[1]
            flash = new AxShockwaveFlash();
            this.Controls.Add(flash);
            //[2]
            string swfPath = Environment.CurrentDirectory + Path.DirectorySeparatorChar+ "TestCS.swf"; 
            flash.LoadMovie(0, swfPath);
            flash.Width = 500;
            flash.Height = 400;
            //[3]
            proxy = new ExternalInterfaceProxy(flash);
            //[4]
            proxy.ExternalInterfaceCall += new ExternalInterfaceCallEventHandler(proxy_ExternalInterfaceCall);

            base.OnLoad(e);
        }

        object proxy_ExternalInterfaceCall(object sender, ExternalInterfaceCallEventArgs e)
        {
            //[5]
            string name = e.FunctionCall.FunctionName;
            object[] args = e.FunctionCall.Arguments;

            if (name == "ready")
            {
                trace("#", name, (args[0] as ArrayList)[0], (args[0] as ArrayList)[1]);
            }
            //[6]
            if (name == "testCall")
            {
                //[7]
                TxReceive.Text += (args[0] as ArrayList)[0].ToString() + Environment.NewLine;
            }
            //[8]
            return null;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //[9]
            proxy.Call("CallAS3", TxSend.Text);
        }
    }
}
 
 
/* [0] : Form 으로 플래시를 불러오기위해서는 AxShockwaveFlash 라는 윈도우 컨트롤과 
*       그것을 제어하는 ExternalInterfaceProxy 를 사용하여야 정확하게 AS3과 통신할수 있다.
*
* [1] : flash 컨테이너를 선언하고 메인폼에 붙였다.
*
* [2] : TestCS.swf 의 위치를 획득하여 LoadMovie 하였다.
*
* [3] : 프록시를 선언하여 플래시의 ExternalInterface 과 연결하기로 하였다.
 *
 * [4] : 프록시에 이벤트를 선언하여 플래시에서 오는 신호를 받아 들인다.  *
 * [5] : ExternalInterfaceCallEventArgs 의 멤버로 FunctionCall에서  *       FunctionName 과 Arguments를 얻을수 있다.  *      
 * [6] : "testCall" 은 AS3 코드에서 보면 알겠지만 "Call("testCall" , input.text);" 처럼
 *       서로의 이름이 같게 하여 원하는 값을 추출 한다. 이는 c# 이 값을 받는 상황 과 보내는 상황
*       모두 적용 된다.
*        * [7] : 플래시에서 "...args" 형으로 매개변수를 받는것이 c# 으로 넘어오면 args[0] 로 된다.  *       그리고 그타입은 ArrayList 이다
 *       ※ AS3 의 Array는 배열의 타입을 따로 지정하지 않는 ArrayList 이다.
 *      
 * [8] : 이유는 모르겠지만 라이브러리 상의 이벤트 델리게이트 반환타입이 오브젝트 이어서
 *       불가피하게 return 하였다.  *        * [9] : "[6]"참고 , 플래시로 값을 보낸다.  *  * */
 
 
 
 
그다음은..
AS3






Created with colorer-take5 library. Type 'csharp'

package
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.events.TimerEvent;
    import flash.external.ExternalInterface;
    import flash.system.fscommand;
    import flash.text.TextField;
    import flash.text.TextFieldType;
    import flash.utils.Timer;
    
    public class TestCS extends Sprite
    {
        private var tx: TextField;
        private var input : TextField;
        private var bt : Sprite;
        public function TestCS()
        {
            //[0]
            //view..
            tx = new TextField();
            addChild(tx);
            tx.border = true;
            tx.multiline = true;
            tx.width = stage.stageWidth;
            tx.height = stage.stageHeight-50;
            tx.text = "string!";
            
            input = new TextField();
            input.type = TextFieldType.INPUT;
            input.x=  0 ; 
            input.y = tx.y + tx.height + 10;
            input.width = 200;
            input.border = true;
            input.height = 30;
            input.text = "Hellow C#! Iam AS3";
            addChild(input);
            
            bt = new Sprite();
            bt.graphics.beginFill(0x0);
            bt.graphics.drawRect(0,0,100,30);
            bt.x = input.x + input.width + 30;
            bt.y = input.y;
            bt.buttonMode = true;
            addChild(bt);
            
            //[1]
            //Event
            addEventListener(Event.ADDED_TO_STAGE , ready);
            bt.addEventListener(MouseEvent.CLICK , bt_call);
            
            //[2]
            //callback
            CallBack("CallAS3" , callBackFromCSharp);
        }
        
        
        //EventHandler & CallbackMethod
        private function ready(e:Event = null):void
        {
            Call("ready" , stage.stageWidth , stage.stageHeight);
        }
        
        //[3]
        private function callBackFromCSharp(msg : String):void
        {
            tx.text += " \n" + msg;
        }
        
        //[4]
        private function bt_call(e:MouseEvent):void
        {
            Call("testCall" , input.text);
        }
        
        
        //[5]
        //Exception Local Error
        private function Call(ParamName : String ,...args):void
        {
            try{
                ExternalInterface.call(ParamName , args);
            }catch(e:Error){tx.text += e.toString() +"\n";}
        }
        private function CallBack(ParamName : String , CallBack:Function):void
        {
            try{
                ExternalInterface.addCallback(ParamName , CallBack);
            }catch(e:Error){}
        }
    }
}
/**
 * [0] : 화면구성에 필요한 요소들을 생성 , 배치 하였다.
 *
 * [1] : 간단한 문자열을 보낼 버튼 이벤트와 초기화 이벤트를 작성하여 상황에 맞게 c# 으로 값을
 *       보낼것이다.
 *       그러나 초기화 이벤트 (Event.ADDED_TO_STAGE) 는 c# 에서 동작하지 않는다.(?왜그런지..)
 *
 * [2] : c# 에서 올 신호를 받는 콜백을 선언하였다.
 *
 * [3] : "[2]" 를 받는 메서드
 *
 * [4] : 버튼을 누르면 간단히 C# 으로 문자열을 보내는 이벤트 핸들러 "[1]" 참고
 *
 * [5] : 코드를 이처럼 처리한 이유는 swf 를 감싸는 무언가가 없는 상황에서 ExternalInterface 는 에러를 발생시킨다.
 *
 * */


트랙백 0 And Comment 141

[.Net Profiler] ANTS Memory Profiler 사용해보기

|




현재 6버전까지 나왔다.

지금은 5버전 을 테스트 해보겠다.






메뉴 항목에서 .net Executable 을 선택하고 대상을 찾고 스타트 버튼을 누르자




그러면 실행과 동시에 프로파일러가 실행되고

상단에 사진기 모양의 아이콘 , Take Memory SnapShot 을 클릭한다.






그러면 익숙한 프로파일링 장면이 나올것이다.

여기서 Grop By namespace 를 체크하면

좀더 편리하게 객체를 조사할수 있다.




그럼 한번 객체를 생성하여 보자 , 정말 프로파일링이 되는지 ...



객체를 생성하고 스냅샷을 찍었더니 정말 Texture2d 객체의 개수가 늘어났다. 그에 따른 메모리 바이트도 표시되고
이전 스냅샷과 비교하여 얼마나 늘었는지 줄었는지도 표로 금방 알수 있다.

화살표로 되어 뺀부분은 객체를 삭제 하였을때 이다. 역시 대상객체의 개수가 줄었으며 이러한 방법으로 메모리관리를 할수 있다.





부가적으로 아래와 같은 ., 클래스를 추적하는 기능도 있더라...

사실 이러한 실시간 프로파일러를 VS2010 안에서 찾을려고 오랜시간 노력했지만 찾지 못했고 ,

MSDN 에서 답을 찾았다.
http://social.msdn.microsoft.com/Forums/ko-KR/visualcsharpko/thread/ff4afa62-123a-4311-a609-9eb210b70145
(강보람 MVP님 ㄳ ! )




트랙백 0 And Comment 160

[LINQ _ XML] 간략한 LINQ to XML 사용법

|

샘플 XML
<?xml version="1.0" encoding="utf-8" ?>
<root>
  <config>
    <Rootposition x="100" y="100"/>
  </config>

  <adData>
    <content name="samsung">
      <keyVisual x="0" y="0">http://www.samsung.com/us/boosted</keyVisual>
      <mov x="100" y="120">SAMSUNG MOV</mov>
    </content>

    <content name="hyundai">
      <keyVisual x="0" y="0">http://www.hyundai.com/kr/main.aspx</keyVisual>
      <mov x="20" y="200">HYUNDAI MOV</mov>
    </content>

    <content name="lg">
      <keyVisual x="20" y="0">http://www.lg.co.kr/</keyVisual>
      <mov x="330" y="300">LG MOV</mov>
    </content>
  </adData>
</root>
 
 
 
C# [Linq _ XML]
 
Created with colorer-take5 library. Type 'csharp'

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Xml.Linq;
using System.Text;
using System.Windows.Forms;

namespace LINQ_XML_test1
{
    public partial class Form1 : Form
    {
        public TRACE.TraceDele trace = new TRACE.TraceDele(TRACE.getTrace);
        public Form1()
        {
            InitializeComponent();
        }

        protected override void OnLoad(EventArgs e)
        {

            //간단��게 xml 문서를 로드 한다.
            XElement xe = XElement.Load("Sample.xml");

            //Descendants는 Child ,  즉 XML.Child( "adData" ).Child( "adData" ) �� 논리로 생각��면 ��겠다.
            //이로서 검출될 item 의 범위를 정한다.
            //
            //select 로 xmlQuery 에 반환될 형식을 정한다.
            //본 코드는 리스트화 하기위해 'SampleResult'라 하였지만
            //익명메서드 꼴인 'new {...}' 을 사용하거나 item을 바로 반환 하여도 동작가능하다.
            var xmlQuery = from item in xe.Descendants("adData").Descendants("content") 
                           select new SampleResult
                           {
                               //Element 일경우 Value를 반환지 않으면 xml 태그가 그대로 반환된다.
                               KeyVisual = item.Element("keyVisual").Value,
                               mov = item.Element("mov").Value,
                               //Attribute 일경우 String 으로 반환기때문에 적절한 타입케스팅이 필요하다.
                               movPosition = new Point((int)item.Element("mov").Attribute("x") , (int)item.Element("mov").Attribute("y"))
                           };

            //결과를 담을 리스트
            List<SampleResult> sList = new List<SampleResult>();
            foreach (var result in xmlQuery)
            {
                sList.Add(result);
                trace(result.mov, "###", result.KeyVisual , "###" ,result.movPosition);
            }
            base.OnLoad(e);
        }
    }

    //샘플리스트 클래스
    class SampleResult
    {
        public String KeyVisual { get; set; }
        public String mov { get; set; }
        public Point movPosition { get; set; }
        public override string ToString()
        {
            return KeyVisual + " " + mov +" " + movPosition;
        }
    }
}
Trackback 2 And Comment 182

[Zxing , QR Sample ] C# 에서 QR 라이브러리 사용하기

|




실버라이트 용 QR 라이브러리도 코드플렉스에 있지만.. 요걸 사용하고 싶었다 .

그런데 요놈은 c# 용 레퍼런스가 아무것도 없었다 . 자바와 ios 는 잘되어 있던데 .,

그래서 AS3 용 코드를 보고 어영부영 따라해 보았다.










using
System; using System.Drawing; using System.Windows.Forms; using AForge.Video.DirectShow; using AForge.Controls; using System.Collections; using com.google.zxing; using com.google.zxing.common; using com.google.zxing.qrcode; using trace; namespace Xing_TEST { public partial class Form1 : Form { public static traceDele trace = new traceDele(traceCS.traceMethod); public Form1() { InitializeComponent(); } //aforge player private VideoSourcePlayer player; //render Data private Bitmap captureData; //render Region private Rectangle captureBound; //renderTimer private Timer timer; //qr member private Reader reader; private Hashtable hint; protected override void OnLoad(EventArgs e) { //aforge initialize player = new VideoSourcePlayer(); player.Width = 320; player.Height = 240; FilterInfoCollection device = new FilterInfoCollection(FilterCategory.VideoInputDevice); VideoCaptureDevice cam = new VideoCaptureDevice(device[0].MonikerString); player.VideoSource = cam; player.Start(); this.Controls.Add(player); //captureData initialize captureBound = new Rectangle(player.Location.X , player.Location.Y , player.Width+100, player.Height); captureData = new Bitmap(player.Width, player.Height); Graphics g = Graphics.FromImage(captureData); //QR initialize reader = new QRCodeReader(); hint = new Hashtable(); hint.Add(DecodeHintType.POSSIBLE_FORMATS, BarcodeFormat.QR_CODE); //render timer initialize timer = new Timer(); timer.Tick += new EventHandler(timer_Tick); timer.Interval = 30; timer.Start(); base.OnLoad(e); } void timer_Tick(object sender, EventArgs e) { //capture DrawToBitmap(captureData, captureBound); pictureBox1.Image = captureData; //QR processing RGBLuminanceSource source = new RGBLuminanceSource(captureData, captureData.Width, captureData.Height); BinaryBitmap img = new BinaryBitmap(new GlobalHistogramBinarizer(source)); Result result = null; try { //QR success result = reader.decode(img, hint); } catch{} if (result == null) { //QR fail label1.Text = "no decode!"; } else { //QR Success label1.Text = result.Text; label2.Text = result.BarcodeFormat.ToString(); } } //close protected override void OnClosed(EventArgs e) { trace("Close!"); timer.Stop(); player.SignalToStop(); player.WaitForStop(); base.OnClosed(e); } } }
트랙백 0 And Comment 241

[MS SURFACE2]

|

 

 

 




 http://www.microsoft.com/surface/whatissurface.aspx

The Microsoft Surface® platform brings people together to connect, learn, and decide. It enables experiences that change the way people collaborate and connect with a 360-degree interface. And, with PixelSense™, Microsoft Surface sees and responds to touch and real world objects—supporting more than 50 simultaneous inputs.

This experience comes to life in the new 40 inch Samsung SUR40 for Microsoft Surface that can be used as a table, on the wall, or embedded in other fixtures or furniture.

Touch the Possibilities

How can you use the Surface platform in your organization? The only limit is your imagination. Whether you’re in hospitality, retail, healthcare, professional services, or the public sector, you can change the way people interact with information and with each other.
  • Make content more engaging. Give your customers immersive and collaborative ways to engage with photos, videos, documents, maps, custom applications, and more.
  • Plan and simulate. Bring to life real-time "if/then" modeling and visualization, simulations and calculations—perfect for financial services, healthcare, and other consultative environments.
  • Make learning more fun. Breathe new life into the education process with rich visualizations that encourage teamwork and enhance learning.
  • Transform the shopping experience. Make shopping more immersive by connecting customers with more options, recommendations, product and service comparisons, and personalized service.
  • Connect with customers through games and pastimes. Have some fun by putting Surface in restaurants, bars, hotel lobbies, and other venues, associating memorable experiences with your brand.
  • Communicate and connect. Give people an efficient and intriguing new way to get the information they’re looking for—like maps and tourist destinations in a hotel lobby. Or use it to help them exchange personal information so they can connect with each other and to your business.



혁신적인 두께 , 픽셀 하나하나의 쎈서 , 사물인식 , 단돈 천만원이 안되는 정도 , 게다가 제조업체는 삼성

'New Tech' 카테고리의 다른 글

[super Bot]  (55) 2011/01/30
[Virtual windows ]  (83) 2011/01/20
[MS SURFACE2]  (118) 2011/01/07
[ZEBRA Display] 보는사람의 각도에 따라 투사되는 정말 홀로그램  (97) 2010/12/10
[KINECT] 로봇 헬리콥터  (69) 2010/12/10
Strukt Interactive Showreel  (45) 2010/12/07
트랙백 0 And Comment 118

[C# Simple Callback] C# 의 정말 간단한 콜백 호출방법

|
as3 를 예로 들자면 콜백작성이 매우 자유롭다 이유는 Function 형이 존재하기 때문이다.

ex> var someMethod : Function
someMethod()

처럼 변수처럼 선언하였다가 변수를 원할때는 '()' 를 빼줬다가 메소드를 원할때는 '()'를 붙이기만 하면 된다.
 c# 은 이러한 나이스한 방법이 다소 제한된다.
교과서 적인 콜백을 보자면, 정석적인 이벤트 선언이나, 기본 api에서 제공하는 콜백을 사용하는 경우를 무수히 볼수 있다.
하지만 더욱 간편하고 as3 의 표현과 같은 느낌으로 사용하는 법을 한번 보자 정말 심플한 콜백 사용법이다.





public
partial class Form1 : Form { public Form1() { InitializeComponent(); //콜백테스트 클레스 선언 , 생성 CallBackTEST callbackTest = new CallBackTEST(); callbackTest.onComplete(complete); } //CallBackTEST 클레스에서 선언한 delegate 형식에 맞추어 int 변수 하나를 받는 메소드 작성 private void complete(int count) { Console.WriteLine("callback complete" + count); } } class CallBackTEST { //콜백을 전달할 delegate 선언 (인수 전달/) public delegate void onCompleteDele(int i); // 테스트 :: // 타이머가 시작작고 count가 2가 되었을때 콜백! // onComplete 의 매개변수 _callCompleteMethod 의 형식은 앞서 선언한 "onCompleteDele" 이다 public void onComplete(onCompleteDele _callCompleteMethod) { Timer t = new Timer(); t.Interval = 1000; t.Start(); int count = 0; t.Tick += delegate { if (count == 2) //!!콜백발생 _callCompleteMethod(count); ++count; }; } }
 
물론 as3 보다 복잡하긴 하지만 델리게이트를 선언함으로서 비동기 , 동기 처리가 가능하고 , 
인자를 넘기는것도 비교적 단순하다.
그리고 정말 장점은 콜백을 받는 메소드의 인텔리센스를 얻을수 있어 as3와 다르게 실수에 의한 런타임 에러를 방지할수 있다. 
트랙백 0 And Comment 58

[Delegate] c# , Delegate 간단정리

|

# 실버라이트 코리아 세이버(saber)님 글 발췌

1)기본

Created with colorer-take5 library. Type 'csharp'

      //델리게이트 선언 
        public delegate void TraceDele(params object[] objs);

        //델리게이트 형식에 맞는 메소드 
        public static void TraceMethod(params object[] objs)
        {
            string result ="";
            foreach (var o in objs)
                result += o.ToString() + " " ;
            Console.WriteLine(result);
        }
        


        protected override void OnLoad(EventArgs e)
        {
            //활용
              TraceDele trace = new TraceDele(TraceMethod);
            trace("traceTEST", 123, this);
            //traceTEST 123 DelegeteREVIEW.Form1, Text: Form1 


            base.OnLoad(e);
        }
 
 
 
 
 
 
 
2)합성
Created with colorer-take5 library. Type 'csharp'

public void methodA()
        {
            Console.WriteLine("A method :: " );
        }
        public void methodB()
        {
            Console.WriteLine("B method :: " );
        }
        public void methodC()
        {
            Console.WriteLine("C method :: " );
        }


        public delegate void SampleDele();
        protected override void OnLoad(EventArgs e)
        {
            //같은 ��식�� 델리게이트 선언
            SampleDele a = new SampleDele(methodA);
            SampleDele b = new SampleDele(methodB);
            SampleDele c = new SampleDele(methodC);

            //합성/
            SampleDele result = a + b + c;
            result();
            //A method :: 
            //B method :: 
            //C method ::
 
 
 
 
 
 
 
 
4) 간단한 이벤트

Created with colorer-take5 library. Type 'csharp'

class Client
    {
        private int id;
        public delegate void ClientService(object sender, EventArgs arg);
        public event ClientService Service;
        public Client(int _id)
        {
            this.id = _id;
        }

        public int ClientId
        {
            get { return id;}
        }
        public void Action()
        {
            if (Service != null)
            {
                EventArgs args = new EventArgs();
                Service(this, args);
            }
        }
    }


    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        protected override void OnLoad(EventArgs e)
        {
            Client clientA = new Client(3023);
            clientA.Service += new Client.ClientService(clientA_Service);

            //원��는 순간..��출
            clientA.Action();

            base.OnLoad(e);
        }

        void clientA_Service(object sender, EventArgs arg)
        {
            Client target = sender as Client;
            Console.WriteLine("dispatchEvent!!! >>>" + target + " " + target.ClientId);
        }
    }
이벤트 연관 자료 : http://www.scripter.co.kr/entry/CustomEvent-C-의-사용자-이벤트-작성
 
트랙백 0 And Comment 99
prev | 1 | next

티스토리 툴바