c#/helper

c# 마우스 드래그 창 옮기기 user32.DLL

AUSTAR 2024. 4. 2. 14:12

마우스 이벤트 사용을 위해 user32.dll 기능을 사용한다.

 

ReleaseCapture() 를 이용해 마우스 이벤트를 위한 준비를한 후

SendMessage() 함수를 사용하여 해당 프로세스로 메시지를 전송하여 이벤트를 발생시킨다.

윈도우는 메시지 시스템..

 

각 함수에 대한 자세한 내용은 함수에 건 링크를 확인한다.

 

/// <summary>
/// ReleaseCapture : 스레드 창에서의 마우스 캡처를 해제하고 마우스 입력처리를 복원함
/// 마우스 이벤트를 사용하기 위해 사용
/// </summary>
#region Windows 이벤트 제어
[DllImport("user32.DLL", EntryPoint = "ReleaseCapture")]
private static extern void ReleaseCapture();

/// <summary>
/// 지정된 메시지를 창 또는 창으로 보냅니다
/// 프로세스간 메세지 전송에도 사용한다.
/// </summary>
/// <param name="hWnd">창 프로시저에서 메시지를 받을 창에 대한 핸들</param>
/// <param name="wMsg">보낼 메시지</param>
/// <param name="wParam">추가 메시지 관련 정보</param>
/// <param name="lParam">추가 메시지 관련 정보</param>
[DllImport("user32.DLL", EntryPoint = "SendMessage")]
private static extern void SendMessage(IntPtr hWnd, int wMsg, int wParam, int lParam);


/// <summary>
/// 마우스 드래그 창 옮기기
/// </summary>
public static void DragMoveWindow()
{
	ReleaseCapture();                                                                       // 드래그 이벤트를 위해 마우스 캡처 해제

	// hWnd - Process.GetCurrentProcess().MainWindowHandle : 현재 프로세스의 메인 윈도우 핸들
	// wMsg - 0x112 : WM_SYSCOMMAND - 창은 사용자가 창 메뉴(이전의 시스템 또는 컨트롤 메뉴)에서 명령을 선택하거나 사용자가 최대화 단추, 최소화 단추, 복원 단추 또는 닫기 단추를 선택할 때 이 메시지를 받습니다.
	// wParam - 0xf012 : SC_DRAGMOVE - move by drag
	SendMessage(Process.GetCurrentProcess().MainWindowHandle, 0x112, 0xf012, 0);
}