2013-12-13 3 views
2

Kinect를 사용하여 웹 사이트 (JS)에서 놀고 있습니다. 해당 웹 사이트에는 상호 작용할 수있는 3D 그래프가 있습니다. 마우스 휠 회전이 크기를 늘리거나 줄이는 동안 마우스 왼쪽 버튼을 누른 상태에서 마우스를 움직이면 회전합니다. Kinect를 사용하여이 모든 작업을 수행하고 싶습니다.User32.dll의 sendInput 메서드에 대해 mouse_input에 적절한 줌 값을 설정하는 방법은 무엇입니까?

I 직면하고 문제 I 오른쪽 손목과 왼쪽 손목 사이의 거리에 mouse_event dwData 즉, 줌 값 준)

1이다. 이것은 줌인을 줌인하고 있지만 매우 느린 페이스에서 줌 값에 더 높은 숫자를 곱해 보았는데 작동하지 않았습니다. 관련 코드는 다음과 같습니다

internal struct MouseInput 
    { 
     public int X; 
     public int Y; 
     public float MouseData; 
     public uint Flags; 
     public uint Time; 
     public IntPtr ExtraInfo; 
    } 

internal struct Input 
    { 
     public int Type; 
     public MouseInput MouseInput; 
    } 

Input[] i = new Input[1]; 

i[0] = new Input(); 
i[0].Type = InputMouse; 
i[0].MouseInput.Flags = MouseEventWheel; 
i[0].MouseInput.MouseData = zoomVal * 1000; 

uint result = SendInput(3, i, Marshal.SizeOf(i[0])); 

위 코드에서 zoomVal은 왼쪽 및 오른쪽 손목 사이의 거리에서 비롯됩니다. 나는 그것을 그대로 유지하거나 1000으로 곱하면 여전히 느린 속도로 확대됩니다.

답변

3
public float MouseData; 

잘못된 유형입니다. MOUSEINPUT.mouseData 필드는 실제로 Windows의 DWORD입니다. 단순히 C#에서. MSDN Library에서 볼 수 있습니다. 또는 pinvoke.net 기사, 보통 좋은 pinvoke 선언 (YMMV)을 찾을 꽤 괜찮은 장소.

결과가 매우 임의적이므로 C# 코드는 IEEE-754 형식의 단 정밀도 부동 소수점 값을 생성하지만 Windows/Kinect는이를 정수로 읽습니다. "매우 느린 속도"는 분명히 매우 높습니다. 곱하기 값은 지수를 나타내는 값의 비트 만 증가시킵니다.

대신 public int MouseData;으로 설정하십시오.