본문 바로가기

[ Program ]197

keyboard hooking keyhook class public class KeyHook { [DllImport("user32.dll")] static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc callback, IntPtr hInstance, uint threadId); [DllImport("user32.dll")] static extern bool UnhookWindowsHookEx(IntPtr hInstance); [DllImport("user32.dll")] static extern IntPtr CallNextHookEx(IntPtr idHook, int nCode, int wParam, IntPtr lParam); [DllImport("kernel32.. 2023. 9. 19.
[ Unity ] UI버튼 추가하는법 위와같이 해주면 작업영역에 UI 영역이 겹쳐서 정상적인상태로 보이게 된다. 2022. 12. 30.
[c#] 현재값과 가장 작으면서 근접하는 5의 배수 가져오기 int tempint = 27; double result = 0; if (tempint % 5 != 0) { result = Math.Floor(double.Parse(tempint.ToString()) / 5) * 5; } MessageBox.Show(result.ToString()); 5로나눠서 소수점을 버리고 다시 5를 곱하면된다. 2022. 11. 11.
[c#] Nlog 사용법 c# 에서 nlog 사용법을 올린다. ( https://nlog-project.org/ ) nuget 에서 nlog 검색해서 설치하면 되는데 설치하기 귀찬은사람은 첨부 파일을 받아서 참조만 추가해주면된다. 현재 최신버전인 5.0.4 버전이다. 참조된후 아래 코드로 테스트 해보자. 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 8.. 2022. 9. 23.
윈도우 실행파일 구조(PE파일) 출처 - https://rninche01.tistory.com/m/84 1. 윈도우 실행파일(PE파일) 개요 1.1 PE파일이란? PE(Portable Executable)파일은 윈도우 실행파일이라고 부르며 윈도우OS에서 사용되는 실행파일형식을 의미하며 UNIX의 COFF(Common Object File Format)을 기반으로 만들어졌다. windows 환경에 따라 다르게 부르는데 32bit환경에서는 PE32, 64bit환경에서는 PE+또는 PE32+라고 불린다. Linux나 Unix와 같은 계열의 환경에서는 PE파일과 비슷한 형식으로 ELF(Executable and Linkable Format)파일이 존재한다. PE파일을 통해서 프로그램이 사용하는 API 또는 DLL 등 다양한 정보와 어느 메모리.. 2022. 8. 26.
dll, exe 파일 비트 수 확인 하는 방법 https://www.extrabit.com/exeproperties/download 2022. 8. 22.
62.네트워크프로그램 피씨끼리 데이터 주고 받는 방법을 알아보자. 일단 용어를 몇가지 알아야 한다. * 엔드 포인트 - 아이피 주소와 포트 번호의 조합을 의미합니다. * 소켓 - 네트워크 상에서 돌아가는 두 개의 프로그램 간 양방향 통신의 하나의 엔트 포인트 아이피주소는 흔히 생각하는 192.168.1.1 처럼 숫자로 만들어진 PC 의 주소이고, 포트는 각 피씨에 연결할수 있게 만들어진 숫자로 된 가상의 연결 구멍이라고 생각하면 된다. 참고로 그림1처럼 제어판 에서 방화벽을 들어가서 고급설정을 누르면 피씨가 사용중인 포트가 나온다. 각 프로토콜에 따른 기본 포트는 HTTP=80, FTP=21, TELNET=23, SSH=22, SMTP=25, POP3=110 이다. 대부분 저 포트들은 사용중인 포트라고 생각하면 되고 테스트등.. 2022. 5. 20.
61. 이벤트 이전에 델리게이트를 배웠는데 델리게이트와 동일한 이벤트 라는것도 있다. 앞장들에서 배운 델리게이트는 파라미터용으로 주로 설명했고 이번에 이벤트는 서로 데이터를 주고받는데 최적화 된 내용으로 살펴보자. 이벤트와 델리게이트 차이점을 찾아보면 여러글들이 있는데 설명이 신통치않다. 이래저래 내용을 찾아보다보면 결국 같은거라는 생각이 드는데 아래 글에서 이야기한 내용을 한번 읽어보자. https://www.sysnet.pe.kr/Default.aspx?mode=3&sub=0&pageno=0&detail=1&wid=5375 이벤트와 델리게이트의 차이가 궁금합니다. 이벤트와 델리게이트의 차이가 궁금합니다. [링크 복사], [링크+제목 복사] 조회: 3477 글쓴 사람 영귤 홈페이지 첨부 파일 부모글 보이기/감추기 C.. 2022. 5. 18.
60. 유저컨트롤 유저컨트롤은 사용자가 임의로 만들어서 사용하는 컨트롤이다. 로또 추첨기를 생각 해보자. 숫자가 1~45까지 순차적으로 증가한 후 랜덤 숫자로 최종 결정 되는식으로 6개의 숫자를 출력해주는 프로그램이 있다고 생각해보자. 그러면 6개의 컨트롤을 다 만들어 줄 필요없이 1~45까지 순차적으로 증가한후 랜덤 숫자로 최종 결정되는 컨트롤이 있다면 그 컨트롤을 복사해서 사용해주면 훨씬 편할것이다. 간단하게 만들면서 이해해 보자. 그림1처럼 컨트롤 라이브러리를 선택해서 프로젝트를 만들자. (.NET Framework) 확인. 최초 생성하면 그림2와 같은 화면으로 나올것이다. 중앙의 회색부분이 내가만들컨트롤 크기이다. 그림3과 같이 좌측의 도구상자에서 label 을 드래그 해서 중앙에 놔주고 컨트롤의 크기를 적당히 조.. 2022. 5. 17.
59. lock / Monitor / Mutex 앞장마지막 예제에 잠시 Monitor 클래스를 사용하는 예제를 넣었다. 3가지다 간단하게 말하면 다른곳에서 변경못하게 잠궈놓는 역할을 하는것들이다. 아래 예제를 보자. 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 #define lock1 #define type2 using System; using S.. 2022. 5. 11.
58. Threadpool / BackgroundWorker / Parallel Thread 와 task 를 주로 설명하고 있는데 Threadpool 이라는 클래스로 쓰레드를 다룰수도 있다. 아래글을 먼저 읽어보자. https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=hyungjoon_&logNo=221700870194 Thread vs ThreadPool vs Task 닷넷 C# 마이크로소프트 .net framework는 동시성을 다루기 위한 3가지 방법이 있다. 1. 스레드(Thread) 에 직접접... blog.naver.com 다른블로그들에서도 거의 task 를 추천하는 사람이 많고 내생각도 비슷하다. 개인적으로는 Thread 자체를 쓰는것도 나쁘지는 않다고 생각한다. 하지만 Threadpool 클래스는 사.. 2022. 5. 11.
57. async / await async 와 await 에 대해서 찾아보면 대부분의 포스터 들은 비동기를 위한 키워드라고 적어놨다. 그런데 잘생각해보면 비동기보다는 부분적으로 동기하기 위한 키워드가 더 맞는 표현이라고 생각한다. [예제소스] 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 9.. 2022. 3. 29.
네트워크 연결확인방법 > using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApp13 { public partial class connectcheck : Form { public connectcheck() { InitializeComponent(); } private void button1_C.. 2022. 3. 20.
56. 쓰레드2(Task) 앞장들에서 배운 Thread 외에도 비교적 최근에 만들어진 Task 클래스로도 멀티쓰레드 프로그램을 만들수 있다. 둘의 차이점은 thread 는 비교적 큰 작업에 사용하고 메인프로세스가 종료되어도 계속 작동하고 , Task 는 비교적 작은 작업에 사용하고 메인 프로그세스가 종료되면 같이 종료 된다 라고 대부분의 글에 되어있다. 개인적으로는 어떤걸 써도 편하고 실수 덜 할만한걸로 사용하는게 좋다고 생각한다. 쓰레드와 태스크는 위에서 말한거 외에도 좀 다른점이 있긴하다. 그림1과 그림2를 비교해보면 그림2가 확실히 자원을 덜 먹는것을 알수 있다. 위쪽은 대량의 쓰레드를 생성하는것이고 아래쪽은 같은작업을 태스크로 한것인데 , 일단 예제부터가 사실 말이 안되긴한다. 프로그램에서 저정도의 쓰레드를 돌릴경우가 과연.. 2022. 2. 27.
55. Action/Func Action 과 Func 를 알아보기전에 지난 부분 잠시 복습을 해보자. 그림1을 보면 바로 지난장에서 학습하던내용이다. 그런데 델리게이트를 꾸준히 선언해줘야 해서 상당히 불편하다. delegate void tempdel(string str); delegate string tempdel2(string str); 선언까지 없애고 그냥 사용하면 되지 않을까 그래서 MS 에서 미리 델리게이트를 선언해놨다. 그림2를 보자. 일단 Action 을 입력하면 두가지 사용가능한 형태가 보인다. 둘다 미리정의된 델리게이트이며 각각 설명이 나와있다. 일단 Action 은 void 반환에 파라미터가 없는 델리게이트 이다. 그리고 아래에 있는 제네릭 형태의 Action 은 파라미터를 받고 void 를 반환하는 형태다. voi.. 2022. 2. 22.
54. 람다식 앞장에서 무명메서드를 통해 델리게이트를 간단히 사용하는 방법을 알아 봤다. 람다식이란것을 사용하면 더 축약이 가능하다. 그런데 이렇게 줄이는것에 대한 단점도 분명히 있다. 디버깅시 소스가 실행되는 경로를 따라가기가 힘들어진다. 일단 쓰레드 자체가 디버깅도 힘든상태인데 소스가 계속 축약되다보니 나중에 다른사람이 소스를 받거나 현장에서 즉대응해야할경우 아무래도 기본소스보다 디버깅/수정 속도가 느려지게 된다. 일단 람다식 형식부터 알아보자. 대리자타입 변수명 = (파라미터) => 함수코드 기본형태는 이런데 실제 소스코드로 확인해보자. 그림1은 이제까지 진행하던 내용까지 합쳐서 테스트해놓은 내용이다. 여기서 하나씩 살펴보자. #if del1 //기본델리게이트 호출 tempdel td = new tempdel(t.. 2022. 2. 17.
53. 무명메서드 앞장에서 델리게이트를 잠시 살펴봤으니 다시 쓰레드로 넘어가보자. 그림1을 보고 잠시 생각해보자. Thread 를 사용하기 위해 객체로 만들면 파라미터로 ThreadStart 나 ParameterizedThreadStart 를 요구한다. 둘다 객체로 만들어서 파라미터로 넘기면 되는데 마우스를 올려보면 둘다 델리게이트 인것을 알수 있다. ParameterizedThreadStart 같은경우는 void 형(반환이 없는형태) 이고 object 를 인자로 받는 함수를 대리호출해주는 델리게이트 이다. ThreadStart 같은경우는 void형에 파라미터가 없는 함수를 대리호출해주는 델리게이트이다. 이렇게 쓰레드를 사용하기위해서는 델리게이트가 뭔지 알아야 한다. 결국 그림1 소스 같은경우는 쓰레드를 실행하는데 그쓰레.. 2022. 2. 8.
52. 델리게이트 앞에서 쓰레드의 가장기본적인 형태를 배웠다. 그런데 이쓰레드들을 사용할때 추가적으로 알아야 할것들이 많다. 일단 델리게이트부터 살펴보자. 델리게이트는 함수를 대신 호출해주는것 이라고 생각하면 된다. 함수를 직접호출하면 되지 왜 대신 호출하는게 필요할까 생각할 수 있다. 대부분의 경우 디커플링때문에 필요하다. 잘이해하기 힘든데 우리가 매번사용하는 버튼클릭이벤트를 한번생각해보자. 이벤트는 델리게이트를 랩핑한 클래스인데 일단 델리게이트와 이벤트는 같다고 생각하고 흐름을 따라가보자. 그림1은 우리가 자주 사용하는 기본 버튼클릭형태의 소스이다. 저기서 button1_Click 를 우클릭해서 모든참조찾기를 눌러보자. 그러면 그림1의 아래 부분에 있는 내용이 나온다. 저기서 this.button1.Click += n.. 2022. 2. 5.
51. 쓰레드1(Thread) 피씨는 한번에 여러일을 하는거처럼 사용할 수 있다. 예를 들면 노래를 들으면서 인터넷서핑을 하거나 파일을 다운로드 받으면서 영상을 보거나 하는것들이 있을수 있다. 이렇게 여러가지 작업들을 동시에 수행하는것은 실제로 여러가지를 한번에 동시에 수행하는것이 아니라 하나를 잠시작업하고 아주짧은시간뒤에 다른걸 또 작업하고 이렇게 여러개를 조금씩 계속 실행하는것이다. 다시 설명하면 한 가지 일을 하다가, 잠시 멈추고 또 다른 일을 하고, 또 멈추고 다른 일을 하다 보면 언젠가는 결국 모든 일을 마치게 된다. 이 동작이 엄청 빨라지면 한 번에 여러가지 일을 하는 것처럼 보이게 되는 것이다. 이작업을 멀티태스킹이라고 하는데 쓰레드는 다른작업을 시작하게 해주는 역할을 한다. 아래 그림을 보자. 그림1을 보면 메인작업 진.. 2022. 2. 4.
50. 전처리기 / 편의사항 전처리기는 내가 소스를 만들면서 테스트하거나 소스를 편하게 보거나 편의성을 만들수있는 코드이다. 일단 아래 경로를 한번 읽어보자. https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/preprocessor-directives C# 전처리기 지시문 조건부 컴파일, 경고, null 허용 분석 등을 제어하는 다양한 C# 전처리기 지시문을 알아봅니다. docs.microsoft.com 여러가지 내용이 있는데 개인적으로 사용하는것 3가지 정도 밖에없다. 영역정의 , 기호정의 , 조건부컴파일 이정도가 되겠다. 우리가 프로그램을 계속 추가하고 하다보면 당연히 소스코드가 엄청 길어진다. 그런데 일일 내리면서 다보는게 쉽지는 않다. 그래서 디버깅이 힘들어.. 2021. 10. 29.
49. 디버깅 프로그램을 하면서 한번에 코드가 완벽하게 작동하게 만들기는 거의 불가능하다. 물론 간단한 출력프로그램 같은 경우는 그럴일이 없겠지만 대부분의 경우 디버깅이 필요하다. 일단 기본적인 디버깅 방법을 알아보자. 먼저 그림1에서처럼 위쪽 솔로션 구성이 Debug 상태인지 확인한다. 그후 아래 디버그해서 확인할 라인의 앞쪽부분(빨간색동그라미) 를 클릭하면 빨간색 원이 생긴다. 혹은 디버그할 라인을 선택하고 F9 를 누르면 (기본설정일경우) 클릭한것과 마찬가지로 빨간색 원이 생긴다. 빨간색원을 브레이크포인트라고 부르는데 브레이크 포인트는 설정되는 위치가 있고 안되는 위치가 있다. 예를 들면 위그림같은경우 35라인에 브레이크 포인트를 찍으면 거기찍히지 않고 중괄호가 시작되는 36라인에 브레이크 포인트가 찍히게 된다... 2021. 10. 9.
48. 계산기 만들기 ***숙제 : 그림1과 같은 기능을 가지고 있는 계산기를 만들어 보자. 2021. 10. 9.
47. 유즈케이스 모든 프로그램을 만들때는 과정이 단순하지는 않다. 보통 어떤 동작을 해야하는지 파악하고 해당 동작에 대해 이상없이 작동할수 있게 정리한후 해당 프로그램을 제작한다. 최종적으로 같은동작을 하더라도 사람마다 충분히 다르게 생각할수 있고 다른형태로 구성할수 있다. 그리고 같은사람이 같은 행동을 하는 프로그램을 만들더라도 매번 다른형태로 만들수도 있다. 프로그램이 간단해서 잠깐의 시간동안 제작가능한거라면 위의 생각하는 전체 과정을 머리속에 생각하면서 할수 있을것이다. 그런데 만약 프로그램이 하루만에 불가능하고 오래 걸린다면 내 머리속의 전체 과정을 계속 같은형태로 유지할수 있을까? 물론 다 기억할수도 있겠지만 간단하게 기록해두거나 하면 그 기록을 보면서 제작의 일관성을 높일수도 있고 생각하지못해 빠뜨린부분도 체.. 2021. 10. 9.
46. 엑셀파일읽기 ***숙제 : 위그림처럼 엑셀파일경로를 지정해서 내용을 읽어오는 프로그램을 만들어보자. 2021. 10. 9.
45. 파일읽기/쓰기 파일을 읽고 쓸려면 File 클래스를 사용하면 된다. https://docs.microsoft.com/ko-kr/dotnet/api/system.io.file?view=net-5.0 File 클래스 (System.IO) 단일 파일에 대한 만들기, 복사, 삭제, 이동 및 열기를 위한 정적 메서드를 제공하고 FileStream 개체 만들기를 지원합니다.Provides static methods for the creation, copying, deletion, moving, and opening of a single file docs.microsoft.com 기본적인 내용은 위 경로를 읽어보자. 파일이나 DB 또는 네트워크로 데이터를 전송할때 대부분의 경우 내용을 변환해서 서로 주고 받게 되는데 이과정에서 데.. 2021. 10. 9.
44. 로또생성기만들기 ***숙제 : 위그림처럼 번호받기 누르면 번호와 보너스 번호가 출력되는 로또생성기를 만들어보자. 2021. 10. 9.
43. 제네릭 제네릭은 한마디로 이야기하면 배열을 어떤형식으로 사용할지 미리 정해주는것이다. 프로그램에서 형변환은 자원을 많이 먹는 작업이다. 예를 들면 int > object > int 로 형변환을 차례로 한다고 치면 상당히 쓸모없는작업이 많아진다. 이전에 잠시 설명했지만 arrayList 에 인자를 추가하면 어떤값이든 object 로 변환해서 들어가진다. 그상태에서 사용할때는 해당형식으로 또 변환을 해줘야한다. 특별한 근거없이 생각해봐도 아무 쓸모없는행동이 많아진다. 가장기본적인 형식중 하나인 List 예제를 보자. List 변수 = new List(); 위와같이 지정하고 쓰기만 하면된다. 타입에는 내가 해당 List 에서 사용할 실제 타입을 넣어주면 된다. 예를들면 int , string, 개인이 만든클래스 , .. 2021. 10. 9.
42. 상속 상속은 쉽게 생각하면 진짜 말그대로의 의미이다. 부모클래스를 그대로 받아온다. 간단히 몇가지 형태를 알아보자. 그림0에 몇가지 기본형태에 대한 예제를 올려놨다. 일단 parent_class0 과 chile_class0 은 완전히 서로 다른 클래스이다. 다만 상속을 받아서 편의상 부모클래스와 자식 클래스라고 불렀으니 해당 단어에 너무 집착하지는 말고 예제를 보자. 기본적으로 생각하면 child_class0 은 parent_class0 을 상속 받았으니 자식클래스인 child_class0 에서는 부모클래스인 parent_class0 의 모든메서드(함수)를 사용가능하다. 위 내용을 기본으로 load 에서 객체로 만든 한줄씩 살펴보자. (load 는 프로그램이 시작되자마자 실행됨을뜻한다. 디자이너에 있는 For.. 2021. 10. 9.
41.arraylist / List / StringBuilder / 참조추가법 이제까지 배운내에서 배열은 꼭 필요하지만 상당히 불편한 존재였다. 아니 다른걸 배우지 않으면 불편하다고 느끼지 못했을지도 모르겠다. 기존의 배열은 항상 길이를 정해두거나 초기화 할때 값을 넣어줘야했다. 그런데 만약 값이 몇개가 들어갈지 모르는 상황이 온다면 어떻게 해야할까? 당연히 프로그램을 하다보면 그런상황이 수도없이 발생한다. 예를 들면 소수(1과 자신만을 약수로 가지는수) 의 개수를 1000이내에서 구하는 배열을 만들려면 길이를 몇개로 해야할까? 외우고 있는 사람아니면 보통사람은 알수 없다. 그래서 동적으로 할당할수 있는 배열이 있다. 다음예제를 보자. ArrayList myAL = new ArrayList(); myAL.Add("Hello"); myAL.Add(1); myAL.Add(false);.. 2021. 10. 9.
40.using/garbage collection 우리가 클래스 객체를 생성할때 new 를 사용하여 객체를 생성했다. 그런데 객체를 계속 생성하기만 하면 어떻게 될까 라고 생각해볼수 있다. pc의 메모리는 유한하기때문에 계속객체를 생성하기만 하면 메모리에 수많은 객체가 올라갈것이고 결국 피씨는 다운되거나 제기능을 할수 없을것이다. 그래서 c# 이나 자바에서는 가비지 컬렉션이라는 기능이 있다. 쉽게 생각하면 자동으로 사용하지않는객체를 없애주고 메모리를 청소해주는 기능이라고 생각하면된다. 이 가비지 컬렉션에 대해서는 인터넷에 찾아보면 다양한 의견들이 있고 이야기가 있는데 전체적으로 보면 임의로 호출하는데 상당히 부정적인것을 알수 있다. 결국 알아서 잘하니 임의로 가비지 컬렉션을 하지말고 놔두면 프로그램에 가장좋다고들 이야기한다. 그런데 개인적으로 얼마전 어.. 2021. 10. 9.