Thread: [pywin32-checkins] /hgroot/pywin32/pywin32: Fix using PIDL with SHGetFileInfo (bug ...
OLD project page for the Python extensions for Windows
Brought to you by:
mhammond
From: <pyw...@li...> - 2015-04-05 18:02:18
|
changeset 4b18a16ce1d7 in /hgroot/pywin32/pywin32 details: http://pywin32.hg.sourceforge.net/hgweb/pywin32/pywin32/hgroot/pywin32/pywin32?cmd=changeset;node=4b18a16ce1d7 summary: Fix using PIDL with SHGetFileInfo (bug #687); misc type issues diffstat: com/win32comext/shell/src/shell.cpp | 12 +++++++----- 1 files changed, 7 insertions(+), 5 deletions(-) diffs (46 lines): diff -r b81227a0b147 -r 4b18a16ce1d7 com/win32comext/shell/src/shell.cpp --- a/com/win32comext/shell/src/shell.cpp Mon Jan 05 16:19:06 2015 +1100 +++ b/com/win32comext/shell/src/shell.cpp Sun Apr 05 14:00:58 2015 -0400 @@ -852,9 +852,10 @@ Py_INCREF(Py_None); return Py_None; } + PyObject *obhIcon = PyWinLong_FromHANDLE(p->hIcon); PyObject *obDisplayName = PyWinObject_FromTCHAR(p->szDisplayName); PyObject *obTypeName = PyWinObject_FromTCHAR(p->szTypeName); - return Py_BuildValue("iiiNN", p->hIcon, p->iIcon, p->dwAttributes, + return Py_BuildValue("NikNN", obhIcon, p->iIcon, p->dwAttributes, obDisplayName, obTypeName); } @@ -1310,9 +1311,10 @@ TCHAR *name = NULL; LPITEMIDLIST pidl = NULL; TCHAR *pidl_or_name; - int attr, flags, info_attrs=0; + UINT flags; + DWORD attr, info_attrs=0; BOOL ok; - if (!PyArg_ParseTuple(args, "Oii|i", + if (!PyArg_ParseTuple(args, "OkI|k", &obName, // @pyparm string/<o PyIDL>|name||The path and file name. Both absolute // and relative paths are valid. // <nl>If the uFlags parameter includes the SHGFI_PIDL flag, this parameter @@ -1327,7 +1329,7 @@ // in dwFileAttributes. // <nl>This string can use either short (the 8.3 form) or long file names. &attr, // @pyparm int|dwFileAttributes||Combination of one or more file attribute flags (FILE_ATTRIBUTE_ values). If uFlags does not include the SHGFI_USEFILEATTRIBUTES flag, this parameter is ignored. - &flags, // @pyparm int|uFlags||Flags that specify the file information to retrieve. See MSDN for details + &flags, // @pyparm int|uFlags||Combination of shellcon.SHGFI_* flags that specify the file information to retrieve. See MSDN for details &info_attrs)) // @pyparm int|infoAttrs|0|Flags copied to the SHFILEINFO.dwAttributes member - useful when flags contains SHGFI_ATTR_SPECIFIED return NULL; if (flags & SHGFI_PIDL) { @@ -1343,7 +1345,7 @@ memset(&info, 0, sizeof(info)); info.dwAttributes = info_attrs; PY_INTERFACE_PRECALL; - DWORD_PTR dw = SHGetFileInfo(name, attr, &info, sizeof(info), flags); + DWORD_PTR dw = SHGetFileInfo(pidl_or_name, attr, &info, sizeof(info), flags); PY_INTERFACE_POSTCALL; ret = Py_BuildValue("NN", PyLong_FromUnsignedLongLong(dw), PyObject_FromSHFILEINFO(&info)); if (name) PyWinObject_FreeTCHAR(name); |