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
[5730] Re:[질문] TMediaPlayer 로 녹음하기, 다른 프로그램 제어하기
홍용혁 [] 2996 읽음    2001-02-26 11:33
천강협 님이 쓰신 글 :
:  여전히 초보를 못 벗어나는 천강협입니다.
:  두가지 질문을 묶어서 한번에...
:
:  1. Recording 프로그램
:   TMediaPlayer를 이용해서(그나마 아는게 이것밖에 없어서..) 녹음을
:  하려고 합니다. TMediaPlayer에 보면 Rec용으로 빨간 버튼이 있기는
:  하지만, 이것은 Wav파일을 열었을 경우에 현재 Position뒤에 녹음이
:  되는 것입니다.
:   새로운 파일에 녹음을 하려면 어떻게 파일을 생성해야할지 모르겠습니다.
:
:  2. 다른 프로그램 제어하기.
:    상당히 오래전부터 고민(??)하고 있지만, 아직도 해결을 못 하였습니다.
:   CreateProcess, GetConsoleHWND, FindWindow 를 이용해서 핸들을 찾고
:   SendMessage를 이용하여서 어떻게 한다고 들었고 나름대로
:   만들어보았지만, 먹혀들어가질 않습니다.
:     이를 실현할 수 있는 코드를 알고 싶습니다.
:     윈도우에 딸려나오는 메모장을 열어서 메모장에 "abc"라는 문자를
:   타이핑하고 'ctrl + s'에 해당하는 메세지를 보내서 abc.txt라는
:   제목으로 저장을 하려면.... 어떻게 해야합니까 ???
:     **   제 부탁(?)이 많은 것을 바라고 있음을 잘 압니다.
:     ** 하지만, 위와 같은 기능을 위한 코드를 알려주신다면, 저와 같은
:     ** 사람들에게 정말 큰 도움이 될 것입니다.
:
:
:
2번에 대한 답변입니다.
다른 프로그램을 제어하려면 후킹을 사용하셔야 됩니다.
하지만 이 후킹은 내용이 좀 방대해서...
저도 델파이코리아에있는 민성기님의 후킹강좌를 통해 공부를 했죠.

일단 전역훅을 겁니다.
SetWindowsHookEx(WH_SHELL,(HOOKPROC)MyShellHook,HInstance,0);

그리고 MyShellHook 함수에서 다음과 같이 코딩을 해주면 되겠죠.
LRESULT CALLBACK MyShellHook(int Code,WPARAM wParam,LPARAM lParam)
{
      ..
      Code 가 HSHELL_WINDOWCREATED 이라면
      (참고로 어떤 윈도우가 새로 생성될때 나타나는 훅이벤트가 HSHELL_WINDOWCREATED 임)
      {
           Notepad 가 실행되었다면 wParam 은 그윈도우의 핸들값이 넘어오기때문에
           GetClassName 함수로 검사하면 됩니다.
           즉, 클래스명=="Notepad" 라면
           {
                 SetForegroundWindow( (HANDLE)wParam );
                 노트패드를 포그라운드로 만들어서 keybd_event 메세지가 다른데 가지않도록함
                
                 keybd_event('A',0,0,0);
                 keybd_event('A',0,KEYEVENTF_KEYUP,0);  여기까지 A 를 누른것임
                 B C 도 마찬가지    
                 Alt+F4 를 keybd_evnet 로 만들어낸다.
                 그리고 엔터를 만든다. (그러면 Save 다이얼로그박스가 나온다.)
           }
          
           클래스명==#32770 (다이얼로그박스의 클래스명은 #32770 이다.)
           {
                 윈도우명=="다른 이름으로 저장"
                 {
                     keybd_event 로 abc.txt 엔터를 순서대로 만든다.
                 }
           }
      }
}

그리고 민성기님의 강좌를 보시면 아시겠지만 위의 함수들은
dll 안에 있어야 합니다.

민성기님의 강좌를 참고하시구요
저의 간단한 빌더예제도 밤에 올리겠습니다. 이프로그램과는 상관없습니다.

+ -

관련 글 리스트
5698 [질문] TMediaPlayer 로 녹음하기, 다른 프로그램 제어하기 천강협 2571 2001/02/24
5730     Re:[질문] TMediaPlayer 로 녹음하기, 다른 프로그램 제어하기 홍용혁 2996 2001/02/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.