📄 ordinal.c
字号:
hRet = IUnknown_QueryInterface(lpUnknown, &IID_IInternetSecurityMgrSite,
(void**)&lpOle);
}
}
if (SUCCEEDED(hRet))
{
/* Lazyness here - Since GetWindow() is the first method for the above 3
* interfaces, we use the same call for them all.
*/
hRet = IOleWindow_GetWindow((IOleWindow*)lpOle, lphWnd);
IUnknown_Release(lpOle);
if (lphWnd)
TRACE("Returning HWND=%p\n", *lphWnd);
}
return hRet;
}
/*************************************************************************
* @ [SHLWAPI.173]
*
* Call a method on as as yet unidentified object.
*
* PARAMS
* pUnk [I] Object supporting the unidentified interface,
* arg [I] Argument for the call on the object.
*
* RETURNS
* S_OK.
*/
HRESULT WINAPI IUnknown_SetOwner(IUnknown *pUnk, ULONG arg)
{
static const GUID guid_173 = {
0x5836fb00, 0x8187, 0x11cf, { 0xa1,0x2b,0x00,0xaa,0x00,0x4a,0xe8,0x37 }
};
IMalloc *pUnk2;
TRACE("(%p,%d)\n", pUnk, arg);
/* Note: arg may not be a ULONG and pUnk2 is for sure not an IMalloc -
* We use this interface as its vtable entry is compatible with the
* object in question.
* FIXME: Find out what this object is and where it should be defined.
*/
if (pUnk &&
SUCCEEDED(IUnknown_QueryInterface(pUnk, &guid_173, (void**)&pUnk2)))
{
IMalloc_Alloc(pUnk2, arg); /* Faked call!! */
IMalloc_Release(pUnk2);
}
return S_OK;
}
/*************************************************************************
* @ [SHLWAPI.174]
*
* Call either IObjectWithSite_SetSite() or IInternetSecurityManager_SetSecuritySite() on
* an object.
*
*/
HRESULT WINAPI IUnknown_SetSite(
IUnknown *obj, /* [in] OLE object */
IUnknown *site) /* [in] Site interface */
{
HRESULT hr;
IObjectWithSite *iobjwithsite;
IInternetSecurityManager *isecmgr;
if (!obj) return E_FAIL;
hr = IUnknown_QueryInterface(obj, &IID_IObjectWithSite, (LPVOID *)&iobjwithsite);
TRACE("IID_IObjectWithSite QI ret=%08x, %p\n", hr, iobjwithsite);
if (SUCCEEDED(hr))
{
hr = IObjectWithSite_SetSite(iobjwithsite, site);
TRACE("done IObjectWithSite_SetSite ret=%08x\n", hr);
IUnknown_Release(iobjwithsite);
}
else
{
hr = IUnknown_QueryInterface(obj, &IID_IInternetSecurityManager, (LPVOID *)&isecmgr);
TRACE("IID_IInternetSecurityManager QI ret=%08x, %p\n", hr, isecmgr);
if (FAILED(hr)) return hr;
hr = IInternetSecurityManager_SetSecuritySite(isecmgr, (IInternetSecurityMgrSite *)site);
TRACE("done IInternetSecurityManager_SetSecuritySite ret=%08x\n", hr);
IUnknown_Release(isecmgr);
}
return hr;
}
/*************************************************************************
* @ [SHLWAPI.175]
*
* Call IPersist_GetClassID() on an object.
*
* PARAMS
* lpUnknown [I] Object supporting the IPersist interface
* lpClassId [O] Destination for Class Id
*
* RETURNS
* Success: S_OK. lpClassId contains the Class Id requested.
* Failure: E_FAIL, If lpUnknown is NULL,
* E_NOINTERFACE If lpUnknown does not support IPersist,
* Or an HRESULT error code.
*/
HRESULT WINAPI IUnknown_GetClassID(IUnknown *lpUnknown, CLSID* lpClassId)
{
IPersist* lpPersist;
HRESULT hRet = E_FAIL;
TRACE("(%p,%p)\n", lpUnknown, debugstr_guid(lpClassId));
if (lpUnknown)
{
hRet = IUnknown_QueryInterface(lpUnknown,&IID_IPersist,(void**)&lpPersist);
if (SUCCEEDED(hRet))
{
IPersist_GetClassID(lpPersist, lpClassId);
IPersist_Release(lpPersist);
}
}
return hRet;
}
/*************************************************************************
* @ [SHLWAPI.176]
*
* Retrieve a Service Interface from an object.
*
* PARAMS
* lpUnknown [I] Object to get an IServiceProvider interface from
* sid [I] Service ID for IServiceProvider_QueryService() call
* riid [I] Function requested for QueryService call
* lppOut [O] Destination for the service interface pointer
*
* RETURNS
* Success: S_OK. lppOut contains an object providing the requested service
* Failure: An HRESULT error code
*
* NOTES
* lpUnknown is expected to support the IServiceProvider interface.
*/
HRESULT WINAPI IUnknown_QueryService(IUnknown* lpUnknown, REFGUID sid, REFIID riid,
LPVOID *lppOut)
{
IServiceProvider* pService = NULL;
HRESULT hRet;
if (!lppOut)
return E_FAIL;
*lppOut = NULL;
if (!lpUnknown)
return E_FAIL;
/* Get an IServiceProvider interface from the object */
hRet = IUnknown_QueryInterface(lpUnknown, &IID_IServiceProvider,
(LPVOID*)&pService);
if (!hRet && pService)
{
TRACE("QueryInterface returned (IServiceProvider*)%p\n", pService);
/* Get a Service interface from the object */
hRet = IServiceProvider_QueryService(pService, sid, riid, lppOut);
TRACE("(IServiceProvider*)%p returned (IUnknown*)%p\n", pService, *lppOut);
/* Release the IServiceProvider interface */
IUnknown_Release(pService);
}
return hRet;
}
/*************************************************************************
* @ [SHLWAPI.177]
*
* Loads a popup menu.
*
* PARAMS
* hInst [I] Instance handle
* szName [I] Menu name
*
* RETURNS
* Success: TRUE.
* Failure: FALSE.
*/
BOOL WINAPI SHLoadMenuPopup(HINSTANCE hInst, LPCWSTR szName)
{
HMENU hMenu, hSubMenu;
if ((hMenu = LoadMenuW(hInst, szName)))
{
if ((hSubMenu = GetSubMenu(hMenu, 0)))
RemoveMenu(hMenu, 0, MF_BYPOSITION);
DestroyMenu(hMenu);
return TRUE;
}
return FALSE;
}
typedef struct _enumWndData
{
UINT uiMsgId;
WPARAM wParam;
LPARAM lParam;
LRESULT (WINAPI *pfnPost)(HWND,UINT,WPARAM,LPARAM);
} enumWndData;
/* Callback for SHLWAPI_178 */
static BOOL CALLBACK SHLWAPI_EnumChildProc(HWND hWnd, LPARAM lParam)
{
enumWndData *data = (enumWndData *)lParam;
TRACE("(%p,%p)\n", hWnd, data);
data->pfnPost(hWnd, data->uiMsgId, data->wParam, data->lParam);
return TRUE;
}
/*************************************************************************
* @ [SHLWAPI.178]
*
* Send or post a message to every child of a window.
*
* PARAMS
* hWnd [I] Window whose children will get the messages
* uiMsgId [I] Message Id
* wParam [I] WPARAM of message
* lParam [I] LPARAM of message
* bSend [I] TRUE = Use SendMessageA(), FALSE = Use PostMessageA()
*
* RETURNS
* Nothing.
*
* NOTES
* The appropriate ASCII or Unicode function is called for the window.
*/
void WINAPI SHPropagateMessage(HWND hWnd, UINT uiMsgId, WPARAM wParam, LPARAM lParam, BOOL bSend)
{
enumWndData data;
TRACE("(%p,%u,%ld,%ld,%d)\n", hWnd, uiMsgId, wParam, lParam, bSend);
if(hWnd)
{
data.uiMsgId = uiMsgId;
data.wParam = wParam;
data.lParam = lParam;
if (bSend)
data.pfnPost = IsWindowUnicode(hWnd) ? (void*)SendMessageW : (void*)SendMessageA;
else
data.pfnPost = IsWindowUnicode(hWnd) ? (void*)PostMessageW : (void*)PostMessageA;
EnumChildWindows(hWnd, SHLWAPI_EnumChildProc, (LPARAM)&data);
}
}
/*************************************************************************
* @ [SHLWAPI.180]
*
* Remove all sub-menus from a menu.
*
* PARAMS
* hMenu [I] Menu to remove sub-menus from
*
* RETURNS
* Success: 0. All sub-menus under hMenu are removed
* Failure: -1, if any parameter is invalid
*/
DWORD WINAPI SHRemoveAllSubMenus(HMENU hMenu)
{
int iItemCount = GetMenuItemCount(hMenu) - 1;
while (iItemCount >= 0)
{
HMENU hSubMenu = GetSubMenu(hMenu, iItemCount);
if (hSubMenu)
RemoveMenu(hMenu, iItemCount, MF_BYPOSITION);
iItemCount--;
}
return iItemCount;
}
/*************************************************************************
* @ [SHLWAPI.181]
*
* Enable or disable a menu item.
*
* PARAMS
* hMenu [I] Menu holding menu item
* uID [I] ID of menu item to enable/disable
* bEnable [I] Whether to enable (TRUE) or disable (FALSE) the item.
*
* RETURNS
* The return code from EnableMenuItem.
*/
UINT WINAPI SHEnableMenuItem(HMENU hMenu, UINT wItemID, BOOL bEnable)
{
return EnableMenuItem(hMenu, wItemID, bEnable ? MF_ENABLED : MF_GRAYED);
}
/*************************************************************************
* @ [SHLWAPI.182]
*
* Check or uncheck a menu item.
*
* PARAMS
* hMenu [I] Menu holding menu item
* uID [I] ID of menu item to check/uncheck
* bCheck [I] Whether to check (TRUE) or uncheck (FALSE) the item.
*
* RETURNS
* The return code from CheckMenuItem.
*/
DWORD WINAPI SHCheckMenuItem(HMENU hMenu, UINT uID, BOOL bCheck)
{
return CheckMenuItem(hMenu, uID, bCheck ? MF_CHECKED : MF_UNCHECKED);
}
/*************************************************************************
* @ [SHLWAPI.183]
*
* Register a window class if it isn't already.
*
* PARAMS
* lpWndClass [I] Window class to register
*
* RETURNS
* The result of the RegisterClassA call.
*/
DWORD WINAPI SHRegisterClassA(WNDCLASSA *wndclass)
{
WNDCLASSA wca;
if (GetClassInfoA(wndclass->hInstance, wndclass->lpszClassName, &wca))
return TRUE;
return (DWORD)RegisterClassA(wndclass);
}
/*************************************************************************
* @ [SHLWAPI.186]
*/
BOOL WINAPI SHSimulateDrop(IDropTarget *pDrop, IDataObject *pDataObj,
DWORD grfKeyState, PPOINTL lpPt, DWORD* pdwEffect)
{
DWORD dwEffect = DROPEFFECT_LINK | DROPEFFECT_MOVE | DROPEFFECT_COPY;
POINTL pt = { 0, 0 };
if (!lpPt)
lpPt = &pt;
if (!pdwEffect)
pdwEffect = &dwEffect;
IDropTarget_DragEnter(pDrop, pDataObj, grfKeyState, *lpPt, pdwEffect);
if (*pdwEffect)
return IDropTarget_Drop(pDrop, pDataObj, grfKeyState, *lpPt, pdwEffect);
IDropTarget_DragLeave(pDrop);
return TRUE;
}
/*************************************************************************
* @ [SHLWAPI.187]
*
* Call IPersistPropertyBag_Load() on an object.
*
* PARAMS
* lpUnknown [I] Object supporting the IPersistPropertyBag interface
* lpPropBag [O] Destination for loaded IPropertyBag
*
* RETURNS
* Success: S_OK.
* Failure: An HRESULT error code, or E_FAIL if lpUnknown is NULL.
*/
DWORD WINAPI SHLoadFromPropertyBag(IUnknown *lpUnknown, IPropertyBag* lpPropBag)
{
IPersistPropertyBag* lpPPBag;
HRESULT hRet = E_FAIL;
TRACE("(%p,%p)\n", lpUnknown, lpPropBag);
if (lpUnknown)
{
hRet = IUnknown_QueryInterface(lpUnknown, &IID_IPersistPropertyBag,
(void**)&lpPPBag);
if (SUCCEEDED(hRet) && lpPPBag)
{
hRet = IPersistPropertyBag_Load(lpPPBag, lpPropBag, NULL);
IPersistPropertyBag_Release(lpPPBag);
}
}
return hRet;
}
/*************************************************************************
* @ [SHLWAPI.188]
*
* Call IOleControlSite_TranslateAccelerator() on an object.
*
* PARAMS
* lpUnknown [I] Object supporting the IOleControlSite interface.
* lpMsg [I] Key message to be processed.
* dwModifiers [I] Flags containing the state of the modifier keys.
*
* RETURNS
* Success: S_OK.
* Failure: An HRESULT error code, or E_INVALIDARG if lpUnknown is NULL.
*/
HRESULT WINAPI IUnknown_TranslateAcceleratorOCS(IUnknown *lpUnknown, LPMSG lpMsg, DWORD dwModifiers)
{
IOleControlSite* lpCSite = NULL;
HRESULT hRet = E_INVALIDARG;
TRACE("(%p,%p,0x%08x)\n", lpUnknown, lpMsg, dwModifiers);
if (lpUnknown)
{
hRet = IUnknown_QueryInterface(lpUnknown, &IID_IOleControlSite,
(void**)&lpCSite);
if (SUCCEEDED(hRet) && lpCSite)
{
hRet = IOleControlSite_TranslateAccelerator(lpCSite, lpMsg, dwModifiers);
IOleControlSite_Release(lpCSite);
}
}
return hRet;
}
/*************************************************************************
* @ [SHLWAPI.189]
*
* Call IOleControlSite_GetExtendedControl() on an object.
*
* PARAMS
* lpUnknown [I] Object supporting the IOleControlSite interface.
* lppDisp [O] Destination for resulting IDispatch.
*
* RETURNS
* Success: S_OK.
* Failure: An HRESULT error code, or E_FAIL if lpUnknown is NULL.
*/
DWORD WINAPI IUnknown_OnFocusOCS(IUnknown *lpUnknown, IDispatch** lppDisp)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -