4 * Copyright 2014 Giannis Adamopoulos
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 static HINSTANCE ghRShell
= NULL
;
25 typedef HRESULT(WINAPI
* PSTARTMENU_CREATEINSTANCE
)(REFIID riid
, void **ppv
);
29 ghRShell
= LoadLibraryW(L
"rshell.dll");
32 HRESULT WINAPI
_CStartMenu_CreateInstance(REFIID riid
, void **ppv
)
36 PSTARTMENU_CREATEINSTANCE func
= (PSTARTMENU_CREATEINSTANCE
)GetProcAddress(ghRShell
, "CStartMenu_CreateInstance");
39 return func(riid
, ppv
);
43 return CoCreateInstance(CLSID_StartMenu
,
50 typedef HANDLE(WINAPI
* PSHCREATEDESKTOP
)(IShellDesktopTray
*ShellDesk
);
52 HANDLE WINAPI
_SHCreateDesktop(IShellDesktopTray
*ShellDesk
)
58 PSHCREATEDESKTOP func
= (PSHCREATEDESKTOP
)GetProcAddress(ghRShell
, "SHCreateDesktop");
61 return func(ShellDesk
);
65 hFallback
= GetModuleHandleW(L
"shell32.dll");
69 PSHCREATEDESKTOP func
= (PSHCREATEDESKTOP
) GetProcAddress(hFallback
, (LPCSTR
) 200);
72 return func(ShellDesk
);
79 typedef BOOL(WINAPI
*PSHDESKTOPMESSAGELOOP
)(HANDLE hDesktop
);
81 BOOL WINAPI
_SHDesktopMessageLoop(HANDLE hDesktop
)
87 PSHDESKTOPMESSAGELOOP func
= (PSHDESKTOPMESSAGELOOP
)GetProcAddress(ghRShell
, "SHDesktopMessageLoop");
90 return func(hDesktop
);
94 hFallback
= GetModuleHandleW(L
"shell32.dll");
98 PSHDESKTOPMESSAGELOOP func
= (PSHDESKTOPMESSAGELOOP
) GetProcAddress(hFallback
, (LPCSTR
) 201);
101 return func(hDesktop
);
108 typedef DWORD(WINAPI
* PWINLIST_INIT
)(void);
110 DWORD WINAPI
_WinList_Init(void)
116 PWINLIST_INIT func
= (PWINLIST_INIT
)GetProcAddress(ghRShell
, "WinList_Init");
123 hFallback
= LoadLibraryW(L
"shdocvw.dll");
127 PWINLIST_INIT func
= (PWINLIST_INIT
) GetProcAddress(hFallback
, (LPCSTR
) 110);
137 typedef void (WINAPI
*PSHELLDDEINIT
)(BOOL bInit
);
139 void WINAPI
_ShellDDEInit(BOOL bInit
)
145 PSHELLDDEINIT func
= (PSHELLDDEINIT
)GetProcAddress(ghRShell
, "ShellDDEInit");
153 hFallback
= GetModuleHandleW(L
"shell32.dll");
157 PSHELLDDEINIT func
= (PSHELLDDEINIT
) GetProcAddress(hFallback
, (LPCSTR
) 188);
166 typedef HRESULT (WINAPI
*CBANDSITEMENU_CREATEINSTANCE
)(REFIID riid
, void **ppv
);
167 HRESULT WINAPI
_CBandSiteMenu_CreateInstance(REFIID riid
, void **ppv
)
171 CBANDSITEMENU_CREATEINSTANCE func
= (CBANDSITEMENU_CREATEINSTANCE
)GetProcAddress(ghRShell
, "CBandSiteMenu_CreateInstance");
174 return func(riid
, ppv
);
178 return CoCreateInstance(CLSID_BandSiteMenu
,
180 CLSCTX_INPROC_SERVER
,
185 typedef HRESULT (WINAPI
*CBANDSITE_CREATEINSTANCE
)(LPUNKNOWN pUnkOuter
, REFIID riid
, void **ppv
);
186 HRESULT WINAPI
_CBandSite_CreateInstance(LPUNKNOWN pUnkOuter
, REFIID riid
, void **ppv
)
190 CBANDSITE_CREATEINSTANCE func
= (CBANDSITE_CREATEINSTANCE
)GetProcAddress(ghRShell
, "CBandSite_CreateInstance");
193 return func(pUnkOuter
, riid
, ppv
);
197 return CoCreateInstance(CLSID_RebarBandSite
,
199 CLSCTX_INPROC_SERVER
,