예제 #1
0
        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;
            }
        }
예제 #2
0
 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);
 }
예제 #3
0
        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();
        }