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
[42136] Re:Re:덕분에 시원하게 해결됬습니다.
해지는아침 [sky0510] 1945 읽음    2005-10-12 22:39
님의 답변 덕분에 여러가지가 시원하게 해결됬습니다...
정말 진심으로 감사 드립니다...
저도 열심히 해서...다른 사람의 질문에 성의껏 답변할 수 있도록 노력하겠습니다...
정말 감사 드립니다...^^  좋은 하루 되셔요


최준호.스페로 님이 쓰신 글 :
: 안녕하세요 스페로 입니다.
: 다음과 같이 해보십시오.
: 먼저 폼에 버튼 하나 올리고... (이넘이 Key 후킹 시작 버튼으로.. )
: 해지는아침님이 올리신 소스를 그래도 활용 하였습니다.
: <CPP 소스>
: //---------------------------------------------------------------------------
:
: #include <vcl.h>
: #pragma hdrstop
:
: #include "Unit1.h"
: //---------------------------------------------------------------------------
: #pragma package(smart_init)
: #pragma resource "*.dfm"
: TForm1 *Form1;
:
: LPCTSTR ProgName = "Form1";
: HHOOK hHook;
: LRESULT CALLBACK HookMouseProc(int nCode, WPARAM wParam, LPARAM lParam) ;
: //---------------------------------------------------------------------------
: __fastcall TForm1::TForm1(TComponent* Owner)
:   : TForm(Owner)
: {
: }
: //---------------------------------------------------------------------------
:
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
:
:   hHook = SetWindowsHookEx(13,(HOOKPROC)::HookMouseProc,GetModuleHandle(NULL), 0);
: }
: //---------------------------------------------------------------------------
:
:
:
:
: LRESULT CALLBACK HookMouseProc(int nCode, WPARAM wParam, LPARAM lParam)
: {
:     HWND hwnd;
:     LRESULT lResult = 0;
:     if(nCode == HC_ACTION)
:     {
:         if(((EVENTMSG*)lParam)->message == VK_F10)
:         {
:             hwnd=FindWindow(NULL,ProgName);
:             SendMessage(hwnd,WM_USER+4,1,1);
:             return 1;
:         }
:         else if(((EVENTMSG*)lParam)->message == VK_F12)
:         {
:             hwnd=FindWindow(NULL,ProgName);
:             SendMessage(hwnd,WM_USER+5,1,1);
:             return 1;
:         }
:         else if(((EVENTMSG*)lParam)->message == VK_F8)
:         {
:             hwnd=FindWindow(NULL,ProgName);
:             SendMessage(hwnd,WM_USER+6,1,1);
:             return    1;
:         }
:     }
:
:     return CallNextHookEx(hHook, nCode, wParam, lParam);
: }
:
: //---------------------------------------------------------------------------
: void __fastcall TForm1::OnMyKeyEvent(TMessage &Message)
: {
:   switch(Message.Msg)
:   {
:     case WM_USER+4:
:       ShowMessage("F10 press");
:       break;
:     case WM_USER+5:
:       ShowMessage("F12 press");
:       break;
:     case WM_USER+6:
:       ShowMessage("F8 press");
:       break;
:
:   }
: }
: <헤더파일 소스>
: //---------------------------------------------------------------------------
:
: #ifndef Unit1H
: #define Unit1H
: //---------------------------------------------------------------------------
: #include <Classes.hpp>
: #include <Controls.hpp>
: #include <StdCtrls.hpp>
: #include <Forms.hpp>
: //---------------------------------------------------------------------------
: class TForm1 : public TForm
: {
: __published:    // IDE-managed Components
:   TButton *Button1;
:   void __fastcall Button1Click(TObject *Sender);
: private:    // User declarations
: public:        // User declarations
:   __fastcall TForm1(TComponent* Owner);
:
: protected:
:   void __fastcall OnMyKeyEvent(TMessage &Message);
: BEGIN_MESSAGE_MAP
:   MESSAGE_HANDLER(WM_USER+4, TMessage, OnMyKeyEvent);
:   MESSAGE_HANDLER(WM_USER+5, TMessage, OnMyKeyEvent);
:   MESSAGE_HANDLER(WM_USER+6, TMessage, OnMyKeyEvent);
: END_MESSAGE_MAP(TForm)
: };
: //---------------------------------------------------------------------------
: extern PACKAGE TForm1 *Form1;
: //---------------------------------------------------------------------------
: #endif
:
: 최소화 했을때.. HookMouseProc()까지는 오고 SendMessage()까지 하지만.
: MESSAGE_MAP 에서 OnMyKeyEvent()로 보내주지는 않더군요..
: 메세지 받는 부분은 좀더 수정해보세요..
:
: 아마도 프로그램이 최소화 되어 있거나 아니면 아에 보이지 않는 폼으로
: 다른 프로그램들의 Function키를 후킹 하시려고 하는거 같은데..
:
: 이곳에서 좀더 검색해보시면 답이 나올거 같습니다.
: 저는 회사에서 빌더 프로그래밍을 하지 않으므로 잘모릅니다. ^^.
:
: 그럼 즐거운 프로그래밍 라이프 되십시오.~~
:
:
:
: 해지는아침 님이 쓰신 글 :
: : 답변 감사 드립니다...
: : 단축키 F10, F12등이 다른 프로그램 작동중(프로그램 비활성화중)에도 작동하는 원리를 배우고 싶어 전환을 부탁드렸습니다...  자료를 찾아보니 후킹이라는 것으로 되어 있던데요...
: : 그래서 후킹 관련 자료를 보고 있습니다...  이참에 VC++도 기본적인 것은 공부해 두어야 겠다는 생각이 들고요.
: : .
: : 아래 부분을 C++ Builder로 전환해 보고 싶어서 요청을 드렸습니다...
: : --------------------------------------------------------------------
: : hHook = SetWindowsHookEx(13,(HOOKPROC)::HookMouseProc,GetModuleHandle(NULL), 0);
: :
: : LRESULT CALLBACK HookMouseProc(int nCode, WPARAM wParam, LPARAM lParam)
: : {
: :     HWND hwnd;
: :     LRESULT lResult = 0;
: :     if(nCode == HC_ACTION)
: :     {
: :         if(((EVENTMSG*)lParam)->message == VK_F10)
: :         {
: :             hwnd=FindWindow(NULL,ProgName);
: :             SendMessage(hwnd,WM_USER+4,1,1);
: :             return 1;
: :         }
: :         else if(((EVENTMSG*)lParam)->message == VK_F12)
: :         {
: :             hwnd=FindWindow(NULL,ProgName);
: :             SendMessage(hwnd,WM_USER+5,1,1);
: :             return 1;
: :         }
: :         else if(((EVENTMSG*)lParam)->message == VK_F8)
: :         {
: :             hwnd=FindWindow(NULL,ProgName);
: :             SendMessage(hwnd,WM_USER+6,1,1);
: :             return    1;
: :         }
: :     }
: :
: :     return CallNextHookEx(hHook, nCode, wParam, lParam);
: : }
: : ------------------------------------------------------------------------
: : 답변에 거듭 감사 드리며, 나머지는 제가 한번 연구해서 해 보기로 하고요....혹시 간단히 전환되는 거면 리플달아 주시면 저야 좋은데, 넘 무리한 부탁 드리는 것 같아 자제하겠습니다...^^
: : 좋은 하루 되셔요^^
: :
: : 최준호.스페로 님이 쓰신 글 :
: : : 안녕하세요 스페로 입니다.
: : :
: : : 이걸 완전히 C++빌더로 포팅 하느니 대강 만드러 봣습니다. 어짜피 세팅 UI라던지 여러 좌표를 파일로 저장한다던지
: : : 이런것들은 직접 작성 하시면 될거 같구요.
: : :
: : : 오토마우스라는게 어짜피 정해진 좌표로 마우스 이동시키고 누르기만 하면 되는 거라서...
: : : 아래와 같이 하면 됩니다.
: : :
: : : 일단 폼에 Edit를 3개 하나는 X구 하나는 Y그리고 하나는 타이머 인터벌
: : : 타이머 하나를 올려 놓습니다. 속성에서 Enable을 일단 false로 조정 합니다.
: : : 버튼을 두개 올려 놓습니다. 하나는 시작, 하나는 중지
: : :
: : : 중요한 코드는 마우스 커서의 위치 이동, 그리고 누르게 해주는 함수 두개만 쓰면 됩니다.
: : : 타이머 이벤트에 코드를 작성 합니다.
: : :
: : : 그럼 아래와 같은 코드가 되겠죠.
: : :
: : : 그럼 ~~
: : :
: : : //---------------------------------------------------------------------------
: : :
: : : #include <vcl.h>
: : : #pragma hdrstop
: : :
: : : #include "Unit1.h"
: : : //---------------------------------------------------------------------------
: : : #pragma package(smart_init)
: : : #pragma resource "*.dfm"
: : : TForm1 *Form1;
: : : //---------------------------------------------------------------------------
: : : __fastcall TForm1::TForm1(TComponent* Owner)
: : :   : TForm(Owner)
: : : {
: : : }
: : : //---------------------------------------------------------------------------
: : :
: : : void __fastcall TForm1::Button1Click(TObject *Sender)
: : : {
: : :   Timer1->Interval = Edit3->Text.ToInt();
: : :   Timer1->Enabled = true;
: : :
: : : }
: : : //---------------------------------------------------------------------------
: : : void __fastcall TForm1::Timer1Timer(TObject *Sender)
: : : {
: : :   SetCursorPos(Edit1->Text.ToInt(), Edit2->Text.ToInt());
: : :   mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, GetMessageExtraInfo());
: : :   mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, GetMessageExtraInfo());
: : :
: : : }
: : : //---------------------------------------------------------------------------
: : : void __fastcall TForm1::Button2Click(TObject *Sender)
: : : {
: : :   Timer1->Enabled = false;
: : : }
: : : //---------------------------------------------------------------------------
: : :
: : :
: : :
: : :
: : : 해지는아침 님이 쓰신 글 :
: : : : 오토마우스라는 프로그램을 짜 볼려고 시도하다가 잘 되지 않아 친구한데 프로그램 쏘쓰를 받았습니다.... 그런데 VC++로 짜여 있어서 초보에다 VC는 접해보지 않아 도통 모르겠습니다.
: : : : 고수분들 첨부한 파일을 BCB에서 쓸 수 있게 점 만들어 주셔요... 부탁드립니다.

+ -

관련 글 리스트
42121 [요청]vc++로 짜여진 프로그램인데요...누가 BCB로 바꿔 주셔요...제발 해지는아침 998 2005/10/09
42123     Re:[요청]vc++로 짜여진 프로그램인데요...누가 BCB로 바꿔 주셔요...제발 최준호.스페로 1251 2005/10/10
42130         답변 정말 감사드립니다... 해지는아침 1244 2005/10/11
42135             Re:답변 정말 감사드립니다... 최준호.스페로 1436 2005/10/12
42136                 Re:Re:덕분에 시원하게 해결됬습니다. 해지는아침 1945 2005/10/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.