class_docstr: Utility to keep track of which handles are connectod to which callbacks.
  
  `add_win32_handle` starts a tiny event loop in another thread which waits
  for the Win32 handle to become ready. When this happens, the callback will
  be called in the current asyncio event loop using `call_soon_threadsafe`.
  
  `remove_win32_handle` will stop this tiny event loop.
  
  NOTE: We use this technique, so that we don't have to use the
        `ProactorEventLoop` on Windows and we can wait for things like stdin
        in a `SelectorEventLoop`. This is important, because our inputhook
        mechanism (used by IPython), only works with the `SelectorEventLoop`.
docstr: Remove a Win32 handle from the event loop.
  Return either the registered handler or `None`.
docstr_tok: ["Remove","a","Win32","handle","from","the","event","loop",".","Return","either","the","registered","handler","or","`","None","`","."]
code: def remove_win32_handle(
      self, handle: HANDLE
  ) -> Callable[[], None] | None:
      """
      Remove a Win32 handle from the event loop.
      Return either the registered handler or `None`.
      """
      if handle.value is None:
          return None  # Ignore.
  
      # Trigger remove events, so that the reader knows to stop.
      try:
          event = self._remove_events.pop(handle.value)
      except KeyError:
          pass
      else:
          windll.kernel32.SetEvent(event)
  
      try:
          return self._handle_callbacks.pop(handle.value)
      except KeyError:
          return None
  
imports: from __future__ import annotations
  import os
  import sys
  from abc import abstractmethod
  from asyncio import get_running_loop
  from contextlib import contextmanager
  from ..utils import SPHINX_AUTODOC_RUNNING
  from ctypes import Array, pointer
  from ctypes.wintypes import DWORD, HANDLE
  from typing import Callable, ContextManager, Iterable, Iterator, TextIO
  from prompt_toolkit.eventloop import run_in_executor_with_context
  from prompt_toolkit.eventloop.win32 import create_win32_event, wait_for_handles
  from prompt_toolkit.key_binding.key_processor import KeyPress
  from prompt_toolkit.keys import Keys
  from prompt_toolkit.mouse_events import MouseButton, MouseEventType
  from prompt_toolkit.win32_types import INPUT_RECORD, KEY_EVENT_RECORD, MOUSE_EVENT_RECORD, STD_INPUT_HANDLE, EventTypes
  from .ansi_escape_sequences import REVERSE_ANSI_SEQUENCES
  from .base import Input
label_desc: Use image node_id 3 for calling the _Win32Handles obj's underlying member method code with example usage: obj.remove_win32_handle(handle) and returns: None, self, None