@@ -44,11 +44,33 @@ class IGetEnvVarCommandInterface : public IResultCommandInterface<dnyString> {
4444 this ->SetResult (std::wstring (wszValue));
4545 }
4646
47- return ((dwSize) && (GetLastError () == ERROR_SUCCESS ));
47+ return ((dwSize) && (GetLastError () != ERROR_ENVVAR_NOT_FOUND ));
4848 }
4949
5050} g_oGetEnvVarCommandInterface;
5151
52+ class ISetEnvVarCommandInterface : public IResultCommandInterface <dnyBoolean> {
53+ public:
54+ ISetEnvVarCommandInterface () {}
55+
56+ virtual bool CommandCallback (void * pCodeContext, void * pInterfaceObject)
57+ {
58+ ICodeContext* pContext = (ICodeContext*)pCodeContext;
59+
60+ pContext->ReplaceAllVariables (pInterfaceObject);
61+
62+ std::wstring wszName = pContext->GetPartString (1 );
63+ std::wstring wszValue = pContext->GetPartString (2 );
64+
65+ BOOL bResult = SetEnvironmentVariable (wszName.c_str (), wszValue.c_str ());
66+
67+ this ->SetResult (bResult == TRUE );
68+
69+ return true ;
70+ }
71+
72+ } g_oSetEnvVarCommandInterface;
73+
5274bool RegisterEnvironmentVariables (void )
5375{
5476 // Register environment variables
@@ -92,7 +114,9 @@ bool dnyAS_PluginLoad(dnyVersionInfo version, IShellPluginAPI* pInterfaceData, p
92114 // Store plugin infos
93115 memcpy (pPluginInfos, &g_sPluginInfos, sizeof (plugininfo_s));
94116
117+ // Register commands
95118 g_pShellPluginAPI->Cmd_RegisterCommand (L" env_getvariable" , &g_oGetEnvVarCommandInterface, CT_STRING);
119+ g_pShellPluginAPI->Cmd_RegisterCommand (L" env_setvariable" , &g_oSetEnvVarCommandInterface, CT_BOOL);
96120
97121 // Register environment variables
98122 return RegisterEnvironmentVariables ();
@@ -102,7 +126,9 @@ void dnyAS_PluginUnload(void)
102126{
103127 // Called when plugin gets unloaded
104128
129+ // Unregister commands
105130 g_pShellPluginAPI->Cmd_UnregisterCommand (L" env_getvariable" );
131+ g_pShellPluginAPI->Cmd_UnregisterCommand (L" env_setvariable" );
106132}
107133
108134BOOL WINAPI DllMain (HINSTANCE hInstance, DWORD fdwReason, LPVOID lpvReserved)
0 commit comments