ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

environment.c
Go to the documentation of this file.
00001 /*
00002  * PROJECT:     ReactOS System Control Panel Applet
00003  * LICENSE:     GPL - See COPYING in the top level directory
00004  * FILE:        dll/cpl/sysdm/environment.c
00005  * PURPOSE:     Environment variable settings
00006  * COPYRIGHT:   Copyright Eric Kohl
00007  *
00008  */
00009 
00010 #include "precomp.h"
00011 
00012 
00013 typedef struct _VARIABLE_DATA
00014 {
00015     DWORD dwType;
00016     LPTSTR lpName;
00017     LPTSTR lpRawValue;
00018     LPTSTR lpCookedValue;
00019 } VARIABLE_DATA, *PVARIABLE_DATA;
00020 
00021 
00022 static INT
00023 GetSelectedListViewItem(HWND hwndListView)
00024 {
00025     INT iCount;
00026     INT iItem;
00027 
00028     iCount = SendMessage(hwndListView,
00029                          LVM_GETITEMCOUNT,
00030                          0,
00031                          0);
00032     if (iCount != LB_ERR)
00033     {
00034         for (iItem = 0; iItem < iCount; iItem++)
00035         {
00036             if (SendMessage(hwndListView,
00037                             LVM_GETITEMSTATE,
00038                             iItem,
00039                             (LPARAM) LVIS_SELECTED) == LVIS_SELECTED)
00040             {
00041                 return iItem;
00042             }
00043         }
00044     }
00045 
00046     return -1;
00047 }
00048 
00049 
00050 static INT_PTR CALLBACK
00051 EditVariableDlgProc(HWND hwndDlg,
00052                     UINT uMsg,
00053                     WPARAM wParam,
00054                     LPARAM lParam)
00055 {
00056     PVARIABLE_DATA VarData;
00057     DWORD dwNameLength;
00058     DWORD dwValueLength;
00059 
00060     VarData = (PVARIABLE_DATA)GetWindowLongPtr(hwndDlg, GWL_USERDATA);
00061 
00062     switch (uMsg)
00063     {
00064         case WM_INITDIALOG:
00065             SetWindowLongPtr(hwndDlg, GWL_USERDATA, (LONG_PTR)lParam);
00066             VarData = (PVARIABLE_DATA)lParam;
00067 
00068             if (VarData->lpName != NULL)
00069             {
00070                 SendDlgItemMessage(hwndDlg, IDC_VARIABLE_NAME, WM_SETTEXT, 0, (LPARAM)VarData->lpName);
00071             }
00072 
00073             if (VarData->lpRawValue != NULL)
00074             {
00075                 SendDlgItemMessage(hwndDlg, IDC_VARIABLE_VALUE, WM_SETTEXT, 0, (LPARAM)VarData->lpRawValue);
00076             }
00077             break;
00078 
00079         case WM_COMMAND:
00080             switch (LOWORD(wParam))
00081             {
00082                 case IDOK:
00083                     dwNameLength = (DWORD)SendDlgItemMessage(hwndDlg, IDC_VARIABLE_NAME, WM_GETTEXTLENGTH, 0, 0);
00084                     dwValueLength = (DWORD)SendDlgItemMessage(hwndDlg, IDC_VARIABLE_VALUE, WM_GETTEXTLENGTH, 0, 0);
00085                     if (dwNameLength > 0 && dwValueLength > 0)
00086                     {
00087                         LPTSTR p;
00088 
00089                         if (VarData->lpName == NULL)
00090                         {
00091                             VarData->lpName = GlobalAlloc(GPTR, (dwNameLength + 1) * sizeof(TCHAR));
00092                         }
00093                         else if (_tcslen(VarData->lpName) < dwNameLength)
00094                         {
00095                             GlobalFree(VarData->lpName);
00096                             VarData->lpName = GlobalAlloc(GPTR, (dwNameLength + 1) * sizeof(TCHAR));
00097                         }
00098                         SendDlgItemMessage(hwndDlg, IDC_VARIABLE_NAME, WM_GETTEXT, dwNameLength + 1, (LPARAM)VarData->lpName);
00099 
00100                         if (VarData->lpRawValue == NULL)
00101                         {
00102                             VarData->lpRawValue = GlobalAlloc(GPTR, (dwValueLength + 1) * sizeof(TCHAR));
00103                         }
00104                         else if (_tcslen(VarData->lpRawValue) < dwValueLength)
00105                         {
00106                             GlobalFree(VarData->lpRawValue);
00107                             VarData->lpRawValue = GlobalAlloc(GPTR, (dwValueLength + 1) * sizeof(TCHAR));
00108                         }
00109                         SendDlgItemMessage(hwndDlg, IDC_VARIABLE_VALUE, WM_GETTEXT, dwValueLength + 1, (LPARAM)VarData->lpRawValue);
00110 
00111                         if (VarData->lpCookedValue != NULL)
00112                         {
00113                             GlobalFree(VarData->lpCookedValue);
00114                             VarData->lpCookedValue = NULL;
00115                         }
00116 
00117                         p = _tcschr(VarData->lpRawValue, _T('%'));
00118                         if (p && _tcschr(++p, _T('%')))
00119                         {
00120                             VarData->dwType = REG_EXPAND_SZ;
00121                             VarData->lpCookedValue = GlobalAlloc(GPTR, 2 * MAX_PATH * sizeof(TCHAR));
00122 
00123                             ExpandEnvironmentStrings(VarData->lpRawValue,
00124                                                      VarData->lpCookedValue,
00125                                                      2 * MAX_PATH);
00126                         }
00127                         else
00128                         {
00129                             VarData->dwType = REG_SZ;
00130                             VarData->lpCookedValue = GlobalAlloc(GPTR, (dwValueLength + 1) * sizeof(TCHAR));
00131                             _tcscpy(VarData->lpCookedValue, VarData->lpRawValue);
00132                         }
00133                     }
00134                     EndDialog(hwndDlg, 1);
00135                     return TRUE;
00136 
00137                 case IDCANCEL:
00138                     EndDialog(hwndDlg, 0);
00139                     return TRUE;
00140             }
00141             break;
00142     }
00143 
00144     return FALSE;
00145 }
00146 
00147 
00148 static VOID
00149 GetEnvironmentVariables(HWND hwndListView,
00150                         HKEY hRootKey,
00151                         LPTSTR lpSubKeyName)
00152 {
00153     HKEY hKey;
00154     DWORD dwValues;
00155     DWORD dwMaxValueNameLength;
00156     DWORD dwMaxValueDataLength;
00157     DWORD i;
00158     LPTSTR lpName;
00159     LPTSTR lpData;
00160     LPTSTR lpExpandData;
00161     DWORD dwNameLength;
00162     DWORD dwDataLength;
00163     DWORD dwType;
00164     PVARIABLE_DATA VarData;
00165 
00166     LV_ITEM lvi;
00167     int iItem;
00168 
00169     if (RegOpenKeyEx(hRootKey,
00170                      lpSubKeyName,
00171                      0,
00172                      KEY_READ,
00173                      &hKey))
00174         return;
00175 
00176     if (RegQueryInfoKey(hKey,
00177                         NULL,
00178                         NULL,
00179                         NULL,
00180                         NULL,
00181                         NULL,
00182                         NULL,
00183                         &dwValues,
00184                         &dwMaxValueNameLength,
00185                         &dwMaxValueDataLength,
00186                         NULL,
00187                         NULL))
00188     {
00189         RegCloseKey(hKey);
00190         return;
00191     }
00192 
00193     lpName = GlobalAlloc(GPTR, (dwMaxValueNameLength + 1) * sizeof(TCHAR));
00194     if (lpName == NULL)
00195     {
00196         RegCloseKey(hKey);
00197         return;
00198     }
00199 
00200     lpData = GlobalAlloc(GPTR, (dwMaxValueDataLength + 1) * sizeof(TCHAR));
00201     if (lpData == NULL)
00202     {
00203         GlobalFree(lpData);
00204         RegCloseKey(hKey);
00205         return;
00206     }
00207 
00208     lpExpandData = GlobalAlloc(GPTR, 2048 * sizeof(TCHAR));
00209     if (lpExpandData == NULL)
00210     {
00211         GlobalFree(lpName);
00212         GlobalFree(lpData);
00213         RegCloseKey(hKey);
00214         return;
00215     }
00216 
00217     for (i = 0; i < dwValues; i++)
00218     {
00219         dwNameLength = dwMaxValueNameLength + 1;
00220         dwDataLength = dwMaxValueDataLength + 1;
00221 
00222         if (RegEnumValue(hKey,
00223                          i,
00224                          lpName,
00225                          &dwNameLength,
00226                          NULL,
00227                          &dwType,
00228                          (LPBYTE)lpData,
00229                          &dwDataLength))
00230         {
00231             GlobalFree(lpName);
00232             GlobalFree(lpData);
00233             RegCloseKey(hKey);
00234             return;
00235         }
00236 
00237         if (dwType != REG_SZ && dwType != REG_EXPAND_SZ)
00238             continue;
00239 
00240         VarData = GlobalAlloc(GPTR, sizeof(VARIABLE_DATA));
00241 
00242         VarData->dwType = dwType;
00243 
00244         VarData->lpName = GlobalAlloc(GPTR, (dwNameLength + 1) * sizeof(TCHAR));
00245         _tcscpy(VarData->lpName, lpName);
00246 
00247         VarData->lpRawValue = GlobalAlloc(GPTR, (dwDataLength + 1) * sizeof(TCHAR));
00248         _tcscpy(VarData->lpRawValue, lpData);
00249 
00250         ExpandEnvironmentStrings(lpData, lpExpandData, 2048);
00251 
00252         VarData->lpCookedValue = GlobalAlloc(GPTR, (_tcslen(lpExpandData) + 1) * sizeof(TCHAR));
00253         _tcscpy(VarData->lpCookedValue, lpExpandData);
00254 
00255         memset(&lvi, 0x00, sizeof(lvi));
00256         lvi.mask = LVIF_TEXT | LVIF_STATE | LVIF_PARAM;
00257         lvi.lParam = (LPARAM)VarData;
00258         lvi.pszText = VarData->lpName;
00259         lvi.state = (i == 0) ? LVIS_SELECTED : 0;
00260         iItem = ListView_InsertItem(hwndListView, &lvi);
00261 
00262         ListView_SetItemText(hwndListView, iItem, 1, VarData->lpCookedValue);
00263     }
00264 
00265     GlobalFree(lpExpandData);
00266     GlobalFree(lpName);
00267     GlobalFree(lpData);
00268     RegCloseKey(hKey);
00269 }
00270 
00271 
00272 static VOID
00273 SetListViewColumns(HWND hwndListView)
00274 {
00275     RECT rect;
00276     LV_COLUMN column;
00277     TCHAR szStr[32];
00278 
00279     GetClientRect(hwndListView, &rect);
00280 
00281     memset(&column, 0x00, sizeof(column));
00282     column.mask=LVCF_FMT | LVCF_WIDTH | LVCF_SUBITEM | LVCF_TEXT;
00283     column.fmt=LVCFMT_LEFT;
00284     column.cx = (INT)((rect.right - rect.left) * 0.32);
00285     column.iSubItem = 0;
00286     LoadString(hApplet, IDS_VARIABLE, szStr, sizeof(szStr) / sizeof(szStr[0]));
00287     column.pszText = szStr;
00288     (void)ListView_InsertColumn(hwndListView, 0, &column);
00289 
00290     column.cx = (INT)((rect.right - rect.left) * 0.63);
00291     column.iSubItem = 1;
00292     LoadString(hApplet, IDS_VALUE, szStr, sizeof(szStr) / sizeof(szStr[0]));
00293     column.pszText = szStr;
00294     (void)ListView_InsertColumn(hwndListView, 1, &column);
00295 }
00296 
00297 
00298 static VOID
00299 OnInitDialog(HWND hwndDlg)
00300 {
00301     HWND hwndListView;
00302 
00303     /* Set user environment variables */
00304     hwndListView = GetDlgItem(hwndDlg, IDC_USER_VARIABLE_LIST);
00305 
00306     (void)ListView_SetExtendedListViewStyle(hwndListView, LVS_EX_FULLROWSELECT);
00307 
00308     SetListViewColumns(hwndListView);
00309 
00310     GetEnvironmentVariables(hwndListView,
00311                             HKEY_CURRENT_USER,
00312                             _T("Environment"));
00313 
00314     (void)ListView_SetColumnWidth(hwndListView, 2, LVSCW_AUTOSIZE_USEHEADER);
00315 
00316     ListView_SetItemState(hwndListView, 0,
00317                           LVIS_FOCUSED | LVIS_SELECTED,
00318                           LVIS_FOCUSED | LVIS_SELECTED);
00319 
00320     (void)ListView_Update(hwndListView,0);
00321 
00322     /* Set system environment variables */
00323     hwndListView = GetDlgItem(hwndDlg, IDC_SYSTEM_VARIABLE_LIST);
00324 
00325     (void)ListView_SetExtendedListViewStyle(hwndListView, LVS_EX_FULLROWSELECT);
00326 
00327     SetListViewColumns(hwndListView);
00328 
00329     GetEnvironmentVariables(hwndListView,
00330                             HKEY_LOCAL_MACHINE,
00331                             _T("SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment"));
00332 
00333     (void)ListView_SetColumnWidth(hwndListView, 2, LVSCW_AUTOSIZE_USEHEADER);
00334 
00335     ListView_SetItemState(hwndListView, 0,
00336                           LVIS_FOCUSED | LVIS_SELECTED,
00337                           LVIS_FOCUSED | LVIS_SELECTED);
00338 
00339     (void)ListView_Update(hwndListView, 0);
00340 }
00341 
00342 
00343 static VOID
00344 OnNewVariable(HWND hwndDlg,
00345               INT iDlgItem)
00346 {
00347     HWND hwndListView;
00348     PVARIABLE_DATA VarData;
00349     LV_ITEM lvi;
00350     INT iItem;
00351 
00352     hwndListView = GetDlgItem(hwndDlg, iDlgItem);
00353 
00354     VarData = GlobalAlloc(GPTR, sizeof(VARIABLE_DATA));
00355 
00356     if (!DialogBoxParam(hApplet,
00357                         MAKEINTRESOURCE(IDD_EDIT_VARIABLE),
00358                         hwndDlg,
00359                         (DLGPROC)EditVariableDlgProc,
00360                         (LPARAM)VarData) > 0)
00361     {
00362         if (VarData->lpName != NULL)
00363             GlobalFree(VarData->lpName);
00364 
00365         if (VarData->lpRawValue != NULL)
00366             GlobalFree(VarData->lpRawValue);
00367 
00368         if (VarData->lpCookedValue != NULL)
00369             GlobalFree(VarData->lpCookedValue);
00370 
00371         GlobalFree(VarData);
00372     }
00373     else
00374     {
00375         if (VarData->lpName != NULL && (VarData->lpCookedValue || VarData->lpRawValue))
00376         {
00377             memset(&lvi, 0x00, sizeof(lvi));
00378             lvi.mask = LVIF_TEXT | LVIF_STATE | LVIF_PARAM;
00379             lvi.lParam = (LPARAM)VarData;
00380             lvi.pszText = VarData->lpName;
00381             lvi.state = 0;
00382             iItem = ListView_InsertItem(hwndListView, &lvi);
00383 
00384             ListView_SetItemText(hwndListView, iItem, 1, VarData->lpCookedValue);
00385         }
00386     }
00387 }
00388 
00389 
00390 static VOID
00391 OnEditVariable(HWND hwndDlg,
00392                INT iDlgItem)
00393 {
00394     HWND hwndListView;
00395     PVARIABLE_DATA VarData;
00396     LV_ITEM lvi;
00397     INT iItem;
00398 
00399     hwndListView = GetDlgItem(hwndDlg, iDlgItem);
00400 
00401     iItem = GetSelectedListViewItem(hwndListView);
00402     if (iItem != -1)
00403     {
00404         memset(&lvi, 0x00, sizeof(lvi));
00405         lvi.mask = LVIF_PARAM;
00406         lvi.iItem = iItem;
00407 
00408         if (ListView_GetItem(hwndListView, &lvi))
00409         {
00410             VarData = (PVARIABLE_DATA)lvi.lParam;
00411 
00412             if (DialogBoxParam(hApplet,
00413                                MAKEINTRESOURCE(IDD_EDIT_VARIABLE),
00414                                hwndDlg,
00415                                (DLGPROC)EditVariableDlgProc,
00416                                (LPARAM)VarData) > 0)
00417             {
00418                 ListView_SetItemText(hwndListView, iItem, 0, VarData->lpName);
00419                 ListView_SetItemText(hwndListView, iItem, 1, VarData->lpCookedValue);
00420             }
00421         }
00422     }
00423 }
00424 
00425 
00426 static VOID
00427 OnDeleteVariable(HWND hwndDlg,
00428                  INT iDlgItem)
00429 {
00430     HWND hwndListView;
00431     PVARIABLE_DATA VarData;
00432     LV_ITEM lvi;
00433     INT iItem;
00434 
00435     hwndListView = GetDlgItem(hwndDlg, iDlgItem);
00436 
00437     iItem = GetSelectedListViewItem(hwndListView);
00438     if (iItem != -1)
00439     {
00440         memset(&lvi, 0x00, sizeof(lvi));
00441         lvi.mask = LVIF_PARAM;
00442         lvi.iItem = iItem;
00443 
00444         if (ListView_GetItem(hwndListView, &lvi))
00445         {
00446             VarData = (PVARIABLE_DATA)lvi.lParam;
00447             if (VarData != NULL)
00448             {
00449                 if (VarData->lpName != NULL)
00450                     GlobalFree(VarData->lpName);
00451 
00452                 if (VarData->lpRawValue != NULL)
00453                     GlobalFree(VarData->lpRawValue);
00454 
00455                 if (VarData->lpCookedValue != NULL)
00456                     GlobalFree(VarData->lpCookedValue);
00457 
00458                 GlobalFree(VarData);
00459                 lvi.lParam = 0;
00460             }
00461         }
00462 
00463         (void)ListView_DeleteItem(hwndListView, iItem);
00464 
00465         /* Select the previous item */
00466         if (iItem > 0)
00467             iItem--;
00468 
00469         ListView_SetItemState(hwndListView, iItem,
00470                               LVIS_FOCUSED | LVIS_SELECTED,
00471                               LVIS_FOCUSED | LVIS_SELECTED);
00472     }
00473 }
00474 
00475 
00476 static VOID
00477 ReleaseListViewItems(HWND hwndDlg,
00478                      INT iDlgItem)
00479 {
00480     HWND hwndListView;
00481     PVARIABLE_DATA VarData;
00482     LV_ITEM lvi;
00483     INT nItemCount;
00484     INT i;
00485 
00486     hwndListView = GetDlgItem(hwndDlg, iDlgItem);
00487 
00488     memset(&lvi, 0x00, sizeof(lvi));
00489 
00490     nItemCount = ListView_GetItemCount(hwndListView);
00491     for (i = 0; i < nItemCount; i++)
00492     {
00493         lvi.mask = LVIF_PARAM;
00494         lvi.iItem = i;
00495 
00496         if (ListView_GetItem(hwndListView, &lvi))
00497         {
00498             VarData = (PVARIABLE_DATA)lvi.lParam;
00499             if (VarData != NULL)
00500             {
00501                 if (VarData->lpName != NULL)
00502                     GlobalFree(VarData->lpName);
00503 
00504                 if (VarData->lpRawValue != NULL)
00505                     GlobalFree(VarData->lpRawValue);
00506 
00507                 if (VarData->lpCookedValue != NULL)
00508                     GlobalFree(VarData->lpCookedValue);
00509 
00510                 GlobalFree(VarData);
00511                 lvi.lParam = 0;
00512             }
00513         }
00514     }
00515 }
00516 
00517 
00518 static VOID
00519 SetAllVars(HWND hwndDlg,
00520            INT iDlgItem)
00521 {
00522     HWND hwndListView;
00523     PVARIABLE_DATA VarData;
00524     LV_ITEM lvi;
00525     INT iItem;
00526     HKEY hKey;
00527     DWORD dwValueCount;
00528     DWORD dwMaxValueNameLength;
00529     LPTSTR *aValueArray;
00530     DWORD dwNameLength;
00531     DWORD i;
00532     TCHAR szBuffer[256];
00533     LPTSTR lpBuffer;
00534 
00535     memset(&lvi, 0x00, sizeof(lvi));
00536 
00537     /* Get the handle to the list box with all system vars in it */
00538     hwndListView = GetDlgItem(hwndDlg, iDlgItem);
00539     /* First item is 0 */
00540     iItem = 0;
00541     /* Set up struct to retreive item */
00542     lvi.mask = LVIF_PARAM;
00543     lvi.iItem = iItem;
00544 
00545     /* Open or create the key */
00546     if (RegCreateKeyEx((iDlgItem == IDC_SYSTEM_VARIABLE_LIST ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER),
00547                        (iDlgItem == IDC_SYSTEM_VARIABLE_LIST ? _T("SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment") : _T("Environment")),
00548                        0,
00549                        NULL,
00550                        REG_OPTION_NON_VOLATILE,
00551                        KEY_WRITE | KEY_READ,
00552                        NULL,
00553                        &hKey,
00554                        NULL))
00555     {
00556         return;
00557     }
00558 
00559     /* Get the number of values and the maximum value name length */
00560     if (RegQueryInfoKey(hKey,
00561                         NULL,
00562                         NULL,
00563                         NULL,
00564                         NULL,
00565                         NULL,
00566                         NULL,
00567                         &dwValueCount,
00568                         &dwMaxValueNameLength,
00569                         NULL,
00570                         NULL,
00571                         NULL))
00572     {
00573         RegCloseKey(hKey);
00574         return;
00575     }
00576 
00577     if (dwValueCount > 0)
00578     {
00579         /* Allocate the value array */
00580         aValueArray = GlobalAlloc(GPTR, dwValueCount * sizeof(LPTSTR));
00581         if (aValueArray != NULL)
00582         {
00583             /* Get all value names */
00584             for (i = 0; i < dwValueCount; i++)
00585             {
00586                 dwNameLength = 256;
00587                 if (!RegEnumValue(hKey,
00588                                   i,
00589                                   szBuffer,
00590                                   &dwNameLength,
00591                                   NULL,
00592                                   NULL,
00593                                   NULL,
00594                                   NULL))
00595                 {
00596                     /* Allocate a value name buffer, fill it and attach it to the array */
00597                     lpBuffer = (LPTSTR)GlobalAlloc(GPTR, (dwNameLength + 1) * sizeof(TCHAR));
00598                     if (lpBuffer != NULL)
00599                     {
00600                         _tcscpy(lpBuffer, szBuffer);
00601                         aValueArray[i] = lpBuffer;
00602                     }
00603                 }
00604             }
00605 
00606             /* Delete all values */
00607             for (i = 0; i < dwValueCount; i++)
00608             {
00609                 if (aValueArray[i] != NULL)
00610                 {
00611                     /* Delete the value */
00612                     RegDeleteValue(hKey,
00613                                    aValueArray[i]);
00614 
00615                     /* Free the value name */
00616                     GlobalFree(aValueArray[i]);
00617                 }
00618             }
00619 
00620             /* Free the value array */
00621             GlobalFree(aValueArray);
00622         }
00623     }
00624 
00625     /* Loop through all variables */
00626     while (ListView_GetItem(hwndListView, &lvi))
00627     {
00628         /* Get the data in each item */
00629         VarData = (PVARIABLE_DATA)lvi.lParam;
00630         if (VarData != NULL)
00631         {
00632             /* Set the new value */
00633             if (RegSetValueEx(hKey,
00634                               VarData->lpName,
00635                               0,
00636                               VarData->dwType,
00637                               (LPBYTE)VarData->lpRawValue,
00638                               (DWORD)(_tcslen(VarData->lpRawValue) + 1) * sizeof(TCHAR)))
00639             {
00640                 RegCloseKey(hKey);
00641                 return;
00642             }
00643         }
00644 
00645         /* Fill struct for next item */
00646         lvi.mask = LVIF_PARAM;
00647         lvi.iItem = ++iItem;
00648     }
00649 
00650     RegCloseKey(hKey);
00651 }
00652 
00653 
00654 static BOOL
00655 OnNotify(HWND hwndDlg, NMHDR *phdr)
00656 {
00657     switch(phdr->code)
00658     {
00659         case NM_DBLCLK:
00660             if (phdr->idFrom == IDC_USER_VARIABLE_LIST ||
00661                 phdr->idFrom == IDC_SYSTEM_VARIABLE_LIST)
00662             {
00663                 OnEditVariable(hwndDlg, (INT)phdr->idFrom);
00664                 return TRUE;
00665             }
00666             break;
00667 
00668         case LVN_KEYDOWN:
00669             if (((LPNMLVKEYDOWN)phdr)->wVKey == VK_DELETE &&
00670                 (phdr->idFrom == IDC_USER_VARIABLE_LIST ||
00671                  phdr->idFrom == IDC_SYSTEM_VARIABLE_LIST))
00672             {
00673                 OnDeleteVariable(hwndDlg, (INT)phdr->idFrom);
00674                 return TRUE;
00675             }
00676             break;
00677     }
00678 
00679     return FALSE;
00680 }
00681 
00682 
00683 /* Environment dialog procedure */
00684 INT_PTR CALLBACK
00685 EnvironmentDlgProc(HWND hwndDlg,
00686                    UINT uMsg,
00687                    WPARAM wParam,
00688                    LPARAM lParam)
00689 {
00690     switch (uMsg)
00691     {
00692         case WM_INITDIALOG:
00693             OnInitDialog(hwndDlg);
00694             break;
00695 
00696         case WM_COMMAND:
00697             switch (LOWORD(wParam))
00698             {
00699                 case IDC_USER_VARIABLE_NEW:
00700                     OnNewVariable(hwndDlg, IDC_USER_VARIABLE_LIST);
00701                     return TRUE;
00702 
00703                 case IDC_USER_VARIABLE_EDIT:
00704                     OnEditVariable(hwndDlg, IDC_USER_VARIABLE_LIST);
00705                     return TRUE;
00706 
00707                 case IDC_USER_VARIABLE_DELETE:
00708                     OnDeleteVariable(hwndDlg, IDC_USER_VARIABLE_LIST);
00709                     return TRUE;
00710 
00711                 case IDC_SYSTEM_VARIABLE_NEW:
00712                     OnNewVariable(hwndDlg, IDC_SYSTEM_VARIABLE_LIST);
00713                     return TRUE;
00714 
00715                 case IDC_SYSTEM_VARIABLE_EDIT:
00716                     OnEditVariable(hwndDlg, IDC_SYSTEM_VARIABLE_LIST);
00717                     return TRUE;
00718 
00719                 case IDC_SYSTEM_VARIABLE_DELETE:
00720                     OnDeleteVariable(hwndDlg, IDC_SYSTEM_VARIABLE_LIST);
00721                     return TRUE;
00722 
00723                 case IDOK:
00724                     SetAllVars(hwndDlg, IDC_USER_VARIABLE_LIST);
00725                     SetAllVars(hwndDlg, IDC_SYSTEM_VARIABLE_LIST);
00726                     SendMessage(HWND_BROADCAST, WM_WININICHANGE,
00727                                 0, (LPARAM)_T("Environment"));
00728                     EndDialog(hwndDlg, 0);
00729                     return TRUE;
00730 
00731                 case IDCANCEL:
00732                     EndDialog(hwndDlg, 0);
00733                     return TRUE;
00734             }
00735             break;
00736 
00737         case WM_DESTROY:
00738             ReleaseListViewItems(hwndDlg, IDC_USER_VARIABLE_LIST);
00739             ReleaseListViewItems(hwndDlg, IDC_SYSTEM_VARIABLE_LIST);
00740             break;
00741 
00742         case WM_NOTIFY:
00743             return OnNotify(hwndDlg, (NMHDR*)lParam);
00744     }
00745 
00746     return FALSE;
00747 }
00748 
00749 /* EOF */

Generated on Thu May 24 2012 04:19:04 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.