C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[49720] 화상키보드에 관한 질문을 올리고자 합니다 :)
온새미 [destinyz] 1710 읽음    2007-06-27 10:53
안녕하세요, 온새미입니다... 항상 여기에서 도움만 받고 온 온새미군인데 또 구원의 손길을 받고자 질문을 올립니다...

제가 지금 질문할 내용은 크게 두가지로 말할 수 있는데,

'SetActiveWindow()를 이용한 윈도우 가져오기가 안되는데...[아래 소스에 내용이 :)]'
'keybd_event(VkKeyScan('ㅁ'), 0, 0, 0); 이런 형식이 되는지...'

이렇답니다... 자, 본격적으로 질문하도록 하겠습니다 :)

일단 첫번째 질문에 관한 것인데요, 제가 친구의 도움을 받아서 윈도우의 화상키보드다음의 순서 즉 Z순서상 화상키보드 다음 순서의 창[프로세스]을 잡아서 거기다가 keybd_event로 입력을 때려넣어서 실제 키보드에서 입력하듯이 하고 싶은데요... 아래에 소스를 좀 봐주세요...

// Button q를 눌렀을때 발생하는 이벤트입니다. ////////////////////////////////////////////////
void __fastcall TForm5::Button15Click(TObject *Sender)
{
        HWND hwndFirst  = ::GetForegroundWindow();
        HWND hwndNext;
        DWORD dwProcessID;
        char szTextWnd[128];
        do{
                GetWindowThreadProcessId(hwndFirst, &dwProcessID);
                //Process의 ID를 가지고 온다.
                if(IsWindowVisible(hwndFirst)){
                        GetWindowText(hwndFirst, szTextWnd, 128);
                        // 윈도우의 Text를 가지고 온다.
                        if(GetCurrentProcessId() != dwProcessID){
                                if(szTextWnd[0] != 0){
                                        SetActiveWindow(hwndFirst); // 이부분이 윈도우를 따오는 부분인듯...
                                        keybd_event(VkKeyScan('q'), 0, 0, 0);
                                        keybd_event(VkKeyScan('q'), 0, KEYEVENTF_KEYUP, 0);

//                                        MessageBox(NULL,szTextWnd,"dd",64);
                                        break;
                                }
                        }
                }

                hwndNext = hwndFirst;
                hwndFirst = GetNextWindow(hwndNext, GW_HWNDNEXT);
                // 다음 순위의 window를 가지고 온다.
        }while(hwndFirst);
}
//////////////////////////////////////////////////////////////////////////////////////////////

SetActiveWindow가 핸들을 가져와서 해당 핸들은 Active상태로 만드는 것이 맞다면, 정상적으로 동작해야할텐데... 그게 안되네요...; 그래서 제 친구가 SetFocus라는 함수로 추천했습니다만, 빌더에서는 지원하지 않는 모양입니다...
제가 생각하는 궁극적인 목표는, Windows에서 기본으로 지원하는 화상키보드정도의 기능을 갖춘[뭐 기본적인 키입력기능입니다만...] 것을 만드는 것입니다. 제가 따로 만드는 이유가 윈도우의 화상키보드는 버튼크기가 너무 작기때문에, 제가 적용하려는 프로그램에는 좀 어려운 감도 있어서 말입니다...


자, 두번째 질문 들어갑니다... 위에서 거의 반은 말했지만요... :)
keybd_event라는 함수를 화상키보드에서 쓰고있는데요, 키보드의 직접입력과 같은 기능이 있어서 쓰고 있었는데, 기존의 화상키보드에는 한/영키가 없어서 Virtual Key쪽을 뒤져보니, VK_HANGUL이라는 한글 IME 변환키가 있더군요 :) 그래서 가져다 쓰려는데... 문제는, 현재 IME상태가 한글인지, 영어인지 구별하여 만약 한글이면 화상키보드자판은 한글자판으로바꿔주고, 영어면 영어자판으로 바꿔주려고 합니다. 제가 워낙 비주얼한 쪽을 좋아해서리;ㅅ ;
좀 질문에서 벗어난 느낌이 드는데 이어서 계속하자면, keybd_event(VK_HANGUL, 0, 0, 0);을 쓰게되면 영어인 상태에서는 한글로 바뀌겠으나 한글상태에서 쓰게되면 어떻게 되는지 궁금합니다...
이번엔 진짜 메인질문인데요... 방금 질문했던것이 안되면, keybd_event(VkKeyScan('ㅁ'), 0, 0, 0); 이런형식으로 써야할텐데... 이것이 가능한가요? 궁금해서 몸이 비틀어질거같습니다...

시간이 갈 수록 마음이 조급해지네요 ㅠㅠ 빠르고 친절한 답변 기다리고 있겠습니다 :)
긴글 봐주셔서 감사합니다~

+ -

관련 글 리스트
49720 화상키보드에 관한 질문을 올리고자 합니다 :) 온새미 1710 2007/06/27
49722     Re:화상키보드에 관한 질문을 올리고자 합니다 :) 장성호 3014 2007/06/27
49730         Re:Re:화상키보드에 관한 질문을 올리고자 합니다 :) - 후킹 & 기존에하던것 & VkKeyScan에 대해 온새미 2878 2007/06/28
49852             Re:Re:Re:화상키보드에 관한 질문을 올리고자 합니다 :) - 후킹 & 기존에하던것 & VkKeyScan에 대해 나그네 2439 2007/07/10
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.