티스토리 뷰
======================================================
안녕하세요 Doridori 입니다.
이래 저래 힘든 시기를 보내고 있지만 세상 살면서 언제는 안힘들었나 싶기도 해서 열심히 생활하고 있습니다.
뭔가 새로운 것을 해봐야 하나 싶기도 하지만 일단 지금 진행 하고 있는 것들은 마무리를 하는것이
남자다잉!! 이라는 느낌으로 진행 하고 있습니다. !!
다들 화이팅이시고 도움이 되는 부분이 있으셨으면 좋겠습니다.
======================================================
40. User32.dll (2) (Copy&Paste)
Source UI) (지난 강의 참고 - Evnet 부분은 새로 등록해야 할 수 있습니다.)
Soruce 전체) Study_40_User32.dll 2 (Copy&Paste).zip
교재) 40. User32.dll 2 (Copy&Paste).pdf
지난 번에 Keyboard Hook에 대한 내용을 진행 했는데 아무래도 지난 번에 구현 한부분만 보면 그다지 프로그램 같이 생기지도 않았고 실제로 사용하기에도 불편함이 많습니다.
그래서 보통 코어 로직 부분을 확인 한뒤에는 살을 붙이는 작업을 진행 하는데 그 부분들을 진행 해 보려고 합니다.
내가 만드는 프로그램이 그럴듯한 모양이 되는걸 보는 기분은 항상 좋은 것 같습니다. ^^
진행 하다가 조금 더 그럴듯한 모양을 내기 위해서 예전에 32강에서 사용 했던 Title Bar 사용하는 부분을 가져다 쓰려고 했는데 세월이 변하면서 약간 변경 된 부분이 있어서 추가 하였습니다.
이래서 개발자들은 평생 새로 배워야 한다고 하나 봅니다. ㅜㅠ 으아아아악!!!
(UI)
화면을 보시면 그래도 지난번에 비해서 모양새가 많이 좋아졌다 싶은 느낌입니다. ^^;;
강의)
Source)
지난번에 사용 했던 KeyboardHook Class는 포함 시키지 않았습니다. (이전강의에서 확인해 주시면 될 것 같습니다.)
Main Form)
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 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 | using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Globalization; using System.Linq; using System.Reflection; using System.Runtime.InteropServices; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace CopyAndPaste { public partial class Form1 : Form { CGlobalKeyboardHook _kbdHook = new CGlobalKeyboardHook(); public Form1() { InitializeComponent(); } private void Form1_Load(object sender, System.EventArgs e) { Version oVersion = Assembly.GetEntryAssembly().GetName().Version; this.Text = string.Format("{0} Ver.{1}.{2} / Build Time ({3})", "Copy&Paste", oVersion.Major, oVersion.Minor, GetBuildDataTime(oVersion)); _kbdHook.hook(); _kbdHook.KeyDown += _kbdHook_KeyDown; } // Build Time을 변환 public DateTime GetBuildDataTime(Version oVersion) { string strVerstion = oVersion.ToString(); // 날짜 등록 int iDays = Convert.ToInt32(strVerstion.Split('.')[2]); DateTime refData = new DateTime(2000, 1, 1); DateTime dtBuildDate = refData.AddDays(iDays); // 초 등록 int iSeconds = Convert.ToInt32(strVerstion.Split('.')[3]); iSeconds = iSeconds * 2; dtBuildDate = dtBuildDate.AddSeconds(iSeconds); // 시차 조정 DaylightTime daylighttime = TimeZone.CurrentTimeZone.GetDaylightChanges(dtBuildDate.Year); if (TimeZone.IsDaylightSavingTime(dtBuildDate, daylighttime)) { dtBuildDate = dtBuildDate.Add(daylighttime.Delta); } return dtBuildDate; } // 키보드 후킹 중 Key Down이 발생 했을 때 private void _kbdHook_KeyDown(object sender, KeyEventArgs e) { if (e.Control && e.KeyCode == Keys.C && cboxactivation.Checked) { Thread.Sleep(400); lboxTextSave.Items.Add(Clipboard.GetData(System.Windows.Forms.DataFormats.UnicodeText).ToString()); } } // ListBox 선택 된 Index가 변경 되었을 때 private void LboxTestSave_SelectedIndexChanged(object sender, System.EventArgs e) { if (lboxTextSave.SelectedIndex != -1) { Clipboard.SetData(System.Windows.Forms.DataFormats.UnicodeText, lboxTextSave.SelectedItem.ToString()); } } // TrackBar의 Scroll이 변경 되었을 때 private void tBar_Scroll_Change(object sender, EventArgs e) { this.Opacity = tBar.Value / 10.0; } // Button을 Click 했을 때 private void btnAdd(object sender, EventArgs e) { DataSave(); } // TextBox가 선택 된 상태에서 keyDown이 발생 했을 때 private void tbox_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { DataSave(); } } // ListBox에 TextBox의 글자를 등록하기 위한 함수 private void DataSave() { string strText = txtlbtextadd.Text; if (!String.IsNullOrEmpty(strText) && !lboxTextSave.Items.Contains(strText)) { lboxTextSave.Items.Add(strText); txtlbtextadd.Text = ""; } } // CheckBox Check Change private void cbox_Change(object sender, EventArgs e) { if (cboxactivation.Checked) { lblactivation.Text = "활성화 상태(Ctrl + C 가능)"; lblactivation.Enabled = true; txtlbtextadd.Enabled = true; btnlbtextadd.Enabled = true; } else { lblactivation.Text = "비 활성화 상태(붙여넣기만 가능)"; lblactivation.Enabled = false; txtlbtextadd.Enabled = false; btnlbtextadd.Enabled = false; } } // ListBox KeyDown Event private void lbox_keyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Delete) { if (lboxTextSave.SelectedItems.Count > 0) lboxTextSave.Items.RemoveAt(lboxTextSave.SelectedIndex); } } } } | cs |
'C# > C# 강좌 Winform' 카테고리의 다른 글
Doridori C# 강의 2) 42. List 조금 더 알기 (2) | 2020.03.08 |
---|---|
Doridori C# 강의 2) 41. User32.dll (3) (Menu Control) (0) | 2020.02.23 |
Doridori C# 강의 2) 39. User32.dll (Keyboard Hook) (4) | 2020.01.27 |
Doridori C# 강의 2) 38. Lock (8) | 2019.11.27 |
Doridori C# 강의 2) 37. 재귀 함수 (Recursion Function) (6) | 2019.11.14 |
- Total
- Today
- Yesterday
- 프로그램 강의
- C# 기초 강의
- Visual Studio
- C#
- C# 강의
- 소주
- 게임
- 가볼만한 곳
- 와인
- 위스키
- 증류주
- 도리도리
- 아이랑
- 서울
- 주말
- 광저우
- 막걸리
- C# 강좌
- 술
- 맛집
- 도리도리 C#
- 모바일
- 가볼만한곳
- 하이볼
- 보드카
- 나들이
- 전통주
- 맥주
- WinForm
- 칵테일
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |