CreateFile() private method

private CreateFile ( string lpFileName, FileAccess dwDesiredAccess, FileShare dwShareMode, IntPtr SecurityAttributes, FileMode dwCreationDisposition, FileAttributes dwFlagsAndAttributes, IntPtr hTemplateFile ) : SafeFileHandle
lpFileName string
dwDesiredAccess FileAccess
dwShareMode FileShare
SecurityAttributes System.IntPtr
dwCreationDisposition FileMode
dwFlagsAndAttributes FileAttributes
hTemplateFile System.IntPtr
return SafeFileHandle
Ejemplo n.º 1
0
        private static void Refresh(object o)
        {
            var indicators  = new KEYBOARD_INDICATOR_PARAMETERS();
            int buffer_size = (int)Marshal.SizeOf(indicators);

            var led_vk = Settings.LedKey.Value[0].VirtualKey;

            // NOTE: I was unable to make IOCTL.KEYBOARD_QUERY_INDICATORS work
            // properly, but querying state with GetKeyState() seemed more
            // robust anyway. Think of the user setting Caps Lock as their
            // compose key, entering compose state, then suddenly changing
            // the compose key to Shift: the LED state would be inconsistent.
            foreach (var kv in m_vk_to_flag)
            {
                var vk   = kv.Key;
                var flag = kv.Value;
                if (NativeMethods.GetKeyState(vk) != 0)
                {
                    indicators.LedFlags |= flag;
                }
                else if (Composer.IsComposing)
                {
                    if (Composer.CurrentComposeKey.VirtualKey == vk && led_vk == VK.COMPOSE ||
                        led_vk == vk)
                    {
                        indicators.LedFlags |= flag;
                    }
                }
            }

            lock (m_kbd_devices)
            {
                foreach (ushort id in m_kbd_devices)
                {
                    indicators.UnitId = id;

                    using (var handle = NativeMethods.CreateFile($@"\\.\dos_kbd{id}",
                                                                 FileAccess.Write, FileShare.Read, IntPtr.Zero,
                                                                 FileMode.Open, FileAttributes.Normal, IntPtr.Zero))
                    {
                        int bytesReturned;
                        NativeMethods.DeviceIoControl(handle, IOCTL.KEYBOARD_SET_INDICATORS,
                                                      ref indicators, buffer_size,
                                                      IntPtr.Zero, 0, out bytesReturned,
                                                      IntPtr.Zero);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        public static void UpdateKeyboardLeds(object sender, EventArgs e)
        {
            var indicators  = new KEYBOARD_INDICATOR_PARAMETERS();
            int buffer_size = (int)Marshal.SizeOf(indicators);

            // NOTE: I was unable to make IOCTL.KEYBOARD_QUERY_INDICATORS work
            // properly, but querying state with GetKeyState() seemed more
            // robust anyway. Think of the user setting Caps Lock as their
            // compose key, entering compose state, then suddenly changing
            // the compose key to Shift: the LED state would be inconsistent.
            if (NativeMethods.GetKeyState(VK.CAPITAL) != 0 ||
                (m_composing && Settings.ComposeKey.Value.VirtualKey == VK.CAPITAL))
            {
                indicators.LedFlags |= KEYBOARD.CAPS_LOCK_ON;
            }

            if (NativeMethods.GetKeyState(VK.NUMLOCK) != 0 ||
                (m_composing && Settings.ComposeKey.Value.VirtualKey == VK.NUMLOCK))
            {
                indicators.LedFlags |= KEYBOARD.NUM_LOCK_ON;
            }

            if (NativeMethods.GetKeyState(VK.SCROLL) != 0 ||
                (m_composing && Settings.ComposeKey.Value.VirtualKey == VK.SCROLL))
            {
                indicators.LedFlags |= KEYBOARD.SCROLL_LOCK_ON;
            }

            for (ushort i = 0; i < 4; ++i)
            {
                indicators.UnitId = i;

                using (var handle = NativeMethods.CreateFile(@"\\.\" + "dos_kbd" + i.ToString(),
                                                             FileAccess.Write, FileShare.Read, IntPtr.Zero,
                                                             FileMode.Open, FileAttributes.Normal, IntPtr.Zero))
                {
                    int bytesReturned;
                    NativeMethods.DeviceIoControl(handle, IOCTL.KEYBOARD_SET_INDICATORS,
                                                  ref indicators, buffer_size,
                                                  IntPtr.Zero, 0, out bytesReturned,
                                                  IntPtr.Zero);
                }
            }
        }