--- /dev/null
+/*
+ * ReactOS
+ * Copyright (C) 2004 ReactOS Team
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+/* $Id: environment.c,v 1.1 2004/07/02 20:28:00 ekohl Exp $
+ *
+ * PROJECT: ReactOS System Control Panel
+ * FILE: lib/cpl/sysdm/environment.c
+ * PURPOSE: Environment variable settings
+ * PROGRAMMER: Eric Kohl
+ */
+
+#include <windows.h>
+#include <commctrl.h>
+#include <stdlib.h>
+#include <tchar.h>
+
+#include "resource.h"
+#include "sysdm.h"
+
+
+static VOID
+SetEnvironmentVariables(HWND hwndListView,
+ HKEY hRootKey,
+ LPTSTR lpSubKeyName)
+{
+ HKEY hKey;
+ DWORD dwValues;
+ DWORD dwMaxValueNameLength;
+ DWORD dwMaxValueDataLength;
+ DWORD i;
+ LPTSTR lpName;
+ LPTSTR lpData;
+ LPTSTR lpExpandData;
+ DWORD dwNameLength;
+ DWORD dwDataLength;
+ DWORD dwType;
+
+ LV_ITEM lvi;
+ int nIndex;
+
+ if (RegOpenKeyEx(hRootKey,
+ lpSubKeyName,
+ 0,
+ KEY_READ,
+ &hKey))
+ return;
+
+ if (RegQueryInfoKey(hKey,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ &dwValues,
+ &dwMaxValueNameLength,
+ &dwMaxValueDataLength,
+ NULL,
+ NULL))
+ {
+ RegCloseKey(hKey);
+ return;
+ }
+
+ lpName = GlobalAlloc(GPTR, (dwMaxValueNameLength + 1) * sizeof(TCHAR));
+ if (lpName == NULL)
+ {
+ RegCloseKey(hKey);
+ return;
+ }
+
+ lpData = GlobalAlloc(GPTR, (dwMaxValueDataLength + 1) * sizeof(TCHAR));
+ if (lpData == NULL)
+ {
+ GlobalFree(lpData);
+ RegCloseKey(hKey);
+ return;
+ }
+
+ for (i = 0; i < dwValues; i++)
+ {
+ dwNameLength = dwMaxValueNameLength + 1;
+ dwDataLength = dwMaxValueDataLength + 1;
+ if (RegEnumValue(hKey,
+ i,
+ lpName,
+ &dwNameLength,
+ NULL,
+ &dwType,
+ (LPBYTE)lpData,
+ &dwDataLength))
+ {
+ GlobalFree(lpName);
+ GlobalFree(lpData);
+ RegCloseKey(hKey);
+ return;
+ }
+
+ if (dwType == REG_EXPAND_SZ)
+ {
+ lpExpandData = GlobalAlloc(GPTR, MAX_PATH * sizeof(TCHAR));
+ if (lpExpandData == NULL)
+ {
+ GlobalFree(lpName);
+ GlobalFree(lpData);
+ RegCloseKey(hKey);
+ return;
+ }
+
+ ExpandEnvironmentStrings(lpData,
+ lpExpandData,
+ MAX_PATH);
+ }
+
+ memset(&lvi, 0x00, sizeof(lvi));
+ lvi.mask = LVIF_TEXT | LVIF_STATE;
+ lvi.pszText = lpName;
+ lvi.state=0;
+ nIndex = ListView_InsertItem(hwndListView, &lvi);
+
+ if (dwType == REG_EXPAND_SZ)
+ {
+ ListView_SetItemText(hwndListView, nIndex, 1, lpExpandData);
+ GlobalFree(lpExpandData);
+ }
+ else
+ {
+ ListView_SetItemText(hwndListView, nIndex, 1, lpData);
+ }
+ }
+
+ GlobalFree(lpName);
+ GlobalFree(lpData);
+ RegCloseKey(hKey);
+}
+
+
+static VOID
+SetListViewColumns(HWND hwndListView)
+{
+ RECT rect;
+ LV_COLUMN column;
+
+ GetClientRect(hwndListView, &rect);
+
+ memset(&column, 0x00, sizeof(column));
+ column.mask=LVCF_FMT | LVCF_WIDTH | LVCF_SUBITEM|LVCF_TEXT;
+ column.fmt=LVCFMT_LEFT;
+ column.cx = (rect.right - rect.left) / 3;
+ column.iSubItem = 0;
+ column.pszText = _T("Variable");
+ ListView_InsertColumn(hwndListView, 0, &column);
+
+ column.cx = (rect.right - rect.left) - ((rect.right - rect.left) / 3) - 1;
+ column.iSubItem = 1;
+ column.pszText = _T("Value");
+ ListView_InsertColumn(hwndListView, 1, &column);
+}
+
+
+static VOID
+OnInitDialog(HWND hwndDlg)
+{
+ HWND hwndListView;
+
+ /* Set user environment variables */
+ hwndListView = GetDlgItem(hwndDlg, IDC_USER_VARIABLE_LIST);
+
+ SetListViewColumns(hwndListView);
+
+ SetEnvironmentVariables(hwndListView,
+ HKEY_CURRENT_USER,
+ _T("Environment"));
+
+ ListView_SetColumnWidth(hwndListView,2,LVSCW_AUTOSIZE_USEHEADER);
+ ListView_Update(hwndListView,0);
+
+
+ /* Set system environment variables */
+ hwndListView = GetDlgItem(hwndDlg, IDC_SYSTEM_VARIABLE_LIST);
+
+ SetListViewColumns(hwndListView);
+
+ SetEnvironmentVariables(hwndListView,
+ HKEY_LOCAL_MACHINE,
+ _T("SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment"));
+
+ ListView_SetColumnWidth(hwndListView,2,LVSCW_AUTOSIZE_USEHEADER);
+ ListView_Update(hwndListView,0);
+}
+
+
+/* Environment dialog procedure */
+BOOL CALLBACK
+EnvironmentDlgProc(HWND hwndDlg,
+ UINT uMsg,
+ WPARAM wParam,
+ LPARAM lParam)
+{
+ switch (uMsg)
+ {
+ case WM_INITDIALOG:
+ OnInitDialog(hwndDlg);
+ break;
+
+ case WM_COMMAND:
+ switch (LOWORD(wParam))
+ {
+ case IDC_USER_VARIABLE_NEW:
+ case IDC_USER_VARIABLE_EDIT:
+ case IDC_USER_VARIABLE_DELETE:
+ break;
+
+ case IDC_SYSTEM_VARIABLE_NEW:
+ case IDC_SYSTEM_VARIABLE_EDIT:
+ case IDC_SYSTEM_VARIABLE_DELETE:
+ break;
+
+ case IDOK:
+ EndDialog(hwndDlg, 0);
+ return TRUE;
+
+ case IDCANCEL:
+ EndDialog(hwndDlg, 0);
+ return TRUE;
+ }
+ break;
+ }
+
+ return FALSE;
+}
+
+/* EOF */
LTEXT "Workgroup:",IDC_WORKGROUPDOMAIN,PROPSHEETPADDING,LABELLINE(6)-6,PROPSHEETWIDTH-(6*PROPSHEETPADDING)-ICONSIZE,LABELLINE(6)-6
LTEXT "",IDC_WORKGROUPDOMAIN_NAME,90,LABELLINE(6)-6,PROPSHEETWIDTH-(6*PROPSHEETPADDING)-ICONSIZE,LABELLINE(6)-6
LTEXT "To use the Network Identfication Wizard to join a domain and create a local user, click Network ID.",-1,PROPSHEETPADDING,LABELLINE(7)+5,PROPSHEETWIDTH-(12*PROPSHEETPADDING)-ICONSIZE,LABELLINE(8)+5
- PUSHBUTTON "&Network ID",IDC_NETWORK_ID,185,LABELLINE(7)+5,54,LABELLINE(1)+4
+ PUSHBUTTON "&Network ID...",IDC_NETWORK_ID,185,LABELLINE(7)+5,54,LABELLINE(1)+4
LTEXT "To rename this computer or join a domain, click Properties.",-1,PROPSHEETPADDING,LABELLINE(11)+2,PROPSHEETWIDTH-(12*PROPSHEETPADDING)-ICONSIZE,LABELLINE(12)+2
- PUSHBUTTON "&Properties",IDC_NETWORK_PROPERTY,185,LABELLINE(11)+2,54,LABELLINE(1)+4
+ PUSHBUTTON "&Properties...",IDC_NETWORK_PROPERTY,185,LABELLINE(11)+2,54,LABELLINE(1)+4
END
IDD_PROPPAGEHARDWARE DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT
GROUPBOX "Hardware Wizard",-1,PROPSHEETPADDING,LABELLINE(1),PROPSHEETWIDTH-(2*PROPSHEETPADDING),LABELLINE(6)+PROPSHEETPADDING
LTEXT "The Hardware wizard helps you install, uninstall, repair, unplug, eject, and configure your hardware.",-1,(4*PROPSHEETPADDING)+ICONSIZE,LABELLINE(2),PROPSHEETWIDTH-(6*PROPSHEETPADDING)-ICONSIZE,LABELLINE(3)
ICON IDI_DEVMGR, IDC_ICON1, (2*PROPSHEETPADDING),LABELLINE(2), ICONSIZE, ICONSIZE, SS_ICON
- PUSHBUTTON "&Hardware Wizard",IDC_HARDWARE_WIZARD,PROPSHEETWIDTH-(17*PROPSHEETPADDING),LABELLINE(5)+2,(15*PROPSHEETPADDING),14
+ PUSHBUTTON "&Hardware Wizard...",IDC_HARDWARE_WIZARD,PROPSHEETWIDTH-(17*PROPSHEETPADDING),LABELLINE(5)+2,(15*PROPSHEETPADDING),14
GROUPBOX "Device Manager",-1,PROPSHEETPADDING,LABELLINE(8)+5,PROPSHEETWIDTH-(2*PROPSHEETPADDING),LABELLINE(7)+2
ICON IDI_DEVMGR, IDC_ICON1, (2*PROPSHEETPADDING),LABELLINE(10)-3,ICONSIZE, ICONSIZE, SS_ICON
LTEXT "The Device Manager lists all the hardware devices installed on your computer. Use the Device Manager to change the properties of any device.",-1,(4*PROPSHEETPADDING)+ICONSIZE,LABELLINE(10)-3,PROPSHEETWIDTH-(6*PROPSHEETPADDING)-ICONSIZE,LABELLINE(3)
- PUSHBUTTON "&Device Manager",IDC_HARDWARE_DEVICE_MANAGER,PROPSHEETWIDTH-(17*PROPSHEETPADDING),LABELLINE(13)+2,(15*PROPSHEETPADDING),14
+ PUSHBUTTON "&Device Manager...",IDC_HARDWARE_DEVICE_MANAGER,PROPSHEETWIDTH-(17*PROPSHEETPADDING),LABELLINE(13)+2,(15*PROPSHEETPADDING),14
GROUPBOX "Hardware Profiles",-1,PROPSHEETPADDING,LABELLINE(16)+3,PROPSHEETWIDTH-(2*PROPSHEETPADDING),LABELLINE(6)+PROPSHEETPADDING
ICON IDI_DEVMGR, IDC_ICON1, (2*PROPSHEETPADDING),LABELLINE(18)-5, ICONSIZE, ICONSIZE, SS_ICON
LTEXT "Hardware profiles provide a way for you to set up and store different hardware configurations.",0,(4*PROPSHEETPADDING)+ICONSIZE,LABELLINE(18)-5,PROPSHEETWIDTH-(6*PROPSHEETPADDING)-ICONSIZE,LABELLINE(3)
- PUSHBUTTON "&Hardware Profiles",IDC_HARDWARE_PROFILE,PROPSHEETWIDTH-(17*PROPSHEETPADDING),LABELLINE(20)+2,(15*PROPSHEETPADDING),14
+ PUSHBUTTON "&Hardware Profiles...",IDC_HARDWARE_PROFILE,PROPSHEETWIDTH-(17*PROPSHEETPADDING),LABELLINE(20)+2,(15*PROPSHEETPADDING),14
END
IDD_PROPPAGEUSERPROFILE DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT
BEGIN
ICON IDI_DEVMGR, IDC_ICON1, PROPSHEETPADDING,LABELLINE(1), ICONSIZE, ICONSIZE, SS_ICON
LTEXT "User profiles contain desktop settings and other information related to your login. A different profile can be created on each computer you use, or you can select a roaming profile that is the same on every computer you use.",-1,(4*PROPSHEETPADDING)+ICONSIZE,LABELLINE(1),PROPSHEETWIDTH-(6*PROPSHEETPADDING)-ICONSIZE,LABELLINE(4)
- LTEXT "Profiles stored on this computer:",-1,PROPSHEETPADDING,LABELLINE(6),PROPSHEETWIDTH-(6*PROPSHEETPADDING)-ICONSIZE,LABELLINE(6)
- PUSHBUTTON "Delete",IDC_USERPROFILE_DELETE,PROPSHEETPADDING,LABELLINE(23),60,LABELLINE(1)+2
- PUSHBUTTON "Change Type",IDC_USERPROFILE_CHANGE,95,LABELLINE(23),60,LABELLINE(1)+2
- PUSHBUTTON "Copy To",IDC_USERPROFILE_COPY,180,LABELLINE(23),60,LABELLINE(1)+2
+ LTEXT "Profiles stored on this computer:",-1,PROPSHEETPADDING,LABELLINE(6),PROPSHEETWIDTH-(6*PROPSHEETPADDING)-ICONSIZE,LABELLINE(1)
+ CONTROL "",IDC_USERPROFILE_LIST,"SysListView32",LVS_REPORT|LVS_SINGLESEL|LVS_SHOWSELALWAYS|LVS_SORTASCENDING|WS_BORDER|WS_TABSTOP,PROPSHEETPADDING,LABELLINE(8),PROPSHEETWIDTH-(2*PROPSHEETPADDING),LABELLINE(11),WS_EX_CLIENTEDGE
+
+ PUSHBUTTON "Delete",IDC_USERPROFILE_DELETE,PROPSHEETPADDING,LABELLINE(20),60,LABELLINE(1)+2
+ PUSHBUTTON "Change Type...",IDC_USERPROFILE_CHANGE,95,LABELLINE(20),60,LABELLINE(1)+2
+ PUSHBUTTON "Copy To...",IDC_USERPROFILE_COPY,180,LABELLINE(20),60,LABELLINE(1)+2
END
IDD_PROPPAGEADVANCED DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT
GROUPBOX "Performance",-1,PROPSHEETPADDING,LABELLINE(1),PROPSHEETWIDTH-(2*PROPSHEETPADDING),LABELLINE(6)+PROPSHEETPADDING
ICON IDI_DEVMGR, IDC_ICON1, (2*PROPSHEETPADDING),LABELLINE(2), ICONSIZE, ICONSIZE, SS_ICON
LTEXT "Performance options control how applications use memory, which affects the speed of your computer.",-1,(4*PROPSHEETPADDING)+ICONSIZE,LABELLINE(2),PROPSHEETWIDTH-(6*PROPSHEETPADDING)-ICONSIZE,LABELLINE(3)
- PUSHBUTTON "&Performance Options",IDC_ENVVAR,PROPSHEETWIDTH-(17*PROPSHEETPADDING),LABELLINE(5)+2,(15*PROPSHEETPADDING),14
+ PUSHBUTTON "&Performance Options...",IDC_ENVVAR,PROPSHEETWIDTH-(17*PROPSHEETPADDING),LABELLINE(5)+2,(15*PROPSHEETPADDING),14
GROUPBOX "Environment Variables",-1,PROPSHEETPADDING,LABELLINE(8)+2,PROPSHEETWIDTH-(2*PROPSHEETPADDING),LABELLINE(6)+PROPSHEETPADDING
ICON IDI_DEVMGR, IDC_ICON1, (2*PROPSHEETPADDING),LABELLINE(10)-5, ICONSIZE, ICONSIZE, SS_ICON
LTEXT "Environment variables tell your computer where to find certain types of information.",-1,(4*PROPSHEETPADDING)+ICONSIZE,LABELLINE(10)-5,PROPSHEETWIDTH-(6*PROPSHEETPADDING)-ICONSIZE,LABELLINE(11)
- PUSHBUTTON "&Environment Variables",IDC_ENVVAR,PROPSHEETWIDTH-(17*PROPSHEETPADDING),LABELLINE(12)+2,(15*PROPSHEETPADDING),14
+ PUSHBUTTON "&Environment Variables...",IDC_ENVVAR,PROPSHEETWIDTH-(17*PROPSHEETPADDING),LABELLINE(12)+2,(15*PROPSHEETPADDING),14
GROUPBOX "Startup and Recovery",-1,PROPSHEETPADDING,LABELLINE(15)+3,PROPSHEETWIDTH-(2*PROPSHEETPADDING),LABELLINE(6)+PROPSHEETPADDING
ICON IDI_DEVMGR, IDC_ICON1, (2*PROPSHEETPADDING),LABELLINE(17)-5, ICONSIZE, ICONSIZE, SS_ICON
LTEXT "Startup and recovery options tell your computer how to start and what to do if an error causes your computer to stop.",0,(4*PROPSHEETPADDING)+ICONSIZE,LABELLINE(17)-5,PROPSHEETWIDTH-(6*PROPSHEETPADDING)-ICONSIZE,LABELLINE(3)
- PUSHBUTTON "&Startup and Recovery",IDC_STAREC,PROPSHEETWIDTH-(17*PROPSHEETPADDING),LABELLINE(19)+2,(15*PROPSHEETPADDING),14
+ PUSHBUTTON "&Startup and Recovery...",IDC_STAREC,PROPSHEETWIDTH-(17*PROPSHEETPADDING),LABELLINE(19)+2,(15*PROPSHEETPADDING),14
+END
+
+IDD_ENVIRONMENT_VARIABLES DIALOGEX 6, 18, 252, 245
+STYLE DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION "Environment Variables"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ GROUPBOX "User variables",-1,7,12,238,100
+ LTEXT "&Variables:",-1,14,24,224,8
+ CONTROL "",IDC_USER_VARIABLE_LIST,"SysListView32",LVS_REPORT|LVS_SINGLESEL|LVS_SHOWSELALWAYS|LVS_SORTASCENDING|LVS_NOSORTHEADER|WS_VSCROLL|WS_HSCROLL|WS_TABSTOP,14,35,224,48,WS_EX_CLIENTEDGE
+ PUSHBUTTON "&New...",IDC_USER_VARIABLE_NEW,80,90,50,14
+ PUSHBUTTON "&Edit...",IDC_USER_VARIABLE_EDIT,134,90,50,14
+ PUSHBUTTON "&Delete",IDC_USER_VARIABLE_DELETE,188,90,50,14
+
+ GROUPBOX "System variables",-1,7,116,238,100
+ LTEXT "V&ariables:",410,14,128,224,8
+ CONTROL "",IDC_SYSTEM_VARIABLE_LIST,"SysListView32",LVS_REPORT|LVS_SINGLESEL|LVS_SHOWSELALWAYS|LVS_SORTASCENDING|LVS_NOSORTHEADER|WS_VSCROLL|WS_HSCROLL|WS_TABSTOP,14,139,224,48,WS_EX_CLIENTEDGE
+ PUSHBUTTON "Ne&w...",IDC_SYSTEM_VARIABLE_NEW,80,194,50,14
+ PUSHBUTTON "Ed&it...",IDC_SYSTEM_VARIABLE_EDIT,134,194,50,14
+ PUSHBUTTON "De&lete",IDC_SYSTEM_VARIABLE_DELETE,188,194,50,14
+
+ DEFPUSHBUTTON "OK",IDOK,141,224,50,14,WS_GROUP
+ PUSHBUTTON "Cancel",IDCANCEL,195,224,50,14
END
STRINGTABLE