|
님의 답변 덕분에 여러가지가 시원하게 해결됬습니다...
정말 진심으로 감사 드립니다...
저도 열심히 해서...다른 사람의 질문에 성의껏 답변할 수 있도록 노력하겠습니다...
정말 감사 드립니다...^^ 좋은 하루 되셔요
최준호.스페로 님이 쓰신 글 :
: 안녕하세요 스페로 입니다.
: 다음과 같이 해보십시오.
: 먼저 폼에 버튼 하나 올리고... (이넘이 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에서 쓸 수 있게 점 만들어 주셔요... 부탁드립니다.
|