C#/C# 프로그래밍/

C# Dll Import와 핸들러획득

2019. 9. 25.

Dll Import 는 Dll을 참조하여 해당 Dll에 있는 함수를 호출할수있게해줍니다.

 

Dll Import를 사용하기 위해서는 아래의 using문을 추가해줘야합니다.

using System.Runtime.InteropServices;

 

오늘의 목표는 핸들러 획득!

Dll Import를 사용한 이유는

윈도우즈 기본 Dll 중 User32안에 핸들러 획득과 관련한 함수가 있기때문입니다.

 

우선 폼프로젝터를 하나 만들어봅시다.

저는 test 라고 만들었습니다.

 

텍스트 박스하나와 버튼하나를 만들고

버튼을 더블클릭해서 클릭이벤트를 만들어줍니다.

 

아래는 예시 코드입니다.

namespace test
{
	public partial class Form1 : Form
    {
        [DllImport("User32", EntryPoint = "FindWindow")]
        private static extern IntPtr FindWindow(string IpClassName, string IpWindowName);
        
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void Button1_Click(object sender, EventArgs e)
        {
            string a = textBox1.Text;
            IntPtr b = FindWindow(null, a);
            MessageBox.Show(b.ToString());
        }
    }
}

 

중요한부분은 Class 영역 시작과 함께 선언해준

[DllImport("User32", EntryPoint = "FindWindow")]
private static extern IntPtr FindWindow(string IpClassName, string IpWindowName);

시작할때 추가해준 using문을 통해

User32에 있는 FindWindow함수를 호출하겠다는 의미입니다.

 

아까 만들어준 클릭이벤트 함수는

private void Button1_Click(object sender, EventArgs e)
{
    string a = textBox1.Text;
    IntPtr b = FindWindow(null, a);
    MessageBox.Show(b.ToString());
}

textbox1에 입력된 문장을 a변수에 할당하고

그값을 FindWindow를 통해 핸들러 값을 구해서

Messagebox를 통해 보여주겠다는 의미입니다.

 

그럼 F5를 눌러 디버깅~

잘 실행되었다면

테스트로 윈도우 기본 엣지브라우저의 핸들러값을 얻기위해

microsoft edge를 입력하고

button1 클릭!

 

그럼 위와 같은 값이 나오는데 0이 나온게 아니라면 성공입니다.

위값을 이용해서 해당프로그램을 핸들할수있습니다.