Files
Open-Shell-Menu/Src/StartMenu/StartMenuHelper/dllmain.cpp
ge0rdi 714c98130a Simplify project files
Put common build settings into separate props file.
This way it will be much easier to do changes that should affect all
projects in the future.
2023-06-09 17:52:18 +02:00

125 lines
3.1 KiB
C++

// dllmain.cpp : Implementation of DllMain.
#include "stdafx.h"
#include "resource.h"
#include "StartMenuHelper_h.h"
#include "dllmain.h"
#include "Settings.h"
#include "Translations.h"
#include "StringUtils.h"
#include "ResourceHelper.h"
#include "..\StartMenuDLL\LogManager.h"
CStartMenuHelperModule _AtlModule;
void UpgradeSettings( bool bShared )
{
}
void UpdateSettings( void )
{
CRegKey regKey;
wchar_t language[100]=L"";
if (regKey.Open(HKEY_LOCAL_MACHINE,L"Software\\OpenShell\\OpenShell",KEY_READ|KEY_WOW64_64KEY)==ERROR_SUCCESS)
{
ULONG size=_countof(language);
if (regKey.QueryStringValue(L"DefaultLanguage",language,&size)!=ERROR_SUCCESS)
language[0]=0;
}
UpdateSetting(L"Language",language,false);
}
void ClosingSettings( HWND hWnd, int flags, int command )
{
}
void SettingChangedCallback( const CSetting *pSetting )
{
}
const wchar_t *GetDocRelativePath( void )
{
return L"";
}
CSetting g_Settings[]={
{L"MenuStyleGroup",CSetting::TYPE_GROUP},
{L"MenuStyle",CSetting::TYPE_INT,0,0,2},
{L"Classic1",CSetting::TYPE_RADIO},
{L"Classic2",CSetting::TYPE_RADIO},
{L"Win7",CSetting::TYPE_RADIO},
{L"GeneralBehavior",CSetting::TYPE_GROUP},
{L"AutoStart",CSetting::TYPE_BOOL,0,0,1},
{L"PinnedPrograms",CSetting::TYPE_INT,0,0,1},
{L"FastItems",CSetting::TYPE_RADIO},
{L"PinnedItems",CSetting::TYPE_RADIO},
{L"DisablePinExt",CSetting::TYPE_BOOL,0,0,0},
{L"FolderStartMenu",CSetting::TYPE_STRING,0,0,L""},
{L"FolderCommonStartMenu",CSetting::TYPE_STRING,0,0,L""},
{L"PinnedItemsPath",CSetting::TYPE_DIRECTORY,0,0,L"%APPDATA%\\OpenShell\\Pinned"},
{L"Language",CSetting::TYPE_GROUP},
{L"Language",CSetting::TYPE_STRING,0,0,L"",CSetting::FLAG_COLD|CSetting::FLAG_SHARED},
{NULL}
};
static HANDLE g_DllInitThread;
static DWORD CALLBACK DllInitThread( void* )
{
CoInitialize(NULL);
InitSettings(g_Settings,COMPONENT_MENU,NULL);
wchar_t path[_MAX_PATH];
path[0]=0;
#ifdef BUILD_SETUP
{
CRegKey regKey;
if (regKey.Open(HKEY_LOCAL_MACHINE,L"Software\\OpenShell\\OpenShell",KEY_READ|KEY_WOW64_64KEY)==ERROR_SUCCESS)
{
ULONG size=_countof(path);
if (regKey.QueryStringValue(L"Path",path,&size)!=ERROR_SUCCESS)
path[0]=0;
}
}
#endif
if (!path[0])
{
GetModuleFileName(g_Instance,path,_countof(path));
PathRemoveFileSpec(path);
}
wchar_t fname[_MAX_PATH];
Sprintf(fname,_countof(fname),L"%s" INI_PATH L"StartMenuHelperL10N.ini",path);
CString language=GetSettingString(L"Language");
ParseTranslations(fname,language);
CoUninitialize();
return 0;
}
void WaitDllInitThread( void )
{
ATLASSERT(g_DllInitThread);
WaitForSingleObject(g_DllInitThread,INFINITE);
LogToFile(STARTUP_LOG,L"StartMenuHelper: WaitDllInitThread");
}
// DLL Entry Point
extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
if (dwReason==DLL_PROCESS_ATTACH)
{
LogToFile(STARTUP_LOG,L"StartMenuHelper: DLL_PROCESS_ATTACH");
g_Instance=hInstance;
g_DllInitThread=CreateThread(NULL,0,DllInitThread,NULL,0,NULL);
}
if (dwReason==DLL_PROCESS_DETACH)
{
LogToFile(STARTUP_LOG,L"StartMenuHelper: DLL_PROCESS_DETACH");
}
return _AtlModule.DllMain(dwReason, lpReserved);
}