DEFINE_SHLGUID(IID_IShellLinkW, 0x000214F9L, 0, 0);
DEFINE_SHLGUID(IID_IShellExecuteHookA, 0x000214F5L, 0, 0);
DEFINE_SHLGUID(IID_IShellExecuteHookW, 0x000214FBL, 0, 0);
+DEFINE_SHLGUID(IID_IQueryInfo, 0x00021500L, 0, 0);
DEFINE_GUID(SID_STopLevelBrowser, 0x4C96BE40L, 0x915C, 0x11CF, 0x99, 0xD3, 0x00, 0xAA, 0x00, 0x4A, 0xE8, 0x37);
DEFINE_GUID(CLSID_AutoComplete, 0x00bb2763, 0x6a77, 0x11d0, 0xa5, 0x35, 0x00, 0xc0, 0x4f, 0xd7, 0xd0, 0x62);
+DEFINE_GUID(IID_IInputObject, 0x068284FAA, 0x6A48, 0x11D0, 0x8C, 0x78, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xB4);
+DEFINE_GUID(IID_IInputObjectSite, 0x0F1DB8392, 0x7331, 0x11D0, 0x8C, 0x99, 0x00, 0xA0, 0xC9, 0x2D, 0xBF, 0xE8);
+
#endif /* __WINE_SHLGUID_H */
{\r
ISHFileStream* fileStream;\r
\r
- fileStream = (ISHFileStream*)HeapAlloc(GetProcessHeap(), 0, sizeof(ISHFileStream));\r
+ fileStream = HeapAlloc(GetProcessHeap(), 0, sizeof(ISHFileStream));\r
\r
if (fileStream)\r
{\r
*lpUnknown = NULL;\r
\r
TRACE("doing Release\n");\r
- \r
+\r
return IUnknown_Release(temp);\r
}\r
\r
\r
if (lpUnknown1 == lpUnknown2)\r
return TRUE;\r
- \r
+\r
return FALSE;\r
}\r
\r
return hRet;\r
}\r
\r
+/*************************************************************************\r
+ * @ [SHLWAPI.188]\r
+ *\r
+ * Call IOleControlSite_TranslateAccelerator() on an object.\r
+ *\r
+ * PARAMS\r
+ * lpUnknown [I] Object supporting the IOleControlSite interface.\r
+ * lpMsg [I] Key message to be processed.\r
+ * dwModifiers [I] Flags containing the state of the modifier keys.\r
+ *\r
+ * RETURNS\r
+ * Success: S_OK.\r
+ * Failure: An HRESULT error code, or E_INVALIDARG if lpUnknown is NULL.\r
+ */\r
+HRESULT WINAPI IUnknown_TranslateAcceleratorOCS(IUnknown *lpUnknown, LPMSG lpMsg, DWORD dwModifiers)\r
+{\r
+ IOleControlSite* lpCSite = NULL;\r
+ HRESULT hRet = E_INVALIDARG;\r
+\r
+ TRACE("(%p,%p,0x%08lx)\n", lpUnknown, lpMsg, dwModifiers);\r
+ if (lpUnknown)\r
+ {\r
+ hRet = IUnknown_QueryInterface(lpUnknown, &IID_IOleControlSite,\r
+ (void**)&lpCSite);\r
+ if (SUCCEEDED(hRet) && lpCSite)\r
+ {\r
+ hRet = IOleControlSite_TranslateAccelerator(lpCSite, lpMsg, dwModifiers);\r
+ IOleControlSite_Release(lpCSite);\r
+ }\r
+ }\r
+ return hRet;\r
+}\r
+\r
+\r
/*************************************************************************\r
* @ [SHLWAPI.189]\r
*\r
* Call IOleControlSite_GetExtendedControl() on an object.\r
*\r
* PARAMS\r
- * lpUnknown [I] Object supporting the IOleControlSite interface\r
+ * lpUnknown [I] Object supporting the IOleControlSite interface.\r
* lppDisp [O] Destination for resulting IDispatch.\r
*\r
* RETURNS\r
*/\r
DWORD WINAPI IUnknown_OnFocusOCS(IUnknown *lpUnknown, IDispatch** lppDisp)\r
{\r
- IOleControlSite* lpCSite;\r
+ IOleControlSite* lpCSite = NULL;\r
HRESULT hRet = E_FAIL;\r
\r
TRACE("(%p,%p)\n", lpUnknown, lppDisp);\r
return hRet;\r
}\r
\r
+/*************************************************************************\r
+ * @ [SHLWAPI.190]\r
+ */\r
+HRESULT WINAPI IUnknown_HandleIRestrict(LPUNKNOWN lpUnknown, PVOID lpArg1,\r
+ PVOID lpArg2, PVOID lpArg3, PVOID lpArg4)\r
+{\r
+ /* FIXME: {D12F26B2-D90A-11D0-830D-00AA005B4383} - What object does this represent? */\r
+ static const DWORD service_id[] = { 0xd12f26b2, 0x11d0d90a, 0xaa000d83, 0x83435b00 };\r
+ /* FIXME: {D12F26B1-D90A-11D0-830D-00AA005B4383} - Also Unknown/undocumented */\r
+ static const DWORD function_id[] = { 0xd12f26b1, 0x11d0d90a, 0xaa000d83, 0x83435b00 };\r
+ HRESULT hRet = E_INVALIDARG;\r
+ LPUNKNOWN lpUnkInner = NULL; /* FIXME: Real type is unknown */\r
+\r
+ TRACE("(%p,%p,%p,%p,%p)\n", lpUnknown, lpArg1, lpArg2, lpArg3, lpArg4);\r
+\r
+ if (lpUnknown && lpArg4)\r
+ {\r
+ hRet = IUnknown_QueryService(lpUnknown, (REFGUID)service_id,\r
+ (REFGUID)function_id, (void**)&lpUnkInner);\r
+\r
+ if (SUCCEEDED(hRet) && lpUnkInner)\r
+ {\r
+ /* FIXME: The type of service object requested is unknown, however\r
+ * testing shows that its first method is called with 4 parameters.\r
+ * Fake this by using IParseDisplayName_ParseDisplayName since the\r
+ * signature and position in the vtable matches our unknown object type.\r
+ */\r
+ hRet = IParseDisplayName_ParseDisplayName((LPPARSEDISPLAYNAME)lpUnkInner,\r
+ lpArg1, lpArg2, lpArg3, lpArg4);\r
+ IUnknown_Release(lpUnkInner);\r
+ }\r
+ }\r
+ return hRet;\r
+}\r
+\r
/*************************************************************************\r
* @ [SHLWAPI.192]\r
*\r
return dwRet;\r
}\r
\r
+/*************************************************************************\r
+ * @ [SHLWAPI.195]\r
+ *\r
+ * Determine if a shell folder can be expanded.\r
+ *\r
+ * PARAMS\r
+ * lpFolder [I] Parent folder containing the object to test.\r
+ * pidl [I] Id of the object to test.\r
+ *\r
+ * RETURNS\r
+ * Success: S_OK, if the object is expandable, S_FALSE otherwise.\r
+ * Failure: E_INVALIDARG, if any argument is invalid.\r
+ *\r
+ * NOTES\r
+ * If the object to be tested does not expose the IQueryInfo() interface it\r
+ * will not be identified as an expandable folder.\r
+ */\r
+HRESULT WINAPI SHIsExpandableFolder(LPSHELLFOLDER lpFolder, LPCITEMIDLIST pidl)\r
+{\r
+ HRESULT hRet = E_INVALIDARG;\r
+ IQueryInfo *lpInfo;\r
+\r
+ if (lpFolder && pidl)\r
+ {\r
+ hRet = IShellFolder_GetUIObjectOf(lpFolder, NULL, 1, &pidl, &IID_IQueryInfo,\r
+ NULL, (void**)&lpInfo);\r
+ if (FAILED(hRet))\r
+ hRet = S_FALSE; /* Doesn't expose IQueryInfo */\r
+ else\r
+ {\r
+ DWORD dwFlags = 0;\r
+\r
+ /* MSDN states of IQueryInfo_GetInfoFlags() that "This method is not\r
+ * currently used". Really? You wouldn't be holding out on me would you?\r
+ */\r
+ hRet = IQueryInfo_GetInfoFlags(lpInfo, &dwFlags);\r
+\r
+ if (SUCCEEDED(hRet))\r
+ {\r
+ /* 0x2 is an undocumented flag apparently indicating expandability */\r
+ hRet = dwFlags & 0x2 ? S_OK : S_FALSE;\r
+ }\r
+\r
+ IQueryInfo_Release(lpInfo);\r
+ }\r
+ }\r
+ return hRet;\r
+}\r
+\r
/*************************************************************************\r
* @ [SHLWAPI.197]\r
*\r
}\r
}\r
\r
+/*************************************************************************\r
+ * @ [SHLWAPI.200]\r
+ *\r
+ */\r
+HRESULT WINAPI MayQSForward(IUnknown* lpUnknown, PVOID lpReserved,\r
+ REFGUID riidCmdGrp, ULONG cCmds,\r
+ OLECMD *prgCmds, OLECMDTEXT* pCmdText)\r
+{\r
+ FIXME("(%p,%p,%p,%ld,%p,%p) - stub\n",\r
+ lpUnknown, lpReserved, riidCmdGrp, cCmds, prgCmds, pCmdText);\r
+\r
+ /* FIXME: Calls IsQSForward & IUnknown_QueryStatus */\r
+ return DRAGDROP_E_NOTREGISTERED;\r
+}\r
+\r
/*************************************************************************\r
* @ [SHLWAPI.201]\r
*\r
return DefWindowProcA(hWnd, uMessage, wParam, lParam);\r
}\r
\r
+/*************************************************************************\r
+ * @ [SHLWAPI.256]\r
+ */\r
+HRESULT WINAPI IUnknown_GetSite(LPUNKNOWN lpUnknown, REFIID iid, PVOID *lppSite)\r
+{\r
+ HRESULT hRet = E_INVALIDARG;\r
+ LPOBJECTWITHSITE lpSite = NULL;\r
+\r
+ TRACE("(%p,%s,%p)\n", lpUnknown, debugstr_guid(iid), lppSite);\r
+\r
+ if (lpUnknown && iid && lppSite)\r
+ {\r
+ hRet = IUnknown_QueryInterface(lpUnknown, &IID_IObjectWithSite,\r
+ (void**)&lpSite);\r
+ if (SUCCEEDED(hRet) && lpSite)\r
+ {\r
+ hRet = IObjectWithSite_GetSite(lpSite, iid, lppSite);\r
+ IObjectWithSite_Release(lpSite);\r
+ }\r
+ }\r
+ return hRet;\r
+}\r
+\r
/*************************************************************************\r
* @ [SHLWAPI.257]\r
*\r
* Failure: An HRESULT error code.\r
*\r
* NOTES\r
- * This QueryInterface asks the inner object for a interface. In case\r
+ * This QueryInterface asks the inner object for an interface. In case\r
* of aggregation this request would be forwarded by the inner to the\r
* outer object. This function asks the inner object directly for the\r
* interface circumventing the forwarding to the outer object.\r
* NOTES\r
* lpUnknown must support the IOleInPlaceFrame interface, the\r
* IInternetSecurityMgrSite interface, the IShellBrowser interface\r
- * or the IDocHostUIHandler interface, or this call fails.\r
+ * the IDocHostUIHandler interface, or the IOleInPlaceActiveObject interface,\r
+ * or this call will fail.\r
*/\r
HRESULT WINAPI IUnknown_EnableModeless(IUnknown *lpUnknown, BOOL bModeless)\r
{\r
if (!lpUnknown)\r
return E_FAIL;\r
\r
- if (IsIface(IOleInPlaceFrame))\r
+ if (IsIface(IOleInPlaceActiveObject))\r
+ EnableModeless(IOleInPlaceActiveObject);\r
+ else if (IsIface(IOleInPlaceFrame))\r
EnableModeless(IOleInPlaceFrame);\r
else if (IsIface(IShellBrowser))\r
EnableModeless(IShellBrowser);\r
case OS_HOME:\r
ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT && majorv >= 5 && minorv >= 1)\r
case OS_PROFESSIONAL:\r
- ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT) \r
+ ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT)\r
case OS_DATACENTER:\r
ISOS_RETURN(platform == VER_PLATFORM_WIN32_NT)\r
case OS_ADVSERVER:\r
return FALSE;\r
}\r
\r
+/*************************************************************************\r
+ * @ [SHLWAPI.478]\r
+ *\r
+ * Call IInputObject_TranslateAcceleratorIO() on an object.\r
+ *\r
+ * PARAMS\r
+ * lpUnknown [I] Object supporting the IInputObject interface.\r
+ * lpMsg [I] Key message to be processed.\r
+ *\r
+ * RETURNS\r
+ * Success: S_OK.\r
+ * Failure: An HRESULT error code, or E_INVALIDARG if lpUnknown is NULL.\r
+ */\r
+HRESULT WINAPI IUnknown_TranslateAcceleratorIO(IUnknown *lpUnknown, LPMSG lpMsg)\r
+{\r
+ IInputObject* lpInput = NULL;\r
+ HRESULT hRet = E_INVALIDARG;\r
+\r
+ TRACE("(%p,%p)\n", lpUnknown, lpMsg);\r
+ if (lpUnknown)\r
+ {\r
+ hRet = IUnknown_QueryInterface(lpUnknown, &IID_IInputObject,\r
+ (void**)&lpInput);\r
+ if (SUCCEEDED(hRet) && lpInput)\r
+ {\r
+ hRet = IInputObject_TranslateAcceleratorIO(lpInput, lpMsg);\r
+ IInputObject_Release(lpInput);\r
+ }\r
+ }\r
+ return hRet;\r
+}\r
+\r
+/*************************************************************************\r
+ * @ [SHLWAPI.481]\r
+ *\r
+ * Call IInputObject_HasFocusIO() on an object.\r
+ *\r
+ * PARAMS\r
+ * lpUnknown [I] Object supporting the IInputObject interface.\r
+ *\r
+ * RETURNS\r
+ * Success: S_OK, if lpUnknown is an IInputObject object and has the focus,\r
+ * or S_FALSE otherwise.\r
+ * Failure: An HRESULT error code, or E_INVALIDARG if lpUnknown is NULL.\r
+ */\r
+HRESULT WINAPI IUnknown_HasFocusIO(IUnknown *lpUnknown)\r
+{\r
+ IInputObject* lpInput = NULL;\r
+ HRESULT hRet = E_INVALIDARG;\r
+\r
+ TRACE("(%p)\n", lpUnknown);\r
+ if (lpUnknown)\r
+ {\r
+ hRet = IUnknown_QueryInterface(lpUnknown, &IID_IInputObject,\r
+ (void**)&lpInput);\r
+ if (SUCCEEDED(hRet) && lpInput)\r
+ {\r
+ hRet = IInputObject_HasFocusIO(lpInput);\r
+ IInputObject_Release(lpInput);\r
+ }\r
+ }\r
+ return hRet;\r
+}\r
+\r
/*************************************************************************\r
* ColorRGBToHLS [SHLWAPI.@]\r
*\r
/*************************************************************************\r
* @ [SHLWAPI.461]\r
*/\r
-DWORD WINAPI SHGetAppCompatFlags(DWORD Unknown)\r
+DWORD WINAPI SHGetAppCompatFlags(DWORD dwUnknown)\r
{\r
- FIXME("stub\n");\r
+ FIXME("(0x%08lx) stub\n", dwUnknown);\r
return 0;\r
}\r
\r
/***********************************************************************\r
* IUnknown_OnFocusChangeIS (SHLWAPI.@)\r
*/\r
-DWORD WINAPI IUnknown_OnFocusChangeIS(IUnknown * pUnk, IUnknown * pFocusObject, BOOL bChange)\r
+HRESULT WINAPI IUnknown_OnFocusChangeIS(LPUNKNOWN lpUnknown, LPUNKNOWN pFocusObject, BOOL bFocus)\r
{\r
- FIXME("(%p, %p, %s)\n", pUnk, pFocusObject, bChange ? "TRUE" : "FALSE");\r
+ IInputObjectSite *pIOS = NULL;\r
+ HRESULT hRet = E_INVALIDARG;\r
\r
-/*\r
- IInputObjectSite * pIOS = NULL;\r
- if (SUCCEEDED(IUnknown_QueryInterface(pUnk, &IID_IInputObjectSite, (void **)&pIOS))\r
- IInputObjectSite_OnFocusChangeIS(pIOS, pFocusObject, bChange);\r
-*/\r
+ TRACE("(%p, %p, %s)\n", lpUnknown, pFocusObject, bFocus ? "TRUE" : "FALSE");\r
\r
- return 0;\r
+ if (lpUnknown)\r
+ {\r
+ hRet = IUnknown_QueryInterface(lpUnknown, &IID_IInputObjectSite,\r
+ (void **)&pIOS);\r
+ if (SUCCEEDED(hRet) && pIOS)\r
+ {\r
+ hRet = IInputObjectSite_OnFocusChangeIS(pIOS, pFocusObject, bFocus);\r
+ IInputObjectSite_Release(pIOS);\r
+ }\r
+ }\r
+ return hRet;\r
}\r
\r
/***********************************************************************\r
if (!lpszFile || !*lpszFile)\r
{\r
/* Use dir only */\r
- strncpyW(szTemp, lpszDir, MAX_PATH);\r
+ lstrcpynW(szTemp, lpszDir, MAX_PATH);\r
}\r
else if (!lpszDir || !*lpszDir || !PathIsRelativeW(lpszFile))\r
{\r
if (!lpszDir || !*lpszDir || *lpszFile != '\\' || PathIsUNCW(lpszFile))\r
{\r
/* Use file only */\r
- strncpyW(szTemp, lpszFile, MAX_PATH);\r
+ lstrcpynW(szTemp, lpszFile, MAX_PATH);\r
}\r
else\r
{\r
\r
if (bUseBoth)\r
{\r
- strncpyW(szTemp, lpszDir, MAX_PATH);\r
+ lstrcpynW(szTemp, lpszDir, MAX_PATH);\r
if (bStrip)\r
{\r
PathStripToRootW(szTemp);\r
if (!lpszPath)\r
return FALSE;\r
\r
- iPrevErrMode = SetErrorMode(1);\r
+ /* Prevent a dialog box if path is on a disk that has been ejected. */\r
+ iPrevErrMode = SetErrorMode(SEM_FAILCRITICALERRORS);\r
dwAttr = GetFileAttributesA(lpszPath);\r
SetErrorMode(iPrevErrMode);\r
return dwAttr == INVALID_FILE_ATTRIBUTES ? FALSE : TRUE;\r
if (!lpszPath)\r
return FALSE;\r
\r
- iPrevErrMode = SetErrorMode(1);\r
+ iPrevErrMode = SetErrorMode(SEM_FAILCRITICALERRORS);\r
dwAttr = GetFileAttributesW(lpszPath);\r
SetErrorMode(iPrevErrMode);\r
return dwAttr == INVALID_FILE_ATTRIBUTES ? FALSE : TRUE;\r
\r
TRACE("(%s)\n", debugstr_a(lpszPath));\r
\r
- if (!pszIter || !*pszIter)\r
+ if (!pszIter)\r
return FALSE;\r
\r
- while (*pszIter)\r
- {\r
- if (islower(*pszIter) || IsDBCSLeadByte(*pszIter))\r
- return FALSE; /* Not DOS path */\r
- pszIter++;\r
- }\r
- pszIter = lpszPath + 1;\r
- while (*pszIter)\r
+ if (*pszIter)\r
{\r
- *pszIter = tolower(*pszIter);\r
- pszIter++;\r
+ do\r
+ {\r
+ if (islower(*pszIter) || IsDBCSLeadByte(*pszIter))\r
+ return FALSE; /* Not DOS path */\r
+ pszIter++;\r
+ } while (*pszIter);\r
+ pszIter = lpszPath + 1;\r
+ while (*pszIter)\r
+ {\r
+ *pszIter = tolower(*pszIter);\r
+ pszIter++;\r
+ }\r
}\r
return TRUE;\r
}\r
\r
TRACE("(%s)\n", debugstr_w(lpszPath));\r
\r
- if (!pszIter || !*pszIter)\r
+ if (!pszIter)\r
return FALSE;\r
\r
- while (*pszIter)\r
+ if (*pszIter)\r
{\r
- if (islowerW(*pszIter))\r
- return FALSE; /* Not DOS path */\r
- pszIter++;\r
- }\r
- pszIter = lpszPath + 1;\r
- while (*pszIter)\r
- {\r
- *pszIter = tolowerW(*pszIter);\r
- pszIter++;\r
+ do\r
+ {\r
+ if (islowerW(*pszIter))\r
+ return FALSE; /* Not DOS path */\r
+ pszIter++;\r
+ } while (*pszIter);\r
+ pszIter = lpszPath + 1;\r
+ while (*pszIter)\r
+ {\r
+ *pszIter = tolowerW(*pszIter);\r
+ pszIter++;\r
+ }\r
}\r
return TRUE;\r
}\r
* dx [I] Desired width\r
*\r
* RETURNS\r
- * TRUE If the path was modified.\r
+ * TRUE If the path was modified/went well.\r
* FALSE Otherwise.\r
*/\r
BOOL WINAPI PathCompactPathA(HDC hDC, LPSTR lpszPath, UINT dx)\r
TRACE("(%p,%s,%d)\n", hDC, debugstr_w(lpszPath), dx);\r
\r
if (!lpszPath)\r
- return bRet;\r
+ return FALSE;\r
\r
if (!hDC)\r
hdc = hDC = GetDC(0);\r
* the file name as possible, allowing for the ellipses, e.g:\r
* c:\some very long path\filename ==> c:\some v...\filename\r
*/\r
- strncpyW(buff, sFile, MAX_PATH);\r
+ lstrcpynW(buff, sFile, MAX_PATH);\r
\r
do\r
{\r
\r
if (dwLen > MAX_PATH - 3)\r
dwLen = MAX_PATH - 3;\r
- strncpyW(buff, sFile, dwLen);\r
+ lstrcpynW(buff, sFile, dwLen);\r
\r
do {\r
dwLen--;\r
return FALSE;\r
\r
*lpszPath = '\0';\r
- strncpyW(szFrom, lpszFrom, MAX_PATH);\r
- strncpyW(szTo, lpszTo, MAX_PATH);\r
+ lstrcpynW(szFrom, lpszFrom, MAX_PATH);\r
+ lstrcpynW(szTo, lpszTo, MAX_PATH);\r
\r
if(!(dwAttrFrom & FILE_ATTRIBUTE_DIRECTORY))\r
PathRemoveFileSpecW(szFrom);\r
if (!lpszPath || !PathIsDirectoryW(lpszPath))\r
return FALSE;\r
\r
- strncpyW(szSearch, lpszPath, MAX_PATH);\r
+ lstrcpynW(szSearch, lpszPath, MAX_PATH);\r
PathAddBackslashW(szSearch);\r
dwLen = strlenW(szSearch);\r
if (dwLen > MAX_PATH - 4)\r
*phNewUSKey = NULL;\r
\r
/* Create internal HUSKEY */\r
- hKey = (LPSHUSKEY)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*hKey));\r
+ hKey = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*hKey));\r
lstrcpynW(hKey->lpszPath, Path, sizeof(hKey->lpszPath));\r
\r
if (hRelativeUSKey)\r
*\r
* subcase-2: buffer is to small to hold the expanded string:\r
* the function return success (!!) and the result is truncated\r
- * *** This is clearly a error in the native implementation. ***\r
+ * *** This is clearly an error in the native implementation. ***\r
*\r
* case-2: the unexpanded string is bigger than the expanded one\r
* The buffer must have enough space to hold the unexpanded\r
char cNull = '\0';\r
nBytesToAlloc = (!pvData || (dwRet == ERROR_MORE_DATA)) ? dwUnExpDataLen : *pcbData;\r
\r
- szData = (LPSTR) LocalAlloc(GMEM_ZEROINIT, nBytesToAlloc);\r
+ szData = (LPSTR) LocalAlloc(LMEM_ZEROINIT, nBytesToAlloc);\r
RegQueryValueExA (hKey, lpszValue, lpReserved, NULL, (LPBYTE)szData, &nBytesToAlloc);\r
dwExpDataLen = ExpandEnvironmentStringsA(szData, &cNull, 1);\r
dwUnExpDataLen = max(nBytesToAlloc, dwExpDataLen);\r
else\r
{\r
nBytesToAlloc = (lstrlenA(pvData)+1) * sizeof (CHAR);\r
- szData = (LPSTR) LocalAlloc(GMEM_ZEROINIT, nBytesToAlloc );\r
+ szData = (LPSTR) LocalAlloc(LMEM_ZEROINIT, nBytesToAlloc );\r
lstrcpyA(szData, pvData);\r
dwExpDataLen = ExpandEnvironmentStringsA(szData, pvData, *pcbData / sizeof(CHAR));\r
if (dwExpDataLen > *pcbData) dwRet = ERROR_MORE_DATA;\r
WCHAR cNull = '\0';\r
nBytesToAlloc = (!pvData || (dwRet == ERROR_MORE_DATA)) ? dwUnExpDataLen : *pcbData;\r
\r
- szData = (LPWSTR) LocalAlloc(GMEM_ZEROINIT, nBytesToAlloc);\r
+ szData = (LPWSTR) LocalAlloc(LMEM_ZEROINIT, nBytesToAlloc);\r
RegQueryValueExW (hKey, lpszValue, lpReserved, NULL, (LPBYTE)szData, &nBytesToAlloc);\r
dwExpDataLen = ExpandEnvironmentStringsW(szData, &cNull, 1);\r
dwUnExpDataLen = max(nBytesToAlloc, dwExpDataLen);\r
else\r
{\r
nBytesToAlloc = (lstrlenW(pvData) + 1) * sizeof(WCHAR);\r
- szData = (LPWSTR) LocalAlloc(GMEM_ZEROINIT, nBytesToAlloc );\r
+ szData = (LPWSTR) LocalAlloc(LMEM_ZEROINIT, nBytesToAlloc );\r
lstrcpyW(szData, pvData);\r
dwExpDataLen = ExpandEnvironmentStringsW(szData, pvData, *pcbData/sizeof(WCHAR) );\r
if (dwExpDataLen > *pcbData) dwRet = ERROR_MORE_DATA;\r
*\r
* PARAMS\r
* hKeySrc [I] Source key to copy from\r
- * lpszSubKey [I] Sub key under hKeyDst, or NULL to use hKeyDst directly\r
+ * lpszSrcSubKey [I] Sub key under hKeySrc, or NULL to use hKeySrc directly\r
* hKeyDst [I] Destination key\r
* dwReserved [I] Reserved, must be 0\r
*\r
* (It will loop until out of stack, or the registry is full). This\r
* bug is present in Win32 also.\r
*/\r
-DWORD WINAPI SHCopyKeyA(HKEY hKeySrc, LPCSTR lpszSubKey, HKEY hKeyDst, DWORD dwReserved)\r
+DWORD WINAPI SHCopyKeyA(HKEY hKeySrc, LPCSTR lpszSrcSubKey, HKEY hKeyDst, DWORD dwReserved)\r
{\r
WCHAR szSubKeyW[MAX_PATH];\r
\r
- TRACE("(hkey=%p,%s,%p08x,%ld)\n", hKeySrc, debugstr_a(lpszSubKey), hKeyDst, dwReserved);\r
+ TRACE("(hkey=%p,%s,%p08x,%ld)\n", hKeySrc, debugstr_a(lpszSrcSubKey), hKeyDst, dwReserved);\r
\r
- if (lpszSubKey)\r
- MultiByteToWideChar(0, 0, lpszSubKey, -1, szSubKeyW, MAX_PATH);\r
+ if (lpszSrcSubKey)\r
+ MultiByteToWideChar(0, 0, lpszSrcSubKey, -1, szSubKeyW, MAX_PATH);\r
\r
- return SHCopyKeyW(hKeySrc, lpszSubKey ? szSubKeyW : NULL, hKeyDst, dwReserved);\r
+ return SHCopyKeyW(hKeySrc, lpszSrcSubKey ? szSubKeyW : NULL, hKeyDst, dwReserved);\r
}\r
\r
/*************************************************************************\r
*\r
* See SHCopyKeyA.\r
*/\r
-DWORD WINAPI SHCopyKeyW(HKEY hKeySrc, LPCWSTR lpszSubKey, HKEY hKeyDst, DWORD dwReserved)\r
+DWORD WINAPI SHCopyKeyW(HKEY hKeySrc, LPCWSTR lpszSrcSubKey, HKEY hKeyDst, DWORD dwReserved)\r
{\r
DWORD dwKeyCount = 0, dwValueCount = 0, dwMaxKeyLen = 0;\r
DWORD dwMaxValueLen = 0, dwMaxDataLen = 0, i;\r
WCHAR szName[MAX_PATH], *lpszName = szName;\r
DWORD dwRet = S_OK;\r
\r
- TRACE("hkey=%p,%s,%p08x,%ld)\n", hKeySrc, debugstr_w(lpszSubKey), hKeyDst, dwReserved);\r
+ TRACE("hkey=%p,%s,%p08x,%ld)\n", hKeySrc, debugstr_w(lpszSrcSubKey), hKeyDst, dwReserved);\r
\r
if(!hKeyDst || !hKeySrc)\r
dwRet = ERROR_INVALID_PARAMETER;\r
else\r
{\r
- /* Open destination key */\r
- if(lpszSubKey)\r
- dwRet = RegOpenKeyExW(hKeyDst, lpszSubKey, 0, KEY_ALL_ACCESS, &hKeyDst);\r
+ /* Open source key */\r
+ if(lpszSrcSubKey)\r
+ dwRet = RegOpenKeyExW(hKeySrc, lpszSrcSubKey, 0, KEY_ALL_ACCESS, &hKeySrc);\r
\r
if(dwRet)\r
- hKeyDst = 0; /* Don't close this key since we didn't open it */\r
+ hKeyDst = NULL; /* Don't close this key since we didn't open it */\r
else\r
{\r
/* Get details about sub keys and values */\r
if (lpBuff != buff)\r
HeapFree(GetProcessHeap(), 0, lpBuff);\r
\r
- if (lpszSubKey && hKeyDst)\r
+ if (lpszSrcSubKey && hKeyDst)\r
RegCloseKey(hKeyDst);\r
return dwRet;\r
}\r
{\r
ISHRegStream* regStream;\r
\r
- regStream = (ISHRegStream*)HeapAlloc(GetProcessHeap(), 0, sizeof(ISHRegStream));\r
+ regStream = HeapAlloc(GetProcessHeap(), 0, sizeof(ISHRegStream));\r
\r
if (regStream)\r
{\r
\r
if (lpbData)\r
{\r
- LPBYTE lpbDup = (LPBYTE)HeapAlloc(GetProcessHeap(), 0, dwDataLen);\r
+ LPBYTE lpbDup = HeapAlloc(GetProcessHeap(), 0, dwDataLen);\r
\r
if (lpbDup)\r
{\r
185 stdcall -noname SHMessageBoxCheckA(ptr str str long long str)
186 stdcall -noname SHSimulateDrop(ptr ptr long ptr ptr)
187 stdcall -noname SHLoadFromPropertyBag(ptr ptr)
-188 stub -noname IUnknown_TranslateAcceleratorOCS
+188 stdcall -noname IUnknown_TranslateAcceleratorOCS(ptr ptr long)
189 stdcall -noname IUnknown_OnFocusOCS(ptr ptr)
-190 stub -noname IUnknown_HandleIRestrict
+190 stdcall -noname IUnknown_HandleIRestrict(ptr ptr ptr ptr ptr)
191 stdcall -noname SHMessageBoxCheckW(ptr wstr wstr long long wstr)
192 stdcall -noname SHGetMenuFromID(ptr long)
193 stdcall -noname SHGetCurColorRes()
194 stdcall -noname SHWaitForSendMessageThread(ptr long)
-195 stub -noname SHIsExpandableFolder
-196 stub -noname DnsRecordSetCompare
+195 stdcall -noname SHIsExpandableFolder(ptr ptr)
+196 stub -noname DnsRecordSetCompare #stdcall @(ptr ptr ptr ptr) dnsapi.DnsRecordSetCompare
197 stdcall -noname SHFillRectClr(long ptr long)
198 stdcall -noname SHSearchMapInt(ptr ptr long long)
199 stdcall -noname IUnknown_Set(ptr ptr)
-200 stub -noname MayQSForward
+200 stdcall -noname MayQSForward(ptr ptr ptr long ptr ptr)
201 stdcall -noname MayExecForward(ptr long ptr long long ptr ptr)
202 stdcall -noname IsQSForward(ptr long ptr)
203 stdcall -noname SHStripMneumonicA(str)
253 stub -noname StopWatchExA
254 stub -noname StopWatchExW
255 stub -noname EventTraceHandler
-256 stub -noname IUnknown_GetSite
+256 stdcall -noname IUnknown_GetSite(ptr ptr ptr)
257 stdcall -noname SHCreateWorkerWindowA(long ptr long long ptr long)
258 stub -noname SHRegisterWaitForSingleObject
259 stub -noname SHUnregisterWait
475 stub -noname GetShellSecurityDescriptor
476 stub -noname SHGetObjectCompatFlags
477 stub -noname SHCreatePropertyBagOnMemory
-478 stub -noname IUnknown_TranslateAcceleratorIO
+478 stdcall -noname IUnknown_TranslateAcceleratorIO(ptr ptr)
479 stub -noname IUnknown_UIActivateIO
480 stub -noname UrlCrackW
-481 stub -noname IUnknown_HasFocusIO
+481 stdcall -noname IUnknown_HasFocusIO(ptr)
482 stub -noname SHMessageBoxHelpA
483 stub -noname SHMessageBoxHelpW
484 stub -noname IUnknown_QueryServiceExec
548 stub -noname SHAreIconsEqual
549 stdcall -noname SHCoCreateInstanceAC(ptr ptr long ptr ptr)
-550 stub -noname GetTemplateInfoFroHandle
+550 stub -noname GetTemplateInfoFromHandle
551 stub -noname IShellFolder_CompareIDs
@ stdcall AssocCreate(long long long long ptr ptr)
ulKB = (ulKB - ulNextDigit) / 10;\r
} while (ulKB > 0);\r
\r
- strncpy(lpszDest, szOut + 1, cchMax);\r
+ lstrcpynA(lpszDest, szOut + 1, cchMax);\r
return lpszDest;\r
}\r
\r
ulKB = (ulKB - ulNextDigit) / 10;\r
} while (ulKB > 0);\r
\r
- strncpyW(lpszDest, szOut + 1, cchMax);\r
+ lstrcpynW(lpszDest, szOut + 1, cchMax);\r
return lpszDest;\r
}\r
\r
if (iDigits) /* Always write seconds if we have significant digits */\r
SHLWAPI_WriteTimeClass(szCopy, dwMS, szSec, iDigits);\r
\r
- strncpyW(lpszStr, szCopy, cchMax);\r
+ lstrcpynW(lpszStr, szCopy, cchMax);\r
iRet = strlenW(lpszStr);\r
}\r
return iRet;\r
sprintfW(wszBuff, bfFormats[i].lpwszFormat, dBytes);\r
wszAdd[1] = bfFormats[i].wPrefix;\r
strcatW(wszBuff, wszAdd);\r
- strncpyW(lpszDest, wszBuff, cchMax);\r
+ lstrcpynW(lpszDest, wszBuff, cchMax);\r
return lpszDest;\r
}\r
\r
\r
if (nWideCharCount < len - 1)\r
{\r
- mem = (LPSTR)HeapAlloc(GetProcessHeap(), 0, *lpiLen);\r
+ mem = HeapAlloc(GetProcessHeap(), 0, *lpiLen);\r
if (!mem)\r
return 0;\r
\r
reqLen = WideCharToMultiByte(CodePage, 0, lpSrcStr, len, NULL, 0, NULL, NULL);\r
if (reqLen)\r
{\r
- mem = (LPSTR)HeapAlloc(GetProcessHeap(), 0, reqLen);\r
+ mem = HeapAlloc(GetProcessHeap(), 0, reqLen);\r
if (mem)\r
{\r
reqLen = WideCharToMultiByte(CodePage, 0, lpSrcStr, len, mem,\r
\r
TRACE("(%s,%p,0x%08x)\n", debugstr_a(lpszSrc), lpszDst, iLen);\r
\r
- /* Our original version used lstrncpy/lstrlen, incorrectly filling up all\r
- * of lpszDst with extra NULs. This version is correct, and faster too.\r
- */\r
lpszRet = StrCpyNXA(lpszDst, lpszSrc, iLen);\r
return lpszRet - lpszDst + 1;\r
}\r
\r
/* see if known scheme and return indicator number */\r
len = WideCharToMultiByte(0, 0, y->pszProtocol, y->cchProtocol, 0, 0, 0, 0);\r
- cmpstr = (LPSTR)HeapAlloc(GetProcessHeap(), 0, len);\r
+ cmpstr = HeapAlloc(GetProcessHeap(), 0, len);\r
WideCharToMultiByte(0, 0, y->pszProtocol, y->cchProtocol, cmpstr, len, 0, 0);\r
y->nScheme = URL_SCHEME_UNKNOWN;\r
inet_pro = shlwapi_schemes;\r
DWORD EscapeFlags;\r
LPWSTR lpszUrlCpy, wk1, wk2, mp, root;\r
INT nByteLen, state;\r
- DWORD nLen;\r
+ DWORD nLen, nWkLen;\r
\r
TRACE("(%s %p %p 0x%08lx)\n", debugstr_w(pszUrl), pszCanonicalized,\r
pcchCanonicalized, dwFlags);\r
state = 4;\r
break;\r
case 3:\r
- strcpyW(wk2, wk1);\r
- wk1 += strlenW(wk1);\r
- wk2 += strlenW(wk2);\r
+ nWkLen = strlenW(wk1);\r
+ memcpy(wk2, wk1, (nWkLen + 1) * sizeof(WCHAR));\r
+ wk1 += nWkLen;\r
+ wk2 += nWkLen;\r
break;\r
case 4:\r
if (!isalnumW(*wk1) && (*wk1 != L'-') && (*wk1 != L'.')) {state = 3; break;}\r
TRACE("wk1=%c\n", (CHAR)*wk1);\r
mp = strchrW(wk1, L'/');\r
if (!mp) {\r
- strcpyW(wk2, wk1);\r
- wk1 += strlenW(wk1);\r
- wk2 += strlenW(wk2);\r
+ nWkLen = strlenW(wk1);\r
+ memcpy(wk2, wk1, (nWkLen + 1) * sizeof(WCHAR));\r
+ wk1 += nWkLen;\r
+ wk2 += nWkLen;\r
continue;\r
}\r
nLen = mp - wk1 + 1;\r
- strncpyW(wk2, wk1, nLen);\r
+ memcpy(wk2, wk1, nLen * sizeof(WCHAR));\r
wk2 += nLen;\r
wk1 += nLen;\r
if (*wk1 == L'.') {\r
if(!pszBase || !pszRelative || !pcchCombined)\r
return E_INVALIDARG;\r
\r
- base = (LPWSTR) HeapAlloc(GetProcessHeap(), 0,\r
+ base = HeapAlloc(GetProcessHeap(), 0,\r
(3*INTERNET_MAX_URL_LENGTH) * sizeof(WCHAR));\r
relative = base + INTERNET_MAX_URL_LENGTH;\r
combined = relative + INTERNET_MAX_URL_LENGTH;\r
* Return the pszBase scheme with pszRelative. Basically\r
* keeps the scheme and replaces the domain and following.\r
*/\r
- strncpyW(preliminary, base.pszProtocol, base.cchProtocol + 1);\r
+ memcpy(preliminary, base.pszProtocol, (base.cchProtocol + 1)*sizeof(WCHAR));\r
work = preliminary + base.cchProtocol + 1;\r
strcpyW(work, relative.pszSuffix);\r
if (!(dwFlags & URL_PLUGGABLE_PROTOCOL) &&\r
* after the location is pszRelative. (Replace document\r
* from root on.)\r
*/\r
- strncpyW(preliminary, base.pszProtocol, base.cchProtocol+1+sizeloc);\r
+ memcpy(preliminary, base.pszProtocol, (base.cchProtocol+1+sizeloc)*sizeof(WCHAR));\r
work = preliminary + base.cchProtocol + 1 + sizeloc;\r
if (dwFlags & URL_PLUGGABLE_PROTOCOL)\r
*(work++) = L'/';\r
* Return the pszBase without its document (if any) and\r
* append pszRelative after its scheme.\r
*/\r
- strncpyW(preliminary, base.pszProtocol, base.cchProtocol+1+base.cchSuffix);\r
+ memcpy(preliminary, base.pszProtocol,\r
+ (base.cchProtocol+1+base.cchSuffix)*sizeof(WCHAR));\r
work = preliminary + base.cchProtocol+1+base.cchSuffix - 1;\r
if (*work++ != L'/')\r
*(work++) = L'/';\r
base.cbSize = sizeof(base);\r
res1 = ParseURLA(pszUrl, &base);\r
if (res1) return FALSE; /* invalid scheme */\r
- if ((*base.pszSuffix == '/') && (*(base.pszSuffix+1) == '/'))\r
- /* has scheme followed by 2 '/' */\r
- return FALSE;\r
- return TRUE;\r
+ switch (base.nScheme)\r
+ {\r
+ case URL_SCHEME_MAILTO:\r
+ case URL_SCHEME_SHELL:\r
+ case URL_SCHEME_JAVASCRIPT:\r
+ case URL_SCHEME_VBSCRIPT:\r
+ case URL_SCHEME_ABOUT:\r
+ return TRUE;\r
+ }\r
+ return FALSE;\r
\r
case URLIS_FILEURL:\r
- return !StrCmpNA("file://", pszUrl, 7);\r
+ return !StrCmpNA("file:", pszUrl, 5);\r
\r
case URLIS_DIRECTORY:\r
last = pszUrl + strlen(pszUrl) - 1;\r
*/\r
BOOL WINAPI UrlIsW(LPCWSTR pszUrl, URLIS Urlis)\r
{\r
- static const WCHAR stemp[] = { 'f','i','l','e',':','/','/',0 };\r
+ static const WCHAR stemp[] = { 'f','i','l','e',':',0 };\r
PARSEDURLW base;\r
DWORD res1;\r
LPCWSTR last;\r
base.cbSize = sizeof(base);\r
res1 = ParseURLW(pszUrl, &base);\r
if (res1) return FALSE; /* invalid scheme */\r
- if ((*base.pszSuffix == '/') && (*(base.pszSuffix+1) == '/'))\r
- /* has scheme followed by 2 '/' */\r
- return FALSE;\r
- return TRUE;\r
+ switch (base.nScheme)\r
+ {\r
+ case URL_SCHEME_MAILTO:\r
+ case URL_SCHEME_SHELL:\r
+ case URL_SCHEME_JAVASCRIPT:\r
+ case URL_SCHEME_VBSCRIPT:\r
+ case URL_SCHEME_ABOUT:\r
+ return TRUE;\r
+ }\r
+ return FALSE;\r
\r
case URLIS_FILEURL:\r
- return !strncmpW(stemp, pszUrl, 7);\r
+ return !strncmpW(stemp, pszUrl, 5);\r
\r
case URLIS_DIRECTORY:\r
last = pszUrl + strlenW(pszUrl) - 1;\r
* PARAMS\r
* pszIn [I] Url to parse\r
* pszOut [O] Destination for part of pszIn requested\r
- * pcchOut [I/O] Length of pszOut/destination for length of pszOut\r
+ * pcchOut [I] Size of pszOut\r
+ * [O] length of pszOut string EXLUDING '\0' if S_OK, otherwise\r
+ * needed size of pszOut INCLUDING '\0'.\r
* dwPart [I] URL_PART_ enum from "shlwapi.h"\r
* dwFlags [I] URL_ flags from "shlwapi.h"\r
*\r
HRESULT ret;\r
DWORD size, schsize;\r
LPCWSTR addr, schaddr;\r
- LPWSTR work;\r
\r
TRACE("(%s %p %p(%ld) %08lx %08lx)\n",\r
debugstr_w(pszIn), pszOut, pcchOut, *pcchOut, dwPart, dwFlags);\r
}\r
\r
if (dwFlags == URL_PARTFLAG_KEEPSCHEME) {\r
- if (*pcchOut < size + schsize + 2) {\r
- *pcchOut = size + schsize + 2;\r
+ if (*pcchOut < schsize + size + 2) {\r
+ *pcchOut = schsize + size + 2;\r
return E_POINTER;\r
}\r
- strncpyW(pszOut, schaddr, schsize);\r
- work = pszOut + schsize;\r
- *work = L':';\r
- strncpyW(work+1, addr, size);\r
- *pcchOut = size + schsize + 1;\r
- work += (size + 1);\r
- *work = L'\0';\r
+ memcpy(pszOut, schaddr, schsize*sizeof(WCHAR));\r
+ pszOut[schsize] = ':';\r
+ memcpy(pszOut+schsize+1, addr, size*sizeof(WCHAR));\r
+ pszOut[schsize+1+size] = 0;\r
+ *pcchOut = schsize + 1 + size;\r
}\r
else {\r
if (*pcchOut < size + 1) {*pcchOut = size+1; return E_POINTER;}\r
- strncpyW(pszOut, addr, size);\r
+ memcpy(pszOut, addr, size*sizeof(WCHAR));\r
+ pszOut[size] = 0;\r
*pcchOut = size;\r
- work = pszOut + size;\r
- *work = L'\0';\r
}\r
TRACE("len=%ld %s\n", *pcchOut, debugstr_w(pszOut));\r
}\r
typedef interface IFontDisp *LPFONTDISP;
typedef interface IOleUndoManager *LPOLEUNDOMANAGER;
typedef interface IQuickActivate *LPQUICKACTIVATE;
+typedef interface IObjectWithSite *LPOBJECTWITHSITE;
#ifndef OLE2ANSI
typedef TEXTMETRICW TEXTMETRICOLE;
};
#undef INTERFACE
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IObjectWithSite_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IObjectWithSite_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IObjectWithSite_Release(p) (p)->lpVtbl->Release(p)
+/*** IObjectWithSite methods ***/
+#define IObjectWithSite_SetSite(p,a) (p)->lpVtbl->SetSite(p,a)
+#define IObjectWithSite_GetSite(p,a,b) (p)->lpVtbl->GetSite(p,a,b)
+#endif
+
EXTERN_C const IID IID_IOleInPlaceSiteWindowless;
#define INTERFACE IOleInPlaceSiteWindowless
DECLARE_INTERFACE_(IOleInPlaceSiteWindowless,IOleInPlaceSiteEx)
};
#undef INTERFACE
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IOleInPlaceActiveObject_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IOleInPlaceActiveObject_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IOleInPlaceActiveObject_Release(p) (p)->lpVtbl->Release(p)
+/*** IOleWindow methods ***/
+#define IOleInPlaceActiveObject_GetWindow(p,a) (p)->lpVtbl->GetWindow(p,a)
+#define IOleInPlaceActiveObject_ContextSensitiveHelp(p,a) (p)->lpVtbl->ContextSensitiveHelp(p,a)
+/*** IOleInPlaceActiveObject methods ***/
+#define IOleInPlaceActiveObject_TranslateAccelerator(p,a) (p)->lpVtbl->TranslateAccelerator(p,a)
+#define IOleInPlaceActiveObject_OnFrameWindowActivate(p,a) (p)->lpVtbl->OnFrameWindowActivate(p,a)
+#define IOleInPlaceActiveObject_OnDocWindowActivate(p,a) (p)->lpVtbl->OnDocWindowActivate(p,a)
+#define IOleInPlaceActiveObject_ResizeBorder(p,a,b,c) (p)->lpVtbl->ResizeBorder(p,a,b,c)
+#define IOleInPlaceActiveObject_EnableModeless(p,a) (p)->lpVtbl->EnableModeless(p,a)
+#endif
+
EXTERN_C const IID IID_IOleInPlaceFrame;
#define INTERFACE IOleInPlaceFrame
DECLARE_INTERFACE_(IOleInPlaceFrame,IOleInPlaceUIWindow)
#define IID_IShellExecuteHook IID_IShellExecuteHookA
#define IID_INewShortcutHook IID_INewShortcutHookA
#endif
+extern const GUID IID_IInputObject;
+extern const GUID IID_IInputObjectSite;
#ifdef __cplusplus
}
};
#undef INTERFACE
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IQueryInfo_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IQueryInfo_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IQueryInfo_Release(p) (p)->lpVtbl->Release(p)
+/*** IQueryInfo methods ***/
+#define IQueryInfo_GetInfoTip(p,a,b) (p)->lpVtbl->GetInfoTip(p,a,b)
+#define IQueryInfo_GetInfoFlags(p,a) (p)->lpVtbl->GetInfoFlags(p,a)
+#endif
+
#define INTERFACE IShellExtInit
DECLARE_INTERFACE_(IShellExtInit, IUnknown)
{
#undef INTERFACE
#endif /* _WIN32_IE >= 0x0500 */
+#define INTERFACE IInputObject
+DECLARE_INTERFACE_(IInputObject,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IInputObject methods ***/
+ STDMETHOD(UIActivateIO)(THIS_ BOOL bActivating, LPMSG lpMsg) PURE;
+ STDMETHOD(HasFocusIO)(THIS) PURE;
+ STDMETHOD(TranslateAcceleratorIO)(THIS_ LPMSG lpMsg) PURE;
+};
+#undef INTERFACE
+
+#if defined(COBJMACROS)
+/*** IUnknown methods ***/
+#define IInputObject_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IInputObject_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IInputObject_Release(p) (p)->lpVtbl->Release(p)
+/*** IInputObject methods ***/
+#define IInputObject_UIActivateIO(p,a,b) (p)->lpVtbl->UIActivateIO(p,a,b)
+#define IInputObject_HasFocusIO(p) (p)->lpVtbl->HasFocusIO(p)
+#define IInputObject_TranslateAcceleratorIO(p,a) (p)->lpVtbl->TranslateAcceleratorIO(p,a)
+#endif
+
+#define INTERFACE IInputObjectSite
+DECLARE_INTERFACE_(IInputObjectSite,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface) (THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+ /*** IInputObjectSite methods ***/
+ STDMETHOD(OnFocusChangeIS)(THIS_ LPUNKNOWN lpUnknown, BOOL bFocus) PURE;
+};
+#undef INTERFACE
+
+#if defined(COBJMACROS)
+/*** IUnknown methods ***/
+#define IInputObjectSite_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IInputObjectSite_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IInputObjectSite_Release(p) (p)->lpVtbl->Release(p)
+/*** IInputObject methods ***/
+#define IInputObjectSite_OnFocusChangeIS(p,a,b) (p)->lpVtbl->OnFocusChangeIS(p,a,b)
+#endif
+
typedef HRESULT (CALLBACK *LPFNVIEWCALLBACK)(
IShellView* dwUser,
IShellFolder* pshf,