Q&A

  • 훅을 이용한 마우스 움직임 포착하기
먼저 이글에 관심을 가져주셔서 감사 (^_^)



훅(Hook)을 이용한 마우스의 움직임을 알고싶은데 어떻게 하는지 모르겠네요. 아시는 분 있으면 알려주세요.



제가 알고있는 건 이런게=> WH_MOUSE 게 있다는거 밖에는... 근데 정말! 꼭! 이 방법을 이용해야되거든요. WH_MOUSE 을 어떻게 이용해야 되는지 도 잘 모르겠고 & 훅사용시 함수만드는 법도 잘 모르겠고...(전 정말 초보거든요)



다른 분이 설명하신 강좌도 봤는데 제게는 어렵더라구요. 델파이코리아에서 민성기님이 쓰신 훅 강좌가 많은 도움이
7  COMMENTS
  • Profile
    이준해 2000.03.21 22:48
    // if Code >= 0 then begin

    Point := PMouseHookStruct(MouseHook)^.pt;

    form1.Canvas.TextOut(10, 10, intToStr(point.x) + ' : ' + intToStr(point.y));

    // end;

    Result := CallNextHookEx(myMouse,Code,Msg,MouseHook);



    처럼 Code(이것이 몬지는 저도 잘 모르구여.

    필요하다면 delphi 아래.. Common ..MSHelp 에 win32.hlp를 보세요)

    를 Check 안하면 system 전체에서 마우스 위치를 읽어냅니다.



  • Profile
    이준해 2000.03.21 19:26
    쪼매 까다롭긴 한데.. 아래 소스를 참고하세요.

    단, 잘못 사용하면 시스템(모, 컴이 망가지진 않겠지만..) 맛 갑니다.

    신중하시길...



    var

    myMouse: HHook;



    function MouseHookCallBack(Code: integer; Msg: WPARAM;

    MouseHook: LPARAM): LRESULT; stdcall;

    begin

    if Code >= 0 then begin

    // 원하는 작업을 여기에서 하세요.

    end;

    Result := CallNextHookEx(whMouse,Code,Msg,MouseHook);

    end;



    procedure TForm1.FormCreate(Sender: TObject);

    begin

    myMouse := SetWindowsHookEx(WH_MOUSE,MouseHookCallBack,

    GetModuleHandleFromInstance,

    GetCurrentThreadID);

    end;





    왕초보 wrote:

    > 먼저 이글에 관심을 가져주셔서 감사 (^_^)

    >

    > 훅(Hook)을 이용한 마우스의 움직임을 알고싶은데 어떻게 하는지 모르겠네요. 아시는 분 있으면 알려주세요.

    >

    > 제가 알고있는 건 이런게=> WH_MOUSE 게 있다는거 밖에는... 근데 정말! 꼭! 이 방법을 이용해야되거든요. WH_MOUSE 을 어떻게 이용해야 되는지 도 잘 모르겠고 & 훅사용시 함수만드는 법도 잘 모르겠고...(전 정말 초보거든요)

    >

    > 다른 분이 설명하신 강좌도 봤는데 제게는 어렵더라구요. 델파이코리아에서 민성기님이 쓰신 훅 강좌가 많은 도움이
  • Profile
    왕초보 2000.03.21 19:47
    우선 답변 감사드립니다.



    근데 제가 초보라 정말 잘 모르거든요. 좀 자세히 설명해주시면 안될까요?(죄송...)

    적어주신 소스부분에 dll파일에 적어줘야 할 부분은 없는건지요? & code > 0 크다면 마우스의 움직임이 있건가요? 음 keyboard 사용할때처럼 HC_ACTION 같은건 없는건지요?

    음 제가 말씀드리고 싶은건



    SetWindowsHookEx(WH_MOUSE,MouseHookCallBack,GetModuleHandleFromInstance,0)을 해서



    아래의 함수를 호출할때 Code , Msg, MouseHook 에 어떤 값들이 전달되는지 자세히 알고싶거든요.



    function MouseHookCallBack(Code: integer; Msg: WPARAM;

    MouseHook: LPARAM): LRESULT; stdcall;



    음 그리고 이 값들을 어떻게 사용해야 되는지 알고싶습니다.



    정말 죄송합니다. 알고계시면 좀 자세히 설명해주시면 감사하겠습니다.



  • Profile
    이준해 2000.03.21 21:50
    http://www.deja.com/home_ps.shtml



    에서 mouse capture 로 검색해 보세여



    많은 답이 있습니다.



  • Profile
    이준해 2000.03.21 21:48
    자세한 API 해설까기 곁들일 정도는 아닙니다. 아래부분을 테스트해 보세요

    환경 : 델파이 4,

    방법 : 폼하나 만드시고, formCreate 에 아래 procedure 를 쓰세여.

    결과 : mouse point 가 화면에 출력될 겁니다.

    break 거시지 말구여.







    var

    myMouse: HHook;



    function MouseHookCallBack(Code: integer; Msg: WPARAM;

    MouseHook: LPARAM): LRESULT; stdcall;

    var

    point: TPoint;

    begin

    if Code >= 0 then begin

    Point := PMouseHookStruct(MouseHook)^.pt;

    form1.Canvas.TextOut(10, 10, intToStr(point.x) + ' : ' + intToStr(point.y));

    end;

    Result := CallNextHookEx(myMouse,Code,Msg,MouseHook);

    end;



    procedure TForm1.FormCreate(Sender: TObject);

    begin

    myMouse := SetWindowsHookEx(WH_MOUSE, MouseHookCallBack, 0, GetCurrentThreadID);

    end;







  • Profile
    배움이 2000.03.21 19:25
    왕초보 wrote:

    > 먼저 이글에 관심을 가져주셔서 감사 (^_^)

    >

    > 훅(Hook)을 이용한 마우스의 움직임을 알고싶은데 어떻게 하는지 모르겠네요. 아시는 분 있으면 알려주세요.

    >

    > 제가 알고있는 건 이런게=> WH_MOUSE 게 있다는거 밖에는... 근데 정말! 꼭! 이 방법을 이용해야되거든요. WH_MOUSE 을 어떻게 이용해야 되는지 도 잘 모르겠고 & 훅사용시 함수만드는 법도 잘 모르겠고...(전 정말 초보거든요)

    >

    > 다른 분이 설명하신 강좌도 봤는데 제게는 어렵더라구요. 델파이코리아에서 민성기님이 쓰신 훅 강좌가 많은 도움이
  • Profile
    왕초보 2000.03.21 19:55
    답변감사드립니다.



    알려주신 방법도 좋은 방법인것 같습니다. 하지만 제가 하고싶은 일하고는 조금은 다른 방법인것 같아서...(죄송합니다.제가 질문을 정확하게 했어야 하는건데...)



    저는 훅을 이용해서 시스템 전체의 마우스 움직임을 알고싶은 거라서... 음~ 그러니까 다른 응용 프로그램을 사용중이라도 마우스움직임 감시는 계속되야한다는 거죠. 윈도우의 화면 보호기처럼...



    만약 다른 좋은 의견이나 훅에 관해서 알고계시다면 답변부탁드립니다.





    • 류종택
      2000.03.21 23:18
      저는 FastNet이 별로 탐탁지 않아.. 다른 콤포넌트를 다운 받아 사용하지만.. 별문제 없더군요.. ISAPI ...
    • 엄화용
    • 2000.03.21 20:55
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 윤진화
      2000.03.22 06:26
      > 지로용지가 > 고객용 . 은행용 . 금융결제원용 > ------ . ------ . ----...
    • 영~
    • 2000.03.21 20:53
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.03.21 21:50
      타임스탬프(TTimeStamp)를 사용하시면 날짜와 시간이 정수형으로 변환 됩니다. 날짜는 기준일이 (0001/01/...
    • 이윤환
    • 2000.03.21 20:47
    • 6 COMMENTS
    • /
    • 0 LIKES
    • 이준해
      2000.03.21 23:05
    • 최용일
      2000.03.21 21:49
    • 이윤환
      2000.03.21 21:32
    • 최용일
      2000.03.21 21:49
    • 이윤환
      2000.03.21 22:25
    • 최용일
      2000.03.21 23:02
    • 류한규
    • 2000.03.21 20:20
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 류종택
      2000.03.21 23:20
      Paradox와 같이 혼자서 사용하도록 고안된 DB를.. 여러명이서 사용하는 것 자체가 무리가 있습니다.. 물...
    • 이수정
      2000.03.22 02:32
      다른 답변 주신 분들도 모두 감사합니다.
    • 나도델초
      2000.03.21 23:25
      이수정 wrote: > 안녕하세요.. > > form이 생성될때.. 메시지 박스로 비밀번호를 먼저 물어 봅니다. ...
    • 류종택
      2000.03.21 23:21
      해당 폼만 안보이는 것이 아니라.. 전체를 종료하실 때는.. Application.Terminate; 를 사용하세요,, ...
    • 최용일
      2000.03.21 20:40
      메인 폼을 종료시켜버리세요... 메인폼을 종료시키면 하위폼도 자동으로 종료됩니다. (Form1.Close) ...
    • 영~
    • 2000.03.21 20:10
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최석기
      2000.03.21 22:02
      영~ wrote: > 안녕하세요 > 델파이에서 자료를 엑셀로 저장하고 싶어 엑셀로 저장프로그램을 > 하고 있...
    • 허준아버지
      2001.11.03 03:12
      최석기 wrote: > 영~ wrote: > > 안녕하세요 > > 델파이에서 자료를 엑셀로 저장하고 싶어 엑셀로 저장...
    • 류종택
      2000.03.21 23:24
      DBGrid의 MultiSelect 옵션을 추가하시고.. 아래의 소스를 참고로 작성해 보세요.. From 류.. -----...
    • sensemin
    • 2000.03.21 19:06
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 안경옥
      2000.03.21 22:47
      sensemin wrote: > 제가 초보라서 조금 애매모호하게 들려서 자세히 질문을 드리겠습니다. > > 제 프로...
    • 왕초보
    • 2000.03.21 18:55
    • 7 COMMENTS
    • /
    • 0 LIKES
    • 이준해
      2000.03.21 22:48
      // if Code >= 0 then begin Point := PMouseHookStruct(MouseHook)^.pt; form1.Canvas.TextOut(10...
    • 이준해
      2000.03.21 19:26
      쪼매 까다롭긴 한데.. 아래 소스를 참고하세요. 단, 잘못 사용하면 시스템(모, 컴이 망가지진 않겠지만..)...
    • 왕초보
      2000.03.21 19:47
      우선 답변 감사드립니다. 근데 제가 초보라 정말 잘 모르거든요. 좀 자세히 설명해주시면 안될까요?(죄...
    • 이준해
      2000.03.21 21:50
      http://www.deja.com/home_ps.shtml 에서 mouse capture 로 검색해 보세여 많은 답이 있습니다.
    • 이준해
      2000.03.21 21:48
      자세한 API 해설까기 곁들일 정도는 아닙니다. 아래부분을 테스트해 보세요 환경 : 델파이 4, 방법 : 폼...
    • 배움이
      2000.03.21 19:25
      왕초보 wrote: > 먼저 이글에 관심을 가져주셔서 감사 (^_^) > > 훅(Hook)을 이용한 마우스의 움직임을...
    • 왕초보
      2000.03.21 19:55
      답변감사드립니다. 알려주신 방법도 좋은 방법인것 같습니다. 하지만 제가 하고싶은 일하고는 조금은 다...
    • 한근수
    • 2000.03.21 18:41
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 강인규
      2000.03.21 19:15
      뭐 c는 어떤지 모르겠지만....이렇게 하심 됩니다. 홀수일때만 메세지를 보여줍니다. procedure TForm1...
    • 홍순용
      2000.03.21 19:15
      한근수 wrote: > For i= 1 to 10 do > begin > ..... > end; > > 위와 같은 기본적인 for문은 i가 1...
    • 이준해
      2000.03.21 19:12
      for, while 등 loop수행도중 다시 loop의 처음으로 가고자 할때는 continue; For i=1 to 10 do begin i...
    • kosmo
      2000.03.21 17:38
      만약 질문하신 프로그램이 항상 운영중이라면,, 좀 단순무식하지만.. 다음의 방법이 가장 무난하다고 생각...
    • 황선희
      2000.03.21 18:37
      budgie wrote: > 이런게 있더군요... > 델파이4 정품에 따라 나오는 > 총 3세권 1500 페이지 분량의 ...