티스토리 뷰

======================================================

안녕하세요 Doridori 입니다.


빰빠라밤!!! 


2년만에 드디어 유튜브 구독자분들이 1000명이 넘었습니다.!!!


2년이나 했는데 1000명이냐 라고 하실 수도 있겠지만 한분한분 댓글을 남겨 주시는 분들 때문에 중간중간 힘든 일들이 있었지만 


지금 까지 이어 올 수 있지 않았나 싶습니다.!!


요즘도 쉬운 시기는 아니어서 예제에 대해 아쉬운 마음이 가득하지만 처음 준비 할 때 생각 했던 마음 그대로 


새로운 기능 한가지 이상, 기존에 했던 부분들은 최대한 복습 가능 하도록 준비 하겠습니다.


모두들 화이팅 이십니다.!!!

======================================================


41. User32.dll (3) (Menu Control)

 

 

Source UI) (지난 강의 참고)

Soruce 전체) Study_41_User32.dll 3 (Menu Control).zip

교재) 41. User32.dll 3 (Menu Control).pdf







이번 강의까지 해서 User32.Dll로 부터 시작한 Copy And Paste Program 만들기가 마무리 됩니다.~! 


연재 강의 같은 경우는 중간에 보시는 분들이 유입되기 어렵기 때문에 더 쉽지 않은 부분 같습니다. 


개인적으로 Copy and Paste 라는 Program을 만드는 부분을 Main으로 하고 3가지 주제를 가지고 진행 해보았습니다. 


1. User32.DLL을 가지고 Keyboard Hook 진행 하기


2. 프로그램을 혼자서 만들어 보는 과정을 진행해 보기


3. UI Control 중 Window 관련된 Control 확인 하기 (Menu 기능 사용 하기)


정도로 진행 한것 같습니다. 


정말 간단한 프로그램 이기는 하지만 기능을 Test 하기 위한 예제가 아니고 사용 하기 위한 Program이기 때문에 


만들고 사용해 본다는것에 대해서 정말 큰 의미를 가질 수 있다고 생각 합니다. 


Menu Strip과 Context Menu Strip에 대해서 중점적으로 진행 해보았습니다. 




(UI)


실제로 Menu Strip 같은 경우는 이 Program에는 필요 없는 기능 이긴 하지만 Context Menu Strip와 비슷한 기능을 가지기 때문에 양쪽을 다 사용해 보기 위해서 추가 하였습니다. 


완성이후에는 Visible을 끄고 숨겨 놨습니다. ^^;;







강의)






Source)


지난번에 사용 했던 KeyboardHook Class는 포함 시키지 않았습니다. (이전강의에서 확인해 주시면 될 것 같습니다.)


Main의 경우 전체 Source를 올리는데 지난 강의와 중복되는 부분이 있기 때문에 확인 하시면 보시면 좋을듯 합니다. 

(추가된 부분만 올리려고 하다가 중간에 예외처리한 부분도 있고 해서 Main 전체를 올렸습니다.)


