https://github.com/BerndK/SvgToXaml

// 2020 년 의 2월 일수를 가져옵니다. (결과:29)

int days = DateTime.DaysInMonth(2020, 2);

배경에 따라서 글자가 잘보이게 하기 위해

색을 흰색이나 검은색으로 지정하게 되는데

자동으로 글자색을 지정할수 있도록 하는 코드입니다.

 

 

        public TestForm()

        {

            InitializeComponent();

 

            Color backColor = Color.Blue;

 

            bool isBlack = .222 * backColor.R + .707 * backColor.G + .071 * backColor.B > 128;

 

            Color fontColor = isBlack ? Color.Black : Color.White;

 

            this.BackColor = backColor;

            this.colorLabel.ForeColor = fontColor;

        }

 

 

 

사진의 날짜 정보를 이용하여 해당 사진이 최신에 찍혔는지 여부를

알아내야 할 일이 있어서 코드를 찾아봤고 코드는 아래와 같습니다.

참고로 날짜 이외에 정보도 알아낼수 있습니다. (BitmapMetadata)

 

* 참조를 추가해야함(어셈블리에서 PresentationCore, WindowsBase 추가)

 

 

using System;

using System.IO;

using System.Windows.Forms;

using System.Windows.Media.Imaging;

 

namespace WindowsFormsApp

{

    public partial class TestForm : Form

    {

        public TestForm()

        {

            InitializeComponent();

 

            string fileName = "";

 

            // 선택된 파일의 FileStream 을 생성합니다.

            using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read))

            {

                // 선택된 파일의 FileStream 를 활용하여 BitmapSource 를 생성합니다.

                BitmapSource img = BitmapFrame.Create(fs);

 

                // BitmapSource 의 Metadata 정보를 가져옵니다.

                BitmapMetadata md = (BitmapMetadata)img.Metadata;

 

                // BitmapMetadata 에서 시간 정보를 가져옵니다.

                DateTime datetime = DateTime.Parse(md.DateTaken);

            }

        }

    }

}

 

 

 

        string filePath = "그림파일위치";

 

        /// <summary>

        /// 그림판을 실행합니다.

        /// </summary>

        private void RunMSPaint()

        {

            ProcessStartInfo startInfo = new ProcessStartInfo(this.filePath);

            startInfo.Verb = "edit";

 

            Process.Start(startInfo);

        }

 

프로젝트에서 라이브러리를 참조하거나 프로젝트를 참조하게 되면

덕지덕지 dll 들이 Release 폴더에 생기는데요

이를 하나의  exe 파일로 만드는 방법입니다.

 

Nuget 에서 Costura.Fody, Fody 를 설치하고 빌드하면 끝.

(Costura.Fody 를 설치하면 Fody 는 자동으로 설치 됩니다.)

 

 

 

설치하기 전

 

 

설치 후

 

 

Newtonsoft.Json.dll 이 사라진걸 확인할 수 있습니다.

 

마우스를 후킹하는 방법

 

Nuget 에서 MouseKeyHook 를 설치

 

프로그램 생성자나 원하는 후킹시점에 아래 처럼 코딩

 

using System.Windows.Forms;

 

using Gma.System.MouseKeyHook;

 

namespace MouseHooking

{

    public partial class MainForm : Form

    {

        public MainForm()

        {

            InitializeComponent();

 

            Hook.GlobalEvents().MouseDown += (s, e) =>

            {

                this.hookTextBox.AppendText($"Mouse {e.Button} Down / ");

            };

 

            Hook.GlobalEvents().MouseDoubleClick += (s, e) =>

            {

                this.hookTextBox.AppendText($"Mouse {e.Button} button double clicked / ");

            };

 

            Hook.GlobalEvents().MouseWheel += (s, e) =>

            {

                this.hookTextBox.AppendText($"Mouse wheel / ");

            };

 

            Hook.GlobalEvents().MouseDragStarted += (s, e) =>

            {

                this.hookTextBox.AppendText($"Mouse drag start / ");

            };

 

            Hook.GlobalEvents().MouseDragFinished += (s, e) =>

            {

                this.hookTextBox.AppendText($"Mouse drag finish / ");

            };

        }

    }

}

 

 

프로그램을 띄우면 마우스가 어디있건 움직임을 후킹한다.

 

using System.Collections.Generic;

using System.IO;

using System.Text.RegularExpressions;

 

namespace TEST

{

    class Function

    {

        public static List<string> GetImageFiles(string directoryPath)

        {

            List<string> imageFileList = new List<string>();

 

            foreach (string fileName in Directory.GetFiles(directoryPath))

            {

                if (Regex.IsMatch(fileName, @".jpg|.png|.bmp|.JPG|.PNG|.BMP|.JPEG|.jpeg$"))

                {

                    imageFileList.Add(fileName);

                }

            }

 

            return imageFileList;

        }

    }

}

 

 

