Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenenvironment.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
1.7.6.1
|