마우스 이벤트 사용을 위해 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);
}
'c# > helper' 카테고리의 다른 글
| c# 공인 ip 가져오기 / c# public ip 가져오기 (0) | 2024.04.02 |
|---|---|
| c# 로컬 ip 가져오기 / c# local ip 가져오기 (0) | 2024.04.02 |
| c# 왼쪽부터 문자열 자르기 (0) | 2024.04.02 |
| c# IsNullOrWhiteSpace()을 이용한 trim() 안전하게 사용하기 (0) | 2024.04.02 |
| c# 다중 스페이스 제거 (0) | 2024.04.02 |