title: Python win32ui.error: CreateCompatibleDC failed
body: <p>I'm trying to capture sceen using win32 for opencv but when i start it gives me an error about the CreateCompatibleDC function.</p>
  <p>That's the first time i touch this library so i don't really know how to fix this.</p>
  <pre><code>import numpy as np
  import win32gui,win32ui,win32con
  
  
  class WindowCapture:
  
      # properties
      w = 0
      h = 0
      hwnd = None
      cropped_x = 0
      cropped_y = 0
      offset_x = 0
      offset_y = 0
  
      # constructor
      def __init__(self, window_name):
          # find the handle for the window we want to capture
          self.hwnd = win32gui.FindWindow(None, window_name)
          if not self.hwnd:
              raise Exception('Window not found: {}'.format(window_name))
  
          # get the window size
          window_rect = win32gui.GetWindowRect(self.hwnd)
          self.w = window_rect[2] - window_rect[0]
          self.h = window_rect[3] - window_rect[1]
  
          # account for the window border and titlebar and cut them off
          border_pixels = 8
          titlebar_pixels = 30
          self.w = self.w - (border_pixels * 2)
          self.h = self.h - titlebar_pixels - border_pixels
          self.cropped_x = border_pixels
          self.cropped_y = titlebar_pixels
  
          # set the cropped coordinates offset so we can translate screenshot
          # images into actual screen positions
          self.offset_x = window_rect[0] + self.cropped_x
          self.offset_y = window_rect[1] + self.cropped_y
  
      def get_screenshot(self):
  
          # get the window image data
          wDC = win32gui.GetWindowDC(self.hwnd)
          dcObj = win32ui.CreateDCFromHandle(wDC)
          cDC = dcObj.CreateCompatibleDC()
          dataBitMap = win32ui.CreateBitmap()
          dataBitMap.CreateCompatibleBitmap(dcObj, self.w, self.h)
          cDC.SelectObject(dataBitMap)
          cDC.BitBlt((0, 0), (self.w, self.h), dcObj, (self.cropped_x, self.cropped_y), win32con.SRCCOPY)
  
          # convert the raw data into a format opencv can read
          #dataBitMap.SaveBitmapFile(cDC, 'debug.bmp')
          signedIntsArray = dataBitMap.GetBitmapBits(True)
          img = np.fromstring(signedIntsArray, dtype='uint8')
          img.shape = (self.h, self.w, 4)
  
          # free resources
          dcObj.DeleteDC()
          cDC.DeleteDC()
          win32gui.ReleaseDC(self.hwnd, wDC)
          win32gui.DeleteObject(dataBitMap.GetHandle())
  
          # drop the alpha channel, or cv.matchTemplate() will throw an error like:
          #   error: (-215:Assertion failed) (depth == CV_8U || depth == CV_32F) &amp;&amp; type == _templ.type() 
          #   &amp;&amp; _img.dims() &lt;= 2 in function 'cv::matchTemplate'
          img = img[...,:3]
  
          # make image C_CONTIGUOUS to avoid errors that look like:
          #   File ... in draw_rectangles
          #   TypeError: an integer is required (got type tuple)
          # see the discussion here:
          # https://github.com/opencv/opencv/issues/14866#issuecomment-580207109
          img = np.ascontiguousarray(img)
  
          return img
  
      # find the name of the window you're interested in.
      # once you have it, update window_capture()
      # https://stackoverflow.com/questions/55547940/how-to-get-a-list-of-the-name-of-every-open-window
      def list_window_names(self):
          def winEnumHandler(hwnd, ctx):
              if win32gui.IsWindowVisible(hwnd):
                  print(hex(hwnd), win32gui.GetWindowText(hwnd))
          win32gui.EnumWindows(winEnumHandler, None)
  
      # translate a pixel position on a screenshot image to a pixel position on the screen.
      # pos = (x, y)
      # WARNING: if you move the window being captured after execution is started, this will
      # return incorrect coordinates, because the window position is only calculated in
      # the __init__ constructor.
      def get_screen_position(self, pos):
          return (pos[0] + self.offset_x, pos[1] + self.offset_y)
  </code></pre>
  <p>That's what i wrote, referring to <a href="https://www.youtube.com/watch?v=WymCpVUPWQ4&amp;list=PL1m2M8LQlzfKtkKq2lK5xko4X-8EZzFPI&amp;index=4" rel="nofollow noreferrer">Learn Code By Gaming video</a></p>
  <p>But when start, here's the error:</p>
  <pre><code>File &quot;C:\X\windowcapture.py&quot;, line 49, in get_screenshot
          dataBitMap.CreateCompatibleBitmap(dcObj, self.w, self.h)
      win32ui.error: CreateCompatibleDC failed
  </code></pre>