#
|
# (C) Copyright 2018 Enthought, Inc., Austin, TX
|
# All right reserved.
|
#
|
# This file is open source software distributed according to the terms in
|
# LICENSE.txt
|
#
|
from __future__ import absolute_import
|
|
import ctypes
|
from ctypes.wintypes import (
|
BOOL, DWORD, HANDLE, HMODULE, LPCWSTR, WORD, HRSRC,
|
HGLOBAL, LPVOID)
|
|
from ._common import LONG_PTR, IS_INTRESOURCE
|
from ._util import check_null, check_zero, check_false, function_factory, dlls
|
|
_ENUMRESTYPEPROC = ctypes.WINFUNCTYPE(BOOL, HMODULE, LPVOID, LONG_PTR)
|
_ENUMRESNAMEPROC = ctypes.WINFUNCTYPE(BOOL, HMODULE, LPVOID, LPVOID, LONG_PTR)
|
_ENUMRESLANGPROC = ctypes.WINFUNCTYPE(
|
BOOL, HMODULE, LPVOID, LPVOID, WORD, LONG_PTR)
|
|
|
def ENUMRESTYPEPROC(callback):
|
def wrapped(handle, type_, param):
|
if IS_INTRESOURCE(type_):
|
type_ = int(type_)
|
else:
|
type_ = ctypes.cast(type_, LPCWSTR).value
|
return callback(handle, type_, param)
|
|
return _ENUMRESTYPEPROC(wrapped)
|
|
|
def ENUMRESNAMEPROC(callback):
|
def wrapped(handle, type_, name, param):
|
if IS_INTRESOURCE(type_):
|
type_ = int(type_)
|
else:
|
type_ = ctypes.cast(type_, LPCWSTR).value
|
if IS_INTRESOURCE(name):
|
name = int(name)
|
else:
|
name = ctypes.cast(name, LPCWSTR).value
|
return callback(handle, type_, name, param)
|
|
return _ENUMRESNAMEPROC(wrapped)
|
|
|
def ENUMRESLANGPROC(callback):
|
def wrapped(handle, type_, name, language, param):
|
if IS_INTRESOURCE(type_):
|
type_ = int(type_)
|
else:
|
type_ = ctypes.cast(type_, LPCWSTR).value
|
if IS_INTRESOURCE(name):
|
name = int(name)
|
else:
|
name = ctypes.cast(name, LPCWSTR).value
|
return callback(handle, type_, name, language, param)
|
|
return _ENUMRESLANGPROC(wrapped)
|
|
|
def _UpdateResource(hUpdate, lpType, lpName, wLanguage, lpData, cbData):
|
lp_type = LPCWSTR(lpType)
|
lp_name = LPCWSTR(lpName)
|
_BaseUpdateResource(hUpdate, lp_type, lp_name, wLanguage, lpData, cbData)
|
|
|
def _EnumResourceNames(hModule, lpszType, lpEnumFunc, lParam):
|
resource_type = LPCWSTR(lpszType)
|
_BaseEnumResourceNames(hModule, resource_type, lpEnumFunc, lParam)
|
|
|
def _EnumResourceLanguages(hModule, lpType, lpName, lpEnumFunc, lParam):
|
resource_type = LPCWSTR(lpType)
|
resource_name = LPCWSTR(lpName)
|
_BaseEnumResourceLanguages(
|
hModule, resource_type, resource_name, lpEnumFunc, lParam)
|
|
|
def _FindResourceEx(hModule, lpType, lpName, wLanguage):
|
resource_type = LPCWSTR(lpType)
|
resource_name = LPCWSTR(lpName)
|
return _BaseFindResourceEx(
|
hModule, resource_type, resource_name, wLanguage)
|
|
|
_EnumResourceTypes = function_factory(
|
dlls.kernel32.EnumResourceTypesW,
|
[HMODULE, _ENUMRESTYPEPROC, LONG_PTR],
|
BOOL,
|
check_false)
|
|
_LoadResource = function_factory(
|
dlls.kernel32.LoadResource,
|
[HMODULE, HRSRC],
|
HGLOBAL,
|
check_null)
|
|
_LockResource = function_factory(
|
dlls.kernel32.LockResource,
|
[HGLOBAL],
|
LPVOID,
|
check_null)
|
|
_SizeofResource = function_factory(
|
dlls.kernel32.SizeofResource,
|
[HMODULE, HRSRC],
|
DWORD,
|
check_zero)
|
|
_BeginUpdateResource = function_factory(
|
dlls.kernel32.BeginUpdateResourceW,
|
[LPCWSTR, BOOL],
|
HANDLE,
|
check_null)
|
|
_EndUpdateResource = function_factory(
|
dlls.kernel32.EndUpdateResourceW,
|
[HANDLE, BOOL],
|
BOOL,
|
check_false)
|
|
_BaseEnumResourceNames = function_factory(
|
dlls.kernel32.EnumResourceNamesW,
|
[HMODULE, LPCWSTR, _ENUMRESNAMEPROC, LONG_PTR],
|
BOOL,
|
check_false)
|
|
_BaseEnumResourceLanguages = function_factory(
|
dlls.kernel32.EnumResourceLanguagesW,
|
[HMODULE, LPCWSTR, LPCWSTR, _ENUMRESLANGPROC, LONG_PTR],
|
BOOL,
|
check_false)
|
|
_BaseFindResourceEx = function_factory(
|
dlls.kernel32.FindResourceExW,
|
[HMODULE, LPCWSTR, LPCWSTR, WORD],
|
HRSRC,
|
check_null)
|
|
_BaseUpdateResource = function_factory(
|
dlls.kernel32.UpdateResourceW,
|
[HANDLE, LPCWSTR, LPCWSTR, WORD, LPVOID, DWORD],
|
BOOL,
|
check_false)
|