public unsafe DirectMouse(Form form) { _form = form; _hWnd = form.Handle; if (_device == null) { using (var dinput = new DirectInput8W()) { _device = dinput.CreateDevice(SysGuid.GUID_SysMouse, null); } _device.SetDataFormat(DIDATAFORMAT.c_dfDIMouse).CheckError(); form.Deactivate += WndDeactivate; } }
public unsafe DirectKeyboard(Form form) { if (form == null) { throw new ArgumentNullException("form"); } _form = form; _hWnd = form.Handle; using (var dinput = new DirectInput8W()) { _device = dinput.CreateDevice(SysGuid.GUID_SysKeyboard, null); } _device.SetDataFormat(DIDATAFORMAT.c_dfDIKeyboard).CheckError(); _device.SetCooperativeLevel(_hWnd, DISCL.NONEXCLUSIVE | DISCL.FOREGROUND).CheckError(); form.Deactivate += WndDeactivate; TryAcquire(); _mapper.LoadMapFromString( global::ZXMAK2.Host.WinForms.Properties.Resources.Keyboard_Mdx); }
public void Dispose() { if (_device == null) { return; } // TODO: sync needed var device = _device; _device = null; _form.Deactivate -= WndDeactivate; if (_isAcquired) { _isAcquired = false; var hr = device.Unacquire(); if (hr.IsFailure) { Logger.Error("DirectKeyboard.Dispose: {0}", hr); } } device.Dispose(); }