개인적인 생각으로 몇줄 안되는 코드를 가지고 그럴듯한 모양새를 낼 수 있는거 보면 뭔가 기분이 좋아지는것 같습니다. ^^;;



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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Globalization;
using System.IO;
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));
 
            //GetBuildDataTime(oVersion);
 
            _kbdHook.hook();
            _kbdHook.KeyDown += _kbdHook_KeyDown;
 
        }
 
        public DateTime GetBuildDataTime(Version oVersion)
        {
            string strVerstion = oVersion.ToString();
 
            // 날짜 등록
            int iDays = Convert.ToInt32(strVerstion.Split('.')[2]);
            DateTime refData = new DateTime(200011);
            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;
        }
 
 
        private void _kbdHook_KeyDown(object sender, KeyEventArgs e)
        {
            try
            {
                if (e.Control && e.KeyCode == Keys.C)
                {
                    Thread.Sleep(400);
 
                    lboxTextSave.Items.Add(Clipboard.GetData(System.Windows.Forms.DataFormats.UnicodeText).ToString());
                }
            }
            catch (Exception)
            {
 
 
            }
        }
 
        private void LboxTestSave_SelectedIndexChanged(object sender, System.EventArgs e)
        {
            if (lboxTextSave.SelectedIndex != -1)
            {
                Clipboard.SetData(System.Windows.Forms.DataFormats.UnicodeText, lboxTextSave.SelectedItem.ToString());
            }
        }
 
        private void Scroll_Change(object sender, EventArgs e)
        {
            this.Opacity = TBar.Value / 10.0;
        }
 
        private void cboxChange(object sender, EventArgs e)
        {
            if (cboxactivation.Checked == true)
            {
                //_bcboxactivation = true;
 
                lblactivation.Text = "활성화 상태(Ctrl + C 가능)";
                lblactivation.Enabled = true;
 
                txtlbtextadd.Enabled = true;
                btnlbtextadd.Enabled = true;
            }
            else
            {
                //_bcboxactivation = false;
 
                lblactivation.Text = "비 활성화(붙여넣기만 가능)";
                lblactivation.Enabled = false;
 
                txtlbtextadd.Enabled = false;
                btnlbtextadd.Enabled = false;
            }
        }
 
        private void btn_AddClick(object sender, EventArgs e)
        {
            TEST();
        }
 
        private void txtlbtextadd_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                TEST();
 
                //btn_AddClick(this, null);
            }
        }
 
 
        private void TEST()
        {
            string strText = txtlbtextadd.Text;
 
            if (strText != "" && !lboxTextSave.Items.Contains(strText))
            {
                lboxTextSave.Items.Add(strText);
                txtlbtextadd.Text = "";
 
            }
        }
 
        private void lboxKeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Delete)
            {
                if (lboxTextSave.SelectedItems.Count > 0)
                    lboxTextSave.Items.RemoveAt(lboxTextSave.SelectedIndex);
            }
        }
 
        #region MStrip
 
        private void 저장하기ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            fFileSave();
        }
 
        private void 불러오기ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            fFileLoad();
        }
 
        private void 프ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            fEmptyDelete();
        }
 
        private void 모두삭제ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            fAllDelete();
        }
 
        private void 프로그램정보ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            fProgramInfo();
        }
 
 
        #endregion
 
 
        #region CMStrip
 
        private void 공백제거ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            fEmptyDelete();
        }
 
        private void 모두삭제ToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            fAllDelete();
        }
 
        private void 저장하기ToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            fFileSave();
        }
 
        private void 불러오기ToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            fFileLoad();
        }
 
        private void 프로그램정보ToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            fProgramInfo();
        }
 
        #endregion
 
 
        #region Event Function
 
        /// <summary>
        /// 공백제거용 함수
        /// </summary>
        private void fEmptyDelete()
        {
            int iCount = lboxTextSave.Items.Count;
 
            for (int i = 0; i < iCount; i++)
            {
                lboxTextSave.Items[i] = lboxTextSave.Items[i].ToString().Trim();
            }
        }
 
 
        /// <summary>
        /// 모두삭제용 함수
        /// </summary>
        private void fAllDelete()
        {
            if(DialogResult.Yes == MessageBox.Show("등록되어 있는 Data를 초기화 합니다.""ListBox Item Clear", MessageBoxButtons.YesNo))
            {
                lboxTextSave.Items.Clear();
            }
        }
 
 
        /// <summary>
        /// 저장하기용 함수
        /// </summary>
        private void fFileSave()
        {
            SaveFileDialog SFDialog = new SaveFileDialog();
 
            int ilbCount = lboxTextSave.Items.Count;
            string strFilePath = string.Empty;
 
            SFDialog.InitialDirectory = Application.StartupPath;
            SFDialog.FileName = "*.txt";
            SFDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
 
            try
            {
                if (SFDialog.ShowDialog() == DialogResult.OK)
                {
                    strFilePath = SFDialog.FileName;
                    StreamWriter swSFDialog = new StreamWriter(strFilePath);
 
                    for (int i = 0; i < ilbCount; i++)
                    {
                        swSFDialog.WriteLine(lboxTextSave.Items[i].ToString());
                    }
                    swSFDialog.Close();
                    MessageBox.Show("저장이 완료 되었습니다.");
                }
            }
            catch
            {
            }
 
        }
 
 
        /// <summary>
        /// 불러오기용 함수
        /// </summary>
        private void fFileLoad()
        {
            OpenFileDialog OFDialog = new OpenFileDialog();
 
            string strFilePath = string.Empty;
 
            OFDialog.InitialDirectory = Application.StartupPath;
            OFDialog.FileName = "*.txt";
            OFDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
 
            try
            {
                if (OFDialog.ShowDialog() == DialogResult.OK)
                {
                    strFilePath = OFDialog.FileName;
                    StreamReader srOFDialog = new StreamReader(strFilePath, Encoding.UTF8, true);
 
                    while (srOFDialog.EndOfStream == false)
                    {
                        lboxTextSave.Items.Add(srOFDialog.ReadLine());                        
                    }
                }
            }
            catch
            {
            }
        }
 
 
        /// <summary>
        /// 프로그램 정보 함수
        /// </summary>
        private void fProgramInfo()
        {
            string strProgramInfo = "반복작업을 조금이나마 수월하게!!! CNP!!!";
            MessageBox.Show(strProgramInfo);
        }
 
        #endregion
 
    }
}
 
cs







댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함