C# IME 영문 및 대문자 변환
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69..
warpfence.tistory.com
윈폼으로 키오스크개발을 하면서 키패드를 직접 만들어야 할 일이 생겼다.
구글링을 통해(구글 없을때 개발한 개발자분들 존경합니다..) dll만 Import하면 따로 한글 초성, 중성 등을 따지지 않고 키보드 입력처럼 사용할 수 있음을 알게되어 바로 샘플소스 받아서 이식해서 사용했다.
참조한 사이트:https://icodebroker.tistory.com/4855
[C#/WINFORM] 화상 키보드 사용하기
■ 화상 키보드 사용하기 ---------------------------------------------------------------------------------------------------- ※ 32비트 버전으로만 빌드해야 한다! ▶ KeyBoardForm.cs using System;..
icodebroker.tistory.com
그런데 잘 사용하다 문제가 생겼다 윈폼기본인지 PC기본인지는 몰라도 기본 IMM입력신호가 영문인데 키오스크는 한글을 기본으로 입력받고 한/영키를 눌러야 이미지가 바뀌면서 영문을 칠 수 있게 해야했다.
여기서 골때리는게 한/영키 이벤트안의
keybd_event((byte)Keys.HangulMode, 0, 0, 0);
함수가 클릭이벤트로 먹을땐 잘만 바뀌던놈이 함수안에 넣고 호출하면 안먹는것이다.
함수안에 CAP LOCK, 그냥 키입력, SHIFT등 다른놈들은 다 먹는데 한글모드만 안먹으니 답답해 죽을뻔했다.
클릭이벤트 함수 자체를 콜해도 안먹는걸 보고 다른 방법을 간구하던 중 역시 구글이 답을 알려주었다.
C# IME 영문 및 대문자 변환
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69..
warpfence.tistory.com
여기 들어가보니 imm32.dll을 IMPORT해서 해당 컨트롤의 IMM모드를 가져오고 셋팅할 수 있게 하는 방법이 있었다.
이걸 응용해서
public void ControlIMMChange(Control ct, int mode)
{
IntPtr hwnd = ImmGetContext.(ct.Handle);
ImmSetConversionStatus(hwnd, mode, 0);
}
을 만들어서 해당 컨트롤을 한글모드로 바꿀 수 있었다.
하루종일 삽질했지만 아직도 대체 왜 keybd_event((byte)Keys.HangulMode, 0, 0, 0) 이놈이 안먹는지는 의문이다.
그런데 2번째 참조사이트에서 한/영모드를 imm32를 이용해 바꾸고 caps나 shift는 keybd_event로 바꾼걸 보면 이유가 있긴 한 것 같다.
나같은 초보들은 가져다 쓰다가 삽질 좀 하고 그냥 그런가보다 하고 마는거고..
얼른 구시대의 Winform을 탈출해서 ASP MVC를 해야되는데....
프로그래머스 코딩테스트 연습 -해시 3(위장) (0) | 2020.09.18 |
---|---|
프로그래머스 코딩테스트 연습 -해시 2(전화번호 목록) (0) | 2020.09.17 |
프로그래머스 코딩테스트 연습 -해시 1(완주하지 못한 선수) (0) | 2020.09.16 |
C# 마지막 커서에 남아있는 문자 지우기 (0) | 2020.07.17 |
댓글 영역