한영 전환 쉘 프로그램 있을까요

   조회 10751   추천 0    

프로그램 뛰워서 하는거 말고  단축키로  하는거 말고
그냥 실행시키면 영문이나 한글로 바꿔주는 쉘 프로그램 있을까요
윈도우 7에서 사용할건데 아무리 찾아도 없네요
고수님들 오늘도 부탁드립니다
짧은글 일수록 신중하게.
박동권 2014-02
IME 상태값(한영전환 상태값) 이라는 것이 윈도우에 떠 있는 각각의 프로그램마다 독립적으로 가지고 있는 것이라서..
특히 한영전환 같은 기능은 영어권 나라에서 그다지 필요한 것이 아니기에 비영어권 국가에서만 사용할 프로그램이므로 더더욱 찾기가 힘들 듯 합니다.
목적에 맞게 직접  백그라운드로 돌아가는 프로그래밍 해야할 것 같습니다.
쉘 프로그램으로 만든다면 해당 쉘의 한영전환만 변경될 것 같은데요.

전체 프로그램에 공통적인 한영값으로 동작하는 백그라운드 프로그램을 짠다면
1. 현재 활성화 창의 IME 값을 주기적으로 확인한다. 그리고 한번만 변수에 저장해둔다.
2. 활성화 창이 변하지 않았는데 한영전환 값이 바뀌었다면 바뀐 한영전환값을 변수에 저장해둔다.
3. 활성화 창이 변했다면 그 창의 한영전환값을 변수에 저장된 값으로 설정한다.
이런 조건이 될 듯 하네요.
조재현 2014-02
현재 활성창만 가능하다는 건지요
특정 프로그램에서만 쓸거라서요
비슷한 코트나 유틸이 있을까요
며칠동안 찾는데 힘드네요
타미케이 2014-02
정확하게 무엇을 하는 프로그램인지 조금 이해가 안가는데요...
설명을 조금만 더 부탁드립니다. 간단한거면 제가 만들어 드릴께요~
조재현 2014-02
HIMC  hIMC;
DWORD  dwConversion;
DWORD  dwSentence;

if( !(hIMC = ImmGetContext( GetActiveWindow() ) ) )
  return;
ImmGetConversionStatus( hIMC, &dwConversion, &dwSentence);
if(dwConversion & IME_CMODE_HANGEUL) // 한글모드면...
  dwConversion -= IME_CMODE_HANGEUL;

ImmSetConversionStatus( hIMC, IME_CMODE_ALPHANUMERIC, IME_SMODE_NONE);
ImmReleaseContext( GetActiveWindow(), hIMC );

특정 프로그램 윈도우에서 영문 키보드 자판으로 전환하게 하려는 거거든요
이걸 간단한 실행파일로 만들어야 하는데
제가 아주 문외한 이라서요
한수 부탁드립니다
     
박동권 2014-02
일단
ImmGetConversionStatus( hIMC, &dwConversion, &dwSentence);
if(dwConversion & IME_CMODE_HANGEUL) // 한글모드면...
  dwConversion -= IME_CMODE_HANGEUL;
코드는 필요가 없네요.
dwConversion 변수를 이후에 사용하지 않고 있습니다.

저 코드대로 하면 현재 활성화 된 윈도우을 모드를 영문모드로 바꾸는 것 같은데
저 프로그램이 활성화 창으로 된 상태에서 실행이 되면 저 프로그램의 모드가 영문모드로 바뀌기에
저 프로그램이 활성화 되지않은 백그라운드 모드에서 실행이 되어야만 원하는 효과를 볼 것입니다.
          
조재현 2014-02
답변 너무 감사합니다
     
한/영 자동 전환 프로그램으로 다른 프로그램을 영어입력으로 고정하고 싶으신건가요?
GetActiveWindow() 대신
EnumWindow로 윈도우 핸들을 찾거나 GetForegroundWindow로 활성 창을 찾으셔야 할겁니다.

그보다 문제가 ImmGetContext 이 함수가 다른 프로세서의 윈도우 핸들에는 NULL을 반환합니다.
          
조재현 2014-02
예 무조건 영어로 고정하려고 하는 거거든요
답변 고마워요
타미케이 2014-02
지금 하시려는것이 아주 조금 문제가 있습니다. command를 실행시키려면 현재 active window 가 항상 현재 cmd 입니다. 그렇기 때문에 실제로 active IME 를 바꾸고 싶으신 window handle을 GetActiveWindow로 받아올 수가 없습니다.  그 프로그램의 "이름"으로 가져와야 겠네요... 아니면 모든윈도우들을 다 돌아가면서 해당 어플리케이션인지 아닌지를 쫘악...
아 이런거 하던때가 너무 오래되서 지금 API들을 보니까 못알아보겠네요. 죄송...
저는 Shell 스크립트라고 하셔서... dos shell을 말씀하시는줄 알고... 도스 스크립트로 되는줄 알았는데 (.bat) 같은거요...  Visual C++ (이제는 C# 이라고 부르나요?)로 프로그램을 쓰고 싶다하시는거네요...
조금 다시 펼쳐보면 가능하지 말라는법은 없는데 (한때이걸로 밥먹고 살았으니까요) 윈도우에 컴파일러부터 깔고 해야하네요...
아... 너무 죄송해서 어쩌죠? 제가 큰소리만 쳐놓고...

http://support.microsoft.com/kb/600740/ko
http://delphi.borlandforum.com/impboard/impboard.dll?action=read&db=del_tip&no=174
그런데 구글해보니 여기랑 여기에 좀 나와있네요...
먼저 윈도우 핸들을 받으시고 무조건 set만 하면 되는거니까 ImmSetConversionStatus(Mode, IME_CMODE_ALPHANUMERIC, IME_CMODE_ALPHANUMERIC); 이렇게 하셔서 무조건 영어로 set 해주시면 될꺼같은데요...

이과제는
1. 윈도우 핸들을 찾는다
2. 그 윈도우 핸들을 이용하여 거기에서 ImmSetConversionStatus 로 IME 를 영어로 무조건 만든다...

이렇게 풀면 될것 같습니다만.... 직접 코딩못해드려 죄송합니다.
     
조재현 2014-02
승훈님 이렇게라도 힌트 주셔서 감사합니다


QnA
제목Page 3292/5729
2014-05   5264105   정은준1
2015-12   1789047   백메가
2018-11   4865   마왕
2020-01   2824   디셈버
2012-03   22030   민사장
2014-03   4859   이현석1
2012-03   6816   장동건2014
2015-08   5305   회원K
2018-12   3389   레인보우7
2024-08   1319   엠브리오
2012-03   5392   이병한
2016-08   4835   행아범
2023-01   2250   삐돌이슬픔이
2021-05   3801   늘파란
2023-01   1609   LevinF
2012-04   5655   권오준
2016-09   5642   inquisitive
2018-12   4148   Nikon
2024-09   1325   osthek83
2016-09   4883   성민박
2018-12   4191   무아
2012-04   14226   머라카는데