반응형

간단한 Drag & Drop을 구현해 보자.

 

WinForm에 ListBox 두 개를 적당히 배치한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            listBox2.AllowDrop = true;
 
            listBox1.Items.Add("모니터");
            listBox1.Items.Add("키보드");
            listBox1.Items.Add("스피커");
            listBox1.Items.Add("마우스");
            listBox1.Items.Add("카메라");
        }
 
        private void listBox1_MouseDown(object sender, MouseEventArgs e)
        {
            DragDropEffects effect;
 
            int index = listBox1.IndexFromPoint(e.X, e.Y);
            // listBox1.SelectedIndex을 사용하지 않으므로
            // 오른쪽 마우스 버튼의 드래그&드롭도 처리 가능
 
            if (index != ListBox.NoMatches)
            {
                string item = (string)listBox1.Items[index];
                effect = DoDragDrop(item, DragDropEffects.Copy | DragDropEffects.Move);
                if (effect == DragDropEffects.Move)
                {
                    listBox1.Items.RemoveAt(index);
                }
            }
        }
 
        private void listBox1_QueryContinueDrag(object sender, QueryContinueDragEventArgs e)
        {
            if (e.EscapePressed)
            {
                e.Action = DragAction.Cancel;
                // 드래그&드롭 중 ESC키가 눌리면 취소된다.
            }
        }
 
        private void listBox2_DragOver(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.StringFormat))
            {
                // StringFormat 형식을 허용하기 때문에 다른 프로그램(노트패드 등)
                // 의 문자열을 선택하고 드래그&드롭도 가능하다.
 
                if ((e.KeyState & 8!= 0)
                {
                    e.Effect = DragDropEffects.Copy;
                    // 1 (bit 0)   The left mouse button.
                    // 2 (bit 1)   The right mouse button.
                    // 4 (bit 2)   The SHIFT key.
                    // 8 (bit 3)   The CTRL key.
                    // 16 (bit 4)  The middle mouse button.
                    // 32 (bit 5)  The ALT key.
                }
                else
                {
                    e.Effect = DragDropEffects.Move;
                }
            }
        }
 
        private void listBox2_DragDrop(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.StringFormat))
            {
                listBox2.Items.Add(e.Data.GetData(DataFormats.StringFormat));
            }
        }
    }
}
 

 

소스를 입력하고 빌드한다.

 

프로그램을 실행하면 위와 같이 표시된다.

 

드래그 & 드롭으로 복사 및 이동이 가능하다.

 

 

다른 프로그램의 문자열도 복사 및 이동이 가능하다.

 

반응형
Posted by J-sean
:
반응형

전자기 유도 방식으로 통신하는 NFC나 RFID는 이제 일상생활에 흔히 사용되는 통신이다.

 

  RFID NFC
사용 주파수 125kHz~2.45GHz 13.56MHz
연결범위 ~100m ~10cm
통신 단방향 양방향

RFID와 NFC의 차이

 

NFC는 양방향 통신이 가능하므로 태그와 리더가 통합될 수 있지만 RFID는 태그와 리더가 분리 되어있다. 또, RFID는 장거리 통신이 가능하고, NFC는 암호화가 가능해 보안성이 높다는 특징 때문에 NFC는 모바일 기기 등 개인 단말기에 자주 사용되는 반면, RFID는 개인뿐 아니라 물류 등 각종 산업에서 활발하게 이용되고 있다.

 

이렇게 우리 생활에 편리함을 더해주는 NFC와 RFID 태그를 쉽게 읽고 복사하는 방법을 알아보자.

 

스마트 카드 키 머신(?)이라고 한다. 중국어로 정신 없이 적혀 있지만 아래 주파수 대역의 통신 방식을 읽고 쓸 수 있는걸 알 수 있다.

125kHz, 250kHz, 375kHz, 500kHz, 625khz, 750kHz, 875kHz, 1000kHZ, 13.56MHz

 

태그 복사기의 각 부분 설명.

 

상자를 열어 보자. 바로 태그 복사기가 보인다.

 

몇몇 기능키와 숫자키가 있다.

 

 

뒷면에는 읽고 쓸 카드를 고정할 수 있는 밴드와 배터리(AAA) 커버가 있다. USB 전원으로도 동작 가능하다.

 

간단한 매뉴얼과 USB 케이블도 함께 들어있다.

 

같이 구매한 125kHz, 13.56MHz 태그들.

 

사용 방법은 영상으로 확인하자.

 

 

ISO/IEC 14443 Type A 규격의 태그라도 위 영상의 방법으로 복사 되지 않는 경우가 있다. (NFC라는 설명이 붙은 태그) Google Play Store에서 MIFARE Classic Tool을 설치하고 WRITE TAG를 선택한다.

 

Clone UID - OPEN THE CLONE UID TOOL을 선택한다.

 

원본 태그를 스캔하면 자동으로 UID가 입력된다. GENERATE BLOCK 0 AND CLONE UID 버튼을 누른다.

 

Waiting for magic tag(2nd gen) 메세지가 나오면 복사될 태그를 스캔한다.

 

 

복사가 완료되면 검증을 위해 다시 스캔한다.

 

문제없이 복사되었다면 Successfully cloned UID 메세지가 나오고 복사 과정이 다시 진행된다.

 

반응형
Posted by J-sean
: