아래 방법외에도 아래와 같은 방법이 있습니다.
[C# WPF user32.dll 이용하여 전역 키 후킹하기, 핫키 등록하기 / 키 보내기 (1) API와 상수보기]
[C# WPF user32.dll 이용하여 전역 키 후킹하기, 핫키 등록하기 / 키 보내기 (2) API 예제보기]
유틸 프로그램을 만들다 보니
프로그램 내에서만 쓸 단축키와
프로그램 바깥에서 즉, 프로그램 비활성화 상태에서도 핫키를 사용해야 해서
찾아 적용해 보았습니다.
둘 다를 소개하는 곳이 없어 제가 나중에라도 찾아볼 수 있도록 정리했는데 누군가에게 조금이라도
도움이 되었으면 좋겠네요.
1. 프로그램 내에서의 핫키 Hot Key 지정
윈폼에서 기본으로 제공하는 메소드를 Override 하여 사용 합니다.
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
Keys key = keyData & ~(Keys.Shift | Keys.Control);
switch (key)
{
case Keys.F:
// 조합키 사용 시
if ((keyData & Keys.Control) != 0)
{
MessageBox.Show("Ctrl+F");
}
break;
case Keys.F5:
// 단일키 사용시
MessageBox.Show("f5");
break;
default:
MessageBox.Show("지정되지 않은 키입니다.");
return base.ProcessCmdKey(ref msg, keyData);
}
return true;
}
2. 비활성화 상태에서도 사용하는 단축키 설정
User32.dll 파일내의 함수를 이용합니다.
//핫키등록
[DllImport("user32.dll")]
private static extern int RegisterHotKey(int hwnd, int id, int fsModifiers, int vk);
//핫키제거
[DllImport("user32.dll")]
private static extern int UnregisterHotKey(int hwnd, int id);
// 윈폼 생성 시 등록
private void mainForm_load(object sender, EventArgs e)
{
// 0x0 : 조합키 없이 사용, 0x1: ALT, 0x2: Ctrl, 0x3: Shift
//RegisterHotKey(핸들러함수, 등록키의_ID, 조합키, 등록할_키)
RegisterHotKey((int)this.Handle, 0, 0x0, (int) Keys.Up);
RegisterHotKey((int)this.Handle, 1, 0x0, (int) Keys.Down);
}
// 윈폼 종료 시 제거
private void mainFrom_close(object sender, FormClosedEventArgs e)
{
UnregisterHotKey((int)this.Handle, 0); //이 폼에 ID가 0인 핫키 해제
UnregisterHotKey((int)this.Handle, 1);
}
// 윈도우프로시저 콜백함수
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == (int)0x312) //핫키가 눌러지면 312 정수 메세지를 받게됨
{
if (m.WParam == (IntPtr)0x0) // 그 키의 ID가 0이면
{
listViewFile_move(-1);
}
if (m.WParam == (IntPtr)0x1) // 그 키의 ID가 1이면
{
listViewFile_move(+1);
}
}
}
'C - C++ - C# - Form - WPF' 카테고리의 다른 글
C# WPF 콤보박스 ENUM을 데이터 바인딩하여 사용하기 (0) | 2019.03.08 |
---|---|
C# WPF 마우스 이벤트 발생시키기 mouse event fire / raise (0) | 2019.03.07 |
C# WinAPI 함수로 비활성 화면 캡쳐 / 프로그램 캡쳐 (1) | 2018.04.06 |
C# 윈도우폼 WinForm 에서 Access DB 사용 시 주의할 점 / 저장 안됨 / 수정 안됨 / 재실행 시 저장 값 안보임 (0) | 2018.03.29 |
포인터 이해하기 (0) | 2013.01.14 |
WRITTEN BY