다른 프로그램의 키입력을 후킹하고 싶을 때 처리하는 코드입니다.

 

using System;

using System.Runtime.InteropServices;

using System.Windows.Forms;

 

namespace Hooking

{

    public partial class MainForm : Form

    {

        [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.dll")]

        static extern IntPtr LoadLibrary(string lpFileName);

 

        private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);

 

        const int WH_KEYBOARD_LL = 13;

        const int WM_KEYDOWN = 0x100;

 

        private IntPtr hook = IntPtr.Zero;

 

 

        public MainForm()

        {

            InitializeComponent();

 

            this.Load += MainForm_Load;

            this.FormClosing += MainForm_Closing;

        }

 

        private void SetHook()

        {

            IntPtr hInstance = LoadLibrary("User32");

 

            hook = SetWindowsHookEx(WH_KEYBOARD_LL, HookProc, hInstance, 0);

        }

 

        private void UnHook()

        {

            UnhookWindowsHookEx(hook);

        }

 

        private IntPtr HookProc(int code, IntPtr wParam, IntPtr lParam)

        {

            if (code >= 0 && wParam == (IntPtr)WM_KEYDOWN)

            {

                int vkCode = Marshal.ReadInt32(lParam);

 

                // 키 입력에 따른 처리를 추가합니다.

                if (vkCode.ToString() == "17")

                {

                    this.hookTextBox.AppendText("CTRL");

                }

                else if (vkCode.ToString() == "91")

                {

                    this.hookTextBox.AppendText("LEFT WINDOW");

                }

                else if (vkCode.ToString() == "18")

                {

                    this.hookTextBox.AppendText("ALT");

                }

                else if (vkCode.ToString() == "32")

                {

                    this.hookTextBox.AppendText("SPACE BAR");

                }

                else if (vkCode.ToString() == "92")

                {

                    this.hookTextBox.AppendText("RIGHT WINDOW");

                }

                else if (vkCode.ToString() == "93")

                {

                    this.hookTextBox.AppendText("SELECT KEY");

                }

                else if (vkCode.ToString() == "16")

                {

                    this.hookTextBox.AppendText("SHIFT");

                }

                else if (vkCode.ToString() == "20")

                {

                    this.hookTextBox.AppendText("CAPS LOCK");

                }

                else if (vkCode.ToString() == "9")

                {

                    this.hookTextBox.AppendText("TAB");

                }

                else if (vkCode.ToString() == "96")

                {

                    this.hookTextBox.AppendText("numpad 0");

                }

                else if (vkCode.ToString() == "97")

                {

                    this.hookTextBox.AppendText("numpad 1");

                }

                else if (vkCode.ToString() == "98")

                {

                    this.hookTextBox.AppendText("numpad 2");

                }

                else if (vkCode.ToString() == "99")

                {

                    this.hookTextBox.AppendText("numpad 3");

                }

                else if (vkCode.ToString() == "100")

                {

                    this.hookTextBox.AppendText("numpad 4");

                }

                else if (vkCode.ToString() == "101")

                {

                    this.hookTextBox.AppendText("numpad 5");

                }

                else if (vkCode.ToString() == "102")

                {

                    this.hookTextBox.AppendText("numpad 6");

                }

                else if (vkCode.ToString() == "103")

                {

                    this.hookTextBox.AppendText("numpad 7");

                }

                else if (vkCode.ToString() == "104")

                {

                    this.hookTextBox.AppendText("numpad 8");

                }

                else if (vkCode.ToString() == "105")

                {

                    this.hookTextBox.AppendText("numpad 9");

                }

 

                this.hookTextBox.AppendText(" | "); // 구분자

 

                return CallNextHookEx(hook, code, (int)wParam, lParam); // 키입력을 정상적으로 동작하게 합니다.

 

                //return (IntPtr)1; // 키입력을 무효화 합니다.

            }

            else

            {

                return CallNextHookEx(hook, code, (int)wParam, lParam);

            }

        }

 

        private void MainForm_Load(object sender, EventArgs e)

        {

            SetHook();

        }

 

        private void MainForm_Closing(object sender, System.ComponentModel.CancelEventArgs e)

        {

            UnHook();

        }

    }

}

 

 

 

어떤 프로그램이든 키보드 입력한 경우 아래처럼 후킹되어 표시됩니다.

 

솔루션의 프로젝트들의 전체 라인수를 알아내는 방법


분석 > 코드 메트릭 계산 > 솔루션

* '선택한 프로젝트'를 선택하면 프로젝트만 결과 도출

아래처럼 각 프로젝트별/ 네입스페이스별 라인수가 보여진다.

액셀버튼을 이용해 액셀파일로도 저장할 수 있다. (노란색 네모박스 표시)

액셀 저장 결과




+ Recent posts