상세 컨텐츠

본문 제목

C# keybd_event를 이용해 키오스크 키패드 만들기

개발관련

by 프로왓칭맨 2020. 7. 16. 12:35

본문

 

 

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등 다른놈들은 다 먹는데 한글모드만 안먹으니 답답해 죽을뻔했다.

 

클릭이벤트 함수 자체를 콜해도 안먹는걸 보고 다른 방법을 간구하던 중 역시 구글이 답을 알려주었다.

 

참조한 사이트:https://warpfence.tistory.com/entry/C-IME-%EC%98%81%EB%AC%B8-%EB%B0%8F-%EB%8C%80%EB%AC%B8%EC%9E%90-%EB%B3%80%ED%99%98

 

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를 해야되는데....

관련글 더보기

댓글 영역