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이 나온게 아니라면 성공입니다.
위값을 이용해서 해당프로그램을 핸들할수있습니다.