미국서 만든 터미널 에물레이터(GUI Version)에서 한글 입력이 안되는데 방법이 없을까요????

doksuriq의 이미지

IME Call이 안되도록 막혀있는 문제인것 같은데요~

노트패드 같은데서 한글을 작성하여 복사/카피를 시키면 입력이 되긴 하거든요 ㅠ.ㅠ

문제는 이를 만든 회사에선 IME에 대하여 이해를 못하는것 같아요......

쏘스코드만 오픈을 시켜주면 간단한데 가능성이 전혀없고

10년 세월을 하세월로 하늘만 쳐다보고 있답니다...

결국 디버깅이나 이런 방법으로 해결하여야 할 것 같은데

이런경험 있으신분 안계신가요?????

upriser의 이미지

한 7년 넘게 윈도우(Win32)에서 터미널 에뮬레이터 개발했습니다만 음...

IME도 모른다는 회사가 IME 메시지를 처리해서 막았을리도 없을 것 같고,

Copy & Paste 가 된다는 걸로 봐서 출력은 된다는 것 같은데...

굳이 억지로 상상을 해보자면 WM_CHAR 메시지라도 잡아서 bit-7을 다 때어낸건 아닌지...

아무튼 쉽게 이해가 가는 상황은 아니네요.

근데, 더 궁금한건 꼭 그 프로그램을 써야하는 이유가 있나요?

PuTTY라는 걸출한 무료 프로그램도 있고 한글이 잘 지원되는 국내/해외 프로그램도 많은데요.

꼭 기존 프로그램을 쓰셔야 한다면 프로그램 이름이라도 알려주시거나

그것도 곤란하면 증상이라도 정확히 기술해주시면 많은 분들의 도움을 받을 수 있지 않을까 사료됩니다.

doksuriq의 이미지

그렇죠,
출력은 되구요....
아마도 콘트롤 캐랙터를 막으면서 일어나는 문제인거 같아요.....

리버싱으로 해결을 하든지
별도로 개발을 하든지 해야 할 것 같습니다만
제가 이 부문엔 워낙이 까막눈이라서리... ㅠ.ㅠ

제발 어느분이 도와주시면 감사하겠습니다.

증상은,
TbredComm(텍스트 방식 터미널 에물레이터: 한텀등과 같은)을 기동시켜
일반(??? 텍스트) 터미널 에물레이터로 사용하다(여기선 한글 입출력에 문제가 없습니다)

VIP on(GUI 로 변경)을 하면 VIP-IV라는 서브 프로그램을 기동하게 되며

이때부터는 한/영 변환키가 아예 듣질 않습니다.

kkb110의 이미지

제가 생각할때 가장 현실적인건..

후킹으로 한글 입력을 가로채서(아니면 특수 키로 한글 입력 시작 감지) SendMessage함수로 paste를 보내는 방법인거 같네요.

doksuriq의 이미지

정보 감사합니다.

후킹을 하면 되겠다는 생각은 했었는데~

어떻게 하는지를 몰라서요...

kkb110의 이미지

여기 자세한 한글 튜토리얼이 있네요~

http://www.reversecore.com/30

doksuriq의 이미지

유용한 정보 정말 감사합니다 *.*

upriser의 이미지

제가 이해를 잘 못한게 아니라면 paste로는 해결이 안 될 것 같네요.

paste를 한다면 EDIT 컨트롤이라면 WM_PASTE를 보내겠지만 ...

TBredComm 윈도우에는 뭘 보내야 할지 확실치가 않네요.

내부 paste 매커니즘은 애초에 메시지를 통하지 않았을 확률이 더 커보이고요.

한글 텍스트를 클립보드에 넣어두고 WM_KEYDOWN(혹은 WM_CHAR)에 Ctrl+C 를 실어서

SendMessage()로 보내면 될 수 있을지도 모르겠지만...

paste를 하려면 paste하려는 한글 텍스트가 있어야 하는데 한영 전환을 못하는 상황이니 한글 조합할 수도 없겠네요.

한글 텍스트가 먼저 만들어져 있다는 가정이어야 하므로..

음.. 정리하자면 일단 한영키를 동작시켜야 할 것 같습니다. (당장은 이렇게만 하면 해결될 듯 보이는데... 또 모르죠.)

혹시 터미널 에뮬레이터이니까 GUI가 Key Mapping을 따로 가지고 있는건 아닌지요? (키보드 종류에 따라 한영키가 Left Alt 키로 인식되기도 합니다.)

그것도 아니면 한영키 동작이 안된다니 GUI가 한영키가 눌렸다는 메시지를 DefWindowProc()에 안넘기고 drop 해버린 것 같은데...

결국 GetMessage() 를 Hooking 해서 한영키인 경우에 직접 DefWindowProc()을 불러줘야 할 것 같은데,

Key Hooking과 달리 GetMessage() Hooking은 Global Hook이 아니므로

현재와 같이 다른 프로세스에서 Hooking을 하려면 DLL Injection을 사용해야 한다고 알고 있습니다.

DLL Injection 까지는 제가 해 본 경험이 없어서 정확히는 말씀 못드리겠지만,

CodeProject 사이트에 상당한량의 관련 글을 봤던 기억이 납니다.

kkb110의 이미지

지금 작성자님이 말씀하시길 notepad에서 복사한 한글을 TbredComm에 붙여넣기는 되신다는 거 같은데..

OS에서는 WM_PASTE메세지를 보내고, TbredComm에서 그걸 받아서 처리하는 것으로 생각되네요.

우리가 다른 프로그램을 만들어서, 같은 메세지를 보내면, 똑같이 붙여지겠죠?

만약 WM_PASTE가 아니라고 하면, spy++같은걸로 무슨 메세지가 한글 붙여넣기를 수행하는지를 알아낸 다음 그 메세지를 이용하면 될 것 같네요.

---

그리고 후킹부분 이야기는,

한글 입력키가 눌리면, 그때부터 메세지를 TbredComm에 보내지 말고, 우리가 만든 어플리케이션 textbox에 메세지를 보내서 한글 입력이 다 되게 한 뒤에,

한글 입력 해제 키가 눌리면, TbredComm에 WM_PASTE메세지를 textbox에 들어있는 한글을 담아 보내면 될 것 같습니다.

upriser의 이미지

OS가 특정 어플리케이션에 WM_PASTE를 보내지는 않습니다.

붙여넣기는 사용자가 단축키(WM_KEYDOWN/WM_COMMAND)를 누르거나 메뉴를 선택(WM_COMMAND)하면
TbredComm이 클립보드 내용을 긁어서 서버로 전송하고 서버가 echo 해준 내용을 받아서
내부 버퍼를 기록한 후 화면을 갱신하는 순서로 진행될 겁니다.

가끔은 EDIT/RichEdit 컨트롤과 호환성을 고려한 프로젝트(Scintilla)가 WM_COPY, WM_CUT, WM_PASTE 등의
메시지를 그대로 지원하는 걸 본적이 있습니다.
혹시 TbredComm이 WM_PASTE 메시지를 처리했을 가능성도 있겠지만... 이건 말씀하신대로 spy++로 보면 바로 나오겠죠.
하여간 결국 붙여넣기는 클립보드를 통해야 한다는 말이구요.

그리고 후킹부분 이야기는...
"우리가 만든 어플리케이션"이 키 입력을 받으려면 foreground가 되어서
focus를 받아야 하는데... 이게 불가능 합니다.
이유는 Laymond Chen의 블로그에 잘 설명되어있습니다.
(http://blogs.msdn.com/b/oldnewthing/archive/2009/02/20/9435239.aspx)

kkb110의 이미지

아 그렇군요.. 그리고 ..후킹부분에 대해서...제가 윈도프밍을 잘 몰라서 틀린 부분이 있을 수도 있긴 한데, 궁금한점이..

edit컨트롤이 꼭 foreground가 되어서 focus를 받아야 하나요? 그냥 후킹 체인코드가 바로 키 입력 메세지를 edit 컨트롤로 쏴서 처리를 할 수는 없을까요?

upriser의 이미지

직접 해보질 않아서 딱 잘라 안된다고 말하긴 어려운데요..

그것도 추천할만한 방법은 아닌것 같습니다. 아래 링크 참조해 보세요.
http://blogs.msdn.com/b/oldnewthing/archive/2005/05/30/423202.aspx

Win32 API에 대해선 Raymond Chen이 하는 말은 믿을 수 밖에요...

다만 전혀 안된다기 보다는 똑같이 흉내(emulate) 낼 수는 없다는 얘기였던것 같으니
혹시 될지도 모르겠습니다.

doksuriq의 이미지

여러 정보 정말 감사합니다.

제생각도 한영키만 동작을 시켜주면 될 것 같습니다 만.

이 에물레이터가 갖는 특성은
말씀드렸다시피 TbredComm을 기동시켜 서버에 접속한 다음
어플리케이션을 Text Mode로 사용하다
어플리케이션 메뉴에 설정된
VIP on을 콜하면 VIP4 라는 서브 프로그램이 기동되어
터미널이 GUI Mode로 전환되는 것 입니다,
즉, VIP on/off 토글로 Text Mode와 GUI Mode로 토글.

*** TbredComm에서는 한영키가 제대로 동작되며 한글 입촐력에 문제가 없으나
VIP4에서는 한영키가 아예 듣지를 않습니다.
*** 노트패드 등에서 한글을 복사/붙여널기 하면 된다는 뜻은
어플리케이션 상의 필드에 붙여널기가 된다는 말씀입니다.

sisuc의 이미지

혹시 다른 프로그램 쓰실 생각있으시면

넷사랑의 XShell추천드립니다.

2년째 쓰는중인데 기능도 많고 좋아요

위대한 한글