docs: def _GetResources(hsrc, types=None, names=None, languages=None):
      """
      Get resources from hsrc.
      
      types = a list of resource types to search for (None = all)
      names = a list of resource names to search for (None = all)
      languages = a list of resource languages to search for (None = all)
      Return a dict of the form {type_: {name: {language: data}}} which 
      might also be empty if no matching resources were found.
      
      """
      if types: types = set(types)
      if names: names = set(names)
      if languages: languages = set(languages)
      res = {}
      try:
          # logger.debug("Enumerating resource types")
          enum_types = win32api.EnumResourceTypes(hsrc)
          if types and not "*" in types:
              enum_types = filter(lambda type_: 
                                  type_ in types, 
                                  enum_types)
          for type_ in enum_types:
              # logger.debug("Enumerating resources of type %s", type_)
              enum_names = win32api.EnumResourceNames(hsrc, type_)
              if names and not "*" in names:
                  enum_names = filter(lambda name: 
                                      name in names, 
                                      enum_names)
              for name in enum_names:
                  # logger.debug("Enumerating resources of type %s name %s", type_, name)
                  enum_languages = win32api.EnumResourceLanguages(hsrc, 
                                                                  type_, 
                                                                  name)
                  if languages and not "*" in languages:
                      enum_languages = filter(lambda language: 
                                              language in languages, 
                                              enum_languages)
                  for language in enum_languages:
                      data = win32api.LoadResource(hsrc, type_, name, language)
                      if not type_ in res:
                          res[type_] = {}
                      if not name in res[type_]:
                          res[type_][name] = {}
                      res[type_][name][language] = data
      except pywintypes.error, exception:
          if exception.args[0] in (ERROR_RESOURCE_DATA_NOT_FOUND,
                                   ERROR_RESOURCE_TYPE_NOT_FOUND,
                                   ERROR_RESOURCE_NAME_NOT_FOUND,
                                   ERROR_RESOURCE_LANG_NOT_FOUND):
              # logger.info('%s: %s', exception.args[1:3])
              pass
          else:
              raise exception
      return res