mirror of
https://github.com/reactos/reactos.git
synced 2024-11-20 14:30:57 +00:00
[EXPLORER-NEW]
* Fix the fallback for when rshell functions are not exported or rshell is not present. * While at it, avoid unnecessary calls to LoadLibrary. svn path=/branches/shell-experiments/; revision=63357
This commit is contained in:
parent
a55f7c589b
commit
a8667b0ffe
1 changed files with 44 additions and 22 deletions
|
@ -20,14 +20,16 @@
|
||||||
|
|
||||||
#include "precomp.h"
|
#include "precomp.h"
|
||||||
|
|
||||||
|
static HINSTANCE hRShell = NULL;
|
||||||
|
|
||||||
typedef HRESULT(*PSTARTMENU_CONSTRUCTOR)(REFIID riid, void **ppv);
|
typedef HRESULT(*PSTARTMENU_CONSTRUCTOR)(REFIID riid, void **ppv);
|
||||||
|
|
||||||
HRESULT
|
HRESULT CStartMenu_Constructor(REFIID riid, void **ppv)
|
||||||
CStartMenu_Constructor(
|
|
||||||
REFIID riid,
|
|
||||||
void **ppv)
|
|
||||||
{
|
{
|
||||||
HINSTANCE hRShell = LoadLibraryW(L"rshell.dll");
|
if (!hRShell)
|
||||||
|
{
|
||||||
|
hRShell = LoadLibraryW(L"rshell.dll");
|
||||||
|
}
|
||||||
|
|
||||||
if (hRShell)
|
if (hRShell)
|
||||||
{
|
{
|
||||||
|
@ -49,7 +51,12 @@ typedef HANDLE(WINAPI *PSHCREATEDESKTOP)(IShellDesktopTray *ShellDesk);
|
||||||
|
|
||||||
HANDLE WINAPI SHCreateDesktop(IShellDesktopTray *ShellDesk)
|
HANDLE WINAPI SHCreateDesktop(IShellDesktopTray *ShellDesk)
|
||||||
{
|
{
|
||||||
HINSTANCE hRShell = LoadLibraryW(L"rshell.dll");
|
HINSTANCE hFallback;
|
||||||
|
|
||||||
|
if (!hRShell)
|
||||||
|
{
|
||||||
|
hRShell = LoadLibraryW(L"rshell.dll");
|
||||||
|
}
|
||||||
|
|
||||||
if (hRShell)
|
if (hRShell)
|
||||||
{
|
{
|
||||||
|
@ -60,11 +67,11 @@ HANDLE WINAPI SHCreateDesktop(IShellDesktopTray *ShellDesk)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
hRShell = LoadLibraryW(L"shell32.dll");
|
hFallback = GetModuleHandleW(L"shell32.dll");
|
||||||
|
|
||||||
if (hRShell)
|
if (hFallback)
|
||||||
{
|
{
|
||||||
PSHCREATEDESKTOP func = (PSHCREATEDESKTOP)GetProcAddress(hRShell, "SHCreateDesktop");
|
PSHCREATEDESKTOP func = (PSHCREATEDESKTOP) GetProcAddress(hFallback, (LPCSTR) 200);
|
||||||
if (func)
|
if (func)
|
||||||
{
|
{
|
||||||
return func(ShellDesk);
|
return func(ShellDesk);
|
||||||
|
@ -78,7 +85,12 @@ typedef BOOL(WINAPI *PSHDESKTOPMESSAGELOOP)(HANDLE hDesktop);
|
||||||
|
|
||||||
BOOL WINAPI SHDesktopMessageLoop(HANDLE hDesktop)
|
BOOL WINAPI SHDesktopMessageLoop(HANDLE hDesktop)
|
||||||
{
|
{
|
||||||
HINSTANCE hRShell = LoadLibraryW(L"rshell.dll");
|
HINSTANCE hFallback;
|
||||||
|
|
||||||
|
if (!hRShell)
|
||||||
|
{
|
||||||
|
hRShell = LoadLibraryW(L"rshell.dll");
|
||||||
|
}
|
||||||
|
|
||||||
if (hRShell)
|
if (hRShell)
|
||||||
{
|
{
|
||||||
|
@ -89,11 +101,11 @@ BOOL WINAPI SHDesktopMessageLoop(HANDLE hDesktop)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
hRShell = LoadLibraryW(L"shell32.dll");
|
hFallback = GetModuleHandleW(L"shell32.dll");
|
||||||
|
|
||||||
if (hRShell)
|
if (hFallback)
|
||||||
{
|
{
|
||||||
PSHDESKTOPMESSAGELOOP func = (PSHDESKTOPMESSAGELOOP)GetProcAddress(hRShell, "SHDesktopMessageLoop");
|
PSHDESKTOPMESSAGELOOP func = (PSHDESKTOPMESSAGELOOP) GetProcAddress(hFallback, (LPCSTR) 201);
|
||||||
if (func)
|
if (func)
|
||||||
{
|
{
|
||||||
return func(hDesktop);
|
return func(hDesktop);
|
||||||
|
@ -107,7 +119,12 @@ typedef DWORD(WINAPI* PWINLIST_INIT)(void);
|
||||||
|
|
||||||
DWORD WINAPI WinList_Init(void)
|
DWORD WINAPI WinList_Init(void)
|
||||||
{
|
{
|
||||||
HINSTANCE hRShell = LoadLibraryW(L"rshell.dll");
|
HINSTANCE hFallback;
|
||||||
|
|
||||||
|
if (!hRShell)
|
||||||
|
{
|
||||||
|
hRShell = LoadLibraryW(L"rshell.dll");
|
||||||
|
}
|
||||||
|
|
||||||
if (hRShell)
|
if (hRShell)
|
||||||
{
|
{
|
||||||
|
@ -118,11 +135,11 @@ DWORD WINAPI WinList_Init(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
hRShell = LoadLibraryW(L"shdocvw.dll");
|
hFallback = GetModuleHandleW(L"shdocvw.dll");
|
||||||
|
|
||||||
if (hRShell)
|
if (hFallback)
|
||||||
{
|
{
|
||||||
PWINLIST_INIT func = (PWINLIST_INIT)GetProcAddress(hRShell, "WinList_Init");
|
PWINLIST_INIT func = (PWINLIST_INIT) GetProcAddress(hFallback, (LPCSTR) 110);
|
||||||
if (func)
|
if (func)
|
||||||
{
|
{
|
||||||
return func();
|
return func();
|
||||||
|
@ -136,7 +153,12 @@ typedef void (WINAPI *PSHELLDDEINIT)(BOOL bInit);
|
||||||
|
|
||||||
void WINAPI ShellDDEInit(BOOL bInit)
|
void WINAPI ShellDDEInit(BOOL bInit)
|
||||||
{
|
{
|
||||||
HINSTANCE hRShell = LoadLibraryW(L"rshell.dll");
|
HINSTANCE hFallback;
|
||||||
|
|
||||||
|
if (!hRShell)
|
||||||
|
{
|
||||||
|
hRShell = LoadLibraryW(L"rshell.dll");
|
||||||
|
}
|
||||||
|
|
||||||
if (hRShell)
|
if (hRShell)
|
||||||
{
|
{
|
||||||
|
@ -148,15 +170,15 @@ void WINAPI ShellDDEInit(BOOL bInit)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
hRShell = LoadLibraryW(L"shell32.dll");
|
hFallback = GetModuleHandleW(L"shell32.dll");
|
||||||
|
|
||||||
if (hRShell)
|
if (hFallback)
|
||||||
{
|
{
|
||||||
PSHELLDDEINIT func = (PSHELLDDEINIT)GetProcAddress(hRShell, "ShellDDEInit");
|
PSHELLDDEINIT func = (PSHELLDDEINIT) GetProcAddress(hFallback, (LPCSTR) 188);
|
||||||
if (func)
|
if (func)
|
||||||
{
|
{
|
||||||
func(bInit);
|
func(bInit);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue