2010-01-05 4 views
2

마우스가 입력하는 X, Y 값에 액세스 할 수있는 XP/Vista/7에서 작동하는 글로벌 마우스 훅을 만들려고합니다.글로벌 마우스 후크 + 마우스 입력 시뮬레이션

1 : 1 그들이 윈도우 ...

나는 또한 실제 마우스 입력 사이에 마우스 입력을 시뮬레이션 할 수 있도록하려는

... 예를 들어

충돌, 말할 수 우리의 입력이처럼 보였다 , 0 2 : 2, 3 : 3, 4 :

입력 번호 4를 가로 채고 'if'문을 통해 실행할 수 있기를 원합니다. 입력 값이 특정 매개 변수와 일치하면 값을 더하거나 뺀 값을 수정하고 싶습니다 ...

마우스는 125Hz의 기본 폴링 속도와 1000HZ의 최대를 가진 USB ...

내가 '사이'입력을 '주입'하고 싶은 (폴링 율이 적은 1000HZ 이상 설정 특히) 가능한 경우 실제 마우스 업데이트 (중요) 예 :

(밀리 초)

,0 0,016 - - 363,210

0008 1.0 0032 - 2,0

그래서 ... 125Hz에서 업데이트하는 I는 입력 주파수를 감지하고 할 수있는 마우스가 다른 모든 입력을 입력을 보내? ?? 예를 들어 마우스 주파수를 125hz에서 250hz로 두 배로 늘릴 수 있고 설정 한 규칙에 따라 업데이트를 시뮬레이션 할 수 있습니다 ...

이 중 어떤 것이 합리적인 것처럼 보입니까? 지금 저는 C#에서 일하고 있습니다.이 튜토리얼의 "Gma.UserActivityMonitor"와 협력하고 있습니다 : http://www.codeproject.com/KB/cs/globalhook.aspx하지만 어떤 이유에서든이 코드를 전체 화면 게임과 함께 사용하게되면 마우스 입력에 사용할 수없는 지연이 생깁니다 후크에 ...

아마도 내가 C로 뭔가를 쓸 필요가 + +? 어떤 도움이라도 대단히 감사하겠습니다. 감사!

+0

소리가 나지 않게 들립니다. 왜 그것을해야합니까? – Skilldrick

+0

3D 메뉴 시스템으로 Windows를 오버레이하는 마우스 인터페이스를 만들고 싶습니다. 마우스 입력을 유지하면서 회전, 확대/축소, 이동 등을 할 수 있어야합니다. 마우스 입력을 연결할 수 있어야합니다. 낮은 레벨 및 그것을 수정/변조. – Drax

답변

1

잘하면 this link on grabbing raw mouse input이 도움이 될 것입니다.이 라이브러리에는 C# 및 C++ 용으로 작성된 라이브러리가 포함되어 있습니다. 그것은 Windows에서 여러 개의 마우스를 사용할 수 있도록하기위한 것이지만 잘하면 당신이 원하는 것을 사용하고있는 것을 에뮬레이트 할 수 있습니다.

1

나는 당신을 도울 수있는 라이브러리를 만들었습니다. 간단한 c 라이브러리이고 can work on games where common windows api would not입니다.

다음 샘플이 라이브러리와 마우스 동작을 반전하는 방법을 보여줍니다, 그것은 기본적으로 그냥 의해 -1 수직 축에서 변위를 곱 그래서 그들은 반대 방향에서 발생 : 체크 거기

#include <interception.h> 
#include "utils.h" // for process priority control 

enum ScanCode 
{ 
    SCANCODE_ESC = 0x01 
}; 

int main() 
{ 
    InterceptionContext context; 
    InterceptionDevice device; 
    InterceptionStroke stroke; 

    raise_process_priority(); 

    context = interception_create_context(); 

    interception_set_filter(context, interception_is_keyboard, INTERCEPTION_FILTER_KEY_DOWN | INTERCEPTION_FILTER_KEY_UP); 
    interception_set_filter(context, interception_is_mouse, INTERCEPTION_FILTER_MOUSE_MOVE); 

    while(interception_receive(context, device = interception_wait(context), &stroke, 1) > 0) 
    { 
     if(interception_is_mouse(device)) 
     { 
      InterceptionMouseStroke &mstroke = *(InterceptionMouseStroke *) &stroke; 

      if(!(mstroke.flags & INTERCEPTION_MOUSE_MOVE_ABSOLUTE)) mstroke.y *= -1; 

      interception_send(context, device, &stroke, 1); 
     } 

     if(interception_is_keyboard(device)) 
     { 
      InterceptionKeyStroke &kstroke = *(InterceptionKeyStroke *) &stroke; 

      interception_send(context, device, &stroke, 1); 

      if(kstroke.code == SCANCODE_ESC) break; 
     } 
    } 

    interception_destroy_context(context); 

    return 0; 
}  

당신은 볼 수 있습니다 수직 변위를 반전시키기 전에 INTERCEPTION_MOUSE_MOVE_ABSOLUTE 플래그를 설정하십시오. 일반적으로 운영 체제는 상대 좌표로 작동하지만 마우스가 상대 좌표가 아니라 절대 좌표 형식으로 작동한다는 사실을 경험했습니다. 간략하게하기 위해이 샘플은 상대 변위만을 반전합니다.

자세한 내용은 http://oblita.com/Interception에서 확인할 수 있습니다.

+0

고맙습니다. 나는 확실히 당신의 도서관을 들여다 볼 것입니다. –