static void PollOverlayEvents(ulong handle) { if (m_cvrOverlay.HandleControllerOverlayInteractionAsMouse(handle, m_controller2ID)) { //controller points to the overlay and event was generated. Unsure if the call above must be called every tick to generate event VREvent_t oEvent = new VREvent_t(); uint oEventSize = (uint)Marshal.SizeOf(oEvent); while (m_cvrOverlay.PollNextOverlayEvent(handle, ref oEvent, oEventSize)) { Log.WriteLineAndConsole("OVERLAY event (#" + oEvent.trackedDeviceIndex + "): " + oEvent.eventType.ToString() + " " + Enum.GetName(typeof(EVREventType), oEvent.eventType)); switch (oEvent.eventType) { case (uint)EVREventType.VREvent_MouseMove: if (oEvent.trackedDeviceIndex == m_controller2ID) { Log.WriteLineAndConsole(" " + oEvent.data.mouse.x + "," + oEvent.data.mouse.y); } break; } } } ; }