MESSAGE_HANDLER(WM_MOUSEMOVE, OnMouseMove)
MESSAGE_HANDLER(WM_NCMOUSEMOVE, OnMouseMove)
MESSAGE_HANDLER(WM_APP_TRAYDESTROY, OnAppTrayDestroy)
- MESSAGE_HANDLER(TWM_OPENSTARTMENU, OnOpenStartMenu)
- MESSAGE_HANDLER(TWM_DOEXITWINDOWS, OnDoExitWindows)
MESSAGE_HANDLER(WM_CLOSE, OnDoExitWindows)
MESSAGE_HANDLER(WM_HOTKEY, OnHotkey)
MESSAGE_HANDLER(WM_NCCALCSIZE, OnNcCalcSize)
MESSAGE_HANDLER(TWM_SETTINGSCHANGED, OnTaskbarSettingsChanged)
+ MESSAGE_HANDLER(TWM_OPENSTARTMENU, OnOpenStartMenu)
+ MESSAGE_HANDLER(TWM_DOEXITWINDOWS, OnDoExitWindows)
ALT_MSG_MAP(1)
END_MSG_MAP()
#include <shellapi.h>
#include <htiframe.h>
#include <strsafe.h>
+#include <undocshell.h>
extern HRESULT IUnknown_ShowDW(IUnknown * punk, BOOL fShow);
LRESULT OnInitMenuPopup(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
LRESULT OnSetFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
LRESULT RelayMsgToShellView(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
- LRESULT PropagateMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
+ LRESULT OnSettingChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
LRESULT OnClose(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
LRESULT OnFolderOptions(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
LRESULT OnMapNetworkDrive(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
MESSAGE_HANDLER(WM_MEASUREITEM, RelayMsgToShellView)
MESSAGE_HANDLER(WM_DRAWITEM, RelayMsgToShellView)
MESSAGE_HANDLER(WM_MENUSELECT, RelayMsgToShellView)
- MESSAGE_HANDLER(WM_WININICHANGE, PropagateMessage)
+ MESSAGE_HANDLER(WM_SETTINGCHANGE, OnSettingChange)
COMMAND_ID_HANDLER(IDM_FILE_CLOSE, OnClose)
COMMAND_ID_HANDLER(IDM_TOOLS_FOLDEROPTIONS, OnFolderOptions)
COMMAND_ID_HANDLER(IDM_TOOLS_MAPNETWORKDRIVE, OnMapNetworkDrive)
return 0;
}
-LRESULT CShellBrowser::PropagateMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
+LRESULT CShellBrowser::OnSettingChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
{
+ LPVOID lpEnvironment;
+ RegenerateUserEnvironment(&lpEnvironment, TRUE);
+
SHPropagateMessage(m_hWnd, uMsg, wParam, lParam, TRUE);
return 0;
}
return lpNumber;
}
+/*
+ * Implemented
+ */
+EXTERN_C BOOL
+WINAPI
+RegenerateUserEnvironment(LPVOID *lpEnvironment, BOOL bUpdateSelf)
+{
+ HANDLE hUserToken;
+ if (!OpenProcessToken(GetCurrentProcess(), TOKEN_READ | TOKEN_WRITE, &hUserToken))
+ return FALSE;
+
+ BOOL bResult = CreateEnvironmentBlock(lpEnvironment, hUserToken, TRUE);
+ if (!bResult || !lpEnvironment)
+ {
+ CloseHandle(hUserToken);
+ return FALSE;
+ }
+
+ if (bUpdateSelf)
+ {
+ LPWSTR pszz = (LPWSTR)*lpEnvironment;
+ if (!pszz)
+ return FALSE;
+
+ while (*pszz)
+ {
+ size_t cch = wcslen(pszz);
+ LPWSTR pchEqual = wcschr(pszz, L'=');
+ if (pchEqual)
+ {
+ CStringW strName(pszz, pchEqual - pszz);
+ SetEnvironmentVariableW(strName, pchEqual + 1);
+ }
+ pszz += cch + 1;
+ }
+ }
+
+ CloseHandle(hUserToken);
+
+ return bResult;
+}
+
/**************************************************************************
* Default ClassFactory types
*/