Index: Lib/ctypes/wintypes.py =================================================================== --- Lib/ctypes/wintypes.py (revision 65908) +++ Lib/ctypes/wintypes.py (working copy) @@ -167,19 +167,30 @@ ("cFileName", c_wchar * MAX_PATH), ("cAlternateFileName", c_wchar * 14)] -__all__ = ['ATOM', 'BOOL', 'BOOLEAN', 'BYTE', 'COLORREF', 'DOUBLE', 'DWORD', - 'FILETIME', 'FLOAT', 'HACCEL', 'HANDLE', 'HBITMAP', 'HBRUSH', - 'HCOLORSPACE', 'HDC', 'HDESK', 'HDWP', 'HENHMETAFILE', 'HFONT', - 'HGDIOBJ', 'HGLOBAL', 'HHOOK', 'HICON', 'HINSTANCE', 'HKEY', - 'HKL', 'HLOCAL', 'HMENU', 'HMETAFILE', 'HMODULE', 'HMONITOR', - 'HPALETTE', 'HPEN', 'HRGN', 'HRSRC', 'HSTR', 'HTASK', 'HWINSTA', - 'HWND', 'INT', 'LANGID', 'LARGE_INTEGER', 'LCID', 'LCTYPE', - 'LGRPID', 'LONG', 'LPARAM', 'LPCOLESTR', 'LPCSTR', 'LPCVOID', - 'LPCWSTR', 'LPOLESTR', 'LPSTR', 'LPVOID', 'LPWSTR', 'MAX_PATH', - 'MSG', 'OLESTR', 'POINT', 'POINTL', 'RECT', 'RECTL', 'RGB', - 'SC_HANDLE', 'SERVICE_STATUS_HANDLE', 'SHORT', 'SIZE', 'SIZEL', - 'SMALL_RECT', 'UINT', 'ULARGE_INTEGER', 'ULONG', 'USHORT', - 'VARIANT_BOOL', 'WCHAR', 'WIN32_FIND_DATAA', 'WIN32_FIND_DATAW', - 'WORD', 'WPARAM', '_COORD', '_FILETIME', '_LARGE_INTEGER', - '_POINTL', '_RECTL', '_SMALL_RECT', '_ULARGE_INTEGER', 'tagMSG', - 'tagPOINT', 'tagRECT', 'tagSIZE'] +# types which has pointer types (ex. LPDWORD, LPCDWORD) +names_with_lp = ['ATOM', 'BOOL', 'BOOLEAN', 'BYTE', 'COLORREF', 'DOUBLE', + 'DWORD', 'FILETIME', 'FLOAT', 'HACCEL', 'HANDLE', 'HBITMAP', + 'HBRUSH', 'HCOLORSPACE', 'HDC', 'HDESK', 'HDWP', + 'HENHMETAFILE', 'HFONT', 'HGDIOBJ', 'HGLOBAL', 'HHOOK', + 'HICON', 'HINSTANCE', 'HKEY', 'HKL', 'HLOCAL', 'HMENU', + 'HMETAFILE', 'HMODULE', 'HMONITOR', 'HPALETTE', 'HPEN', + 'HRGN', 'HRSRC', 'HSTR', 'HTASK', 'HWINSTA', 'HWND', 'INT', + 'LANGID', 'LARGE_INTEGER', 'LCID', 'LCTYPE', 'LGRPID', 'LONG', + 'MSG', 'POINT', 'POINTL', 'RECT', 'RECTL', 'SC_HANDLE', + 'SERVICE_STATUS_HANDLE', 'SHORT', 'SIZE', 'SIZEL', + 'SMALL_RECT', 'UINT', 'ULARGE_INTEGER', 'ULONG', 'USHORT', + 'VARIANT_BOOL', 'WCHAR', 'WIN32_FIND_DATAA', + 'WIN32_FIND_DATAW', 'WORD'] + +# types which doesn't have pointer types +__all__ = ['LPARAM', 'LPCOLESTR', 'LPCSTR', 'LPCVOID', 'LPCWSTR', 'LPOLESTR', + 'LPSTR', 'LPVOID', 'LPWSTR', 'MAX_PATH', 'OLESTR', 'RGB', 'WPARAM', + '_COORD', '_FILETIME', '_LARGE_INTEGER', '_POINTL', '_RECTL', + '_SMALL_RECT', '_ULARGE_INTEGER', 'tagMSG', 'tagPOINT', 'tagRECT', + 'tagSIZE'] + +# create and register pointer types +for name in names_with_lp: + locals()["LP" + name] = locals()["LPC" + name] = POINTER(locals()[name]) + __all__.extend([name, "LP" + name, "LPC" + name]) +