2010-07-29 4 views
1

다음 상황이 있습니다 : 프로그램 자체를 변경하지 않고도 멀티 터치 이벤트에 반응 할 수있는 특수 3D 프로그램이 있습니다. 따라서 Windows 7의 멀티 터치 이벤트를 수신하고 해당 마우스 및 키보드 이벤트에서 해당 이벤트를 변환 한 후 해당 이벤트를 처리 할 수 ​​있도록 3D 프로그램에 에뮬레이트 된 이벤트를 보내는 매퍼 프로그램이 필요합니다.Win7 멀티 터치 이벤트를 잡아 마우스 및 키보드 이벤트로 변환하고 다른 응용 프로그램으로 보낼 수 있습니까?

나는 이미 많은 것을 읽고 시도해 왔으며, 현재의 접근 방법은 멀티 터치 이벤트를 포착하기 위해 3D 프로그램 위에 거의 투명한 오버레이 창이 있어야한다는 것입니다. 그러나 이것은 또한 문제입니다. 나는 생성 된 마우스 이벤트를 사용 가능한 3D 프로그램으로 전달할 수 없습니다. 지금은 mouse_event, SendMessage 등과 같은 pinvoke 함수를 사용했지만 그 중 아무 것도 나를 위해 일하지 않았습니다. 필자는 항상 3D 프로그램을 전면에 가져와야하기 때문에 이벤트를 보내고 나중에 매퍼 프로그램을 다시 앞에 배치해야했습니다. 이것은 매우 진절머리 나는 작품이다.

제 질문은 다소 다를 수 있습니다. 위에서 언급 한 작업을 수행 할 수있는 좋은 방법이 있습니까? 또는 백그라운드에서 프로세스에 마우스 및 키보드 이벤트를 보내는 좋은 방법이 있습니까?

private void OnMouseDown(object sender, MouseEventArgs e) 
    {  
     Point position = this.PointToScreen(new Point(e.Location.X, e.Location.Y)); 

     //Simulate the mouse event on the given position 
     this.Visible = false; 

     Cursor.Position = position; 
     mouse_event(Convert.ToUInt16(MouseEventFlags.LEFTDOWN), 0, 0, 0, 0); 
    } 

    private void OnMouseUp(object sender, MouseEventArgs e) 
    { 
     Point position = this.PointToScreen(new Point(e.Location.X, e.Location.Y)); 

     //Simulate the mouse event on the given position 
     Cursor.Position = e.Location; 
     mouse_event(Convert.ToUInt16(MouseEventFlags.LEFTUP), 0, 0, 0, 0); 

     this.Visible = true; 
    } 

    //Get a handle to the mouse event manager 
    [DllImport("user32.dll")] 
    private static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData, int dwExtraInfo); 

답변

0

어쩌면 InfoStrat.VE - Bing Maps 3D for WPF and Microsoft Surface를 보라 : 사람이 나에게 힌트 또는 제안을 줄 수

희망 ....

여기에 내가 지금 마우스 클릭을 시뮬레이션 방법입니다. Bind maps 컨트롤을 터치에 사용할 수 있도록했습니다.

아마도 도움이됩니다.

0

Win32에서 마우스/키보드 이벤트를 특정 프로세스로 보낼 수있는 방법이 없습니다. 즉 그러나, 당신이 작업이 방법을 얻을 수있을 말했다되는 :

  1. 가 터치 이벤트를 얻을 수있는 터치 윈도우로 매퍼 창을 등록합니다.
  2. 메시지 루프에서 WM_NCHITTEST에 대한 처리기를 추가하고 DefWindowProc()을 호출하여 기본 처리기를 가져온 다음 HTCLIENT 반환 값을 HTTRANSPARENT로 변환합니다. 이렇게하면 Windows가 창을 통해 마우스 이벤트를 기본 창으로 전달합니다.
  3. 매퍼 창이 클라이언트 프로그램과 별도의 프로세스에있는 경우에는이 기능이 작동하지 않습니다. 그렇다면 AttachThreadInput으로 해킹을해야합니다. 덧붙여 말하면 병합 된 스레드 대기열은 버그가 발생하기 쉽기 때문에이 방법을 권장하지 않습니다.
관련 문제