Skip to content

Commit b1a8243

Browse files
committed
env_setvariable command
1 parent e47ad9b commit b1a8243

File tree

1 file changed

+27
-1
lines changed

1 file changed

+27
-1
lines changed

defplugins/envvars/envvars/interface.cpp

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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+
5274
bool 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

108134
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD fdwReason, LPVOID lpvReserved)

0 commit comments

Comments
 (0)