📄 environment.c
字号:
int iItem;
hwndListView = GetDlgItem(hwndDlg, iDlgItem);
VarData = GlobalAlloc(GPTR, sizeof(VARIABLE_DATA));
if (!DialogBoxParam(hApplet,
MAKEINTRESOURCE(IDD_EDIT_VARIABLE),
hwndDlg,
(DLGPROC) EditVariableDlgProc,
(LPARAM)VarData) > 0)
{
if (VarData->lpName != NULL)
GlobalFree(VarData->lpName);
if (VarData->lpRawValue != NULL)
GlobalFree(VarData->lpRawValue);
if (VarData->lpCookedValue != NULL)
GlobalFree(VarData->lpCookedValue);
GlobalFree(VarData);
}
memset(&lvi, 0x00, sizeof(lvi));
lvi.mask = LVIF_TEXT | LVIF_STATE | LVIF_PARAM;
lvi.lParam = (LPARAM)VarData;
lvi.pszText = VarData->lpName;
lvi.state = 0;
iItem = ListView_InsertItem(hwndListView, &lvi);
ListView_SetItemText(hwndListView, iItem, 1,
(VarData->lpCookedValue) ? VarData->lpCookedValue : VarData->lpRawValue);
}
VOID
OnEditVariable(HWND hwndDlg,
int iDlgItem)
{
HWND hwndListView;
PVARIABLE_DATA VarData;
LV_ITEM lvi;
int iItem;
hwndListView = GetDlgItem(hwndDlg, iDlgItem);
iItem = ListView_GetSelectionMark(hwndListView);
if (iItem != -1)
{
memset(&lvi, 0x00, sizeof(lvi));
lvi.mask = LVIF_PARAM;
lvi.iItem = iItem;
if (ListView_GetItem(hwndListView, &lvi))
{
VarData = (PVARIABLE_DATA)lvi.lParam;
if (DialogBoxParam(hApplet,
MAKEINTRESOURCE(IDD_EDIT_VARIABLE),
hwndDlg,
(DLGPROC) EditVariableDlgProc,
(LPARAM)VarData) > 0)
{
ListView_SetItemText(hwndListView, iItem, 0, VarData->lpName);
ListView_SetItemText(hwndListView, iItem, 1,
(VarData->lpCookedValue) ? VarData->lpCookedValue : VarData->lpRawValue);
}
}
}
}
VOID
OnDeleteVariable(HWND hwndDlg,
int iDlgItem)
{
HWND hwndListView;
PVARIABLE_DATA VarData;
LV_ITEM lvi;
int iItem;
hwndListView = GetDlgItem(hwndDlg, iDlgItem);
iItem = ListView_GetSelectionMark(hwndListView);
if (iItem != -1)
{
memset(&lvi, 0x00, sizeof(lvi));
lvi.mask = LVIF_PARAM;
lvi.iItem = iItem;
if (ListView_GetItem(hwndListView, &lvi))
{
VarData = (PVARIABLE_DATA)lvi.lParam;
if (VarData != NULL)
{
if (VarData->lpName != NULL)
GlobalFree(VarData->lpName);
if (VarData->lpRawValue != NULL)
GlobalFree(VarData->lpRawValue);
if (VarData->lpCookedValue != NULL)
GlobalFree(VarData->lpCookedValue);
GlobalFree(VarData);
lvi.lParam = 0;
}
}
(void)ListView_DeleteItem(hwndListView, iItem);
}
}
VOID
ReleaseListViewItems(HWND hwndDlg,
int iDlgItem)
{
HWND hwndListView;
PVARIABLE_DATA VarData;
int nItemCount;
LV_ITEM lvi;
int i;
hwndListView = GetDlgItem(hwndDlg, iDlgItem);
memset(&lvi, 0x00, sizeof(lvi));
nItemCount = ListView_GetItemCount(hwndListView);
for (i = 0; i < nItemCount; i++)
{
lvi.mask = LVIF_PARAM;
lvi.iItem = i;
if (ListView_GetItem(hwndListView, &lvi))
{
VarData = (PVARIABLE_DATA)lvi.lParam;
if (VarData != NULL)
{
if (VarData->lpName != NULL)
GlobalFree(VarData->lpName);
if (VarData->lpRawValue != NULL)
GlobalFree(VarData->lpRawValue);
if (VarData->lpCookedValue != NULL)
GlobalFree(VarData->lpCookedValue);
GlobalFree(VarData);
lvi.lParam = 0;
}
}
}
}
VOID
SetAllVars(HWND hwndDlg,
INT iDlgItem)
{
HWND hwndListView;
PVARIABLE_DATA VarData;
LV_ITEM lvi;
INT iItem;
HKEY hk;
DWORD Type = 0;
memset(&lvi, 0x00, sizeof(lvi));
/* Get the handle to the list box with all system vars in it */
hwndListView = GetDlgItem(hwndDlg, iDlgItem);
/* first item is 0 */
iItem = 0;
/* set up struct to retreive item */
lvi.mask = LVIF_PARAM;
lvi.iItem = iItem;
/* Open or create the key */
if (RegCreateKeyEx((iDlgItem == IDC_SYSTEM_VARIABLE_LIST ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER),
(iDlgItem == IDC_SYSTEM_VARIABLE_LIST ? _T("SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment") : _T("Environment")),
0,
NULL,
REG_OPTION_NON_VOLATILE,
KEY_WRITE | KEY_READ,
NULL,
&hk,
NULL))
{
return;
}
/* loop through all system variables */
while(ListView_GetItem(hwndListView, &lvi))
{
/* Get the data in each item */
VarData = (PVARIABLE_DATA)lvi.lParam;
if (VarData != NULL)
{
/* Get the type */
RegQueryValueEx(hk,VarData->lpName,NULL,&Type,NULL,NULL);
/* Set the new value */
if (RegSetValueEx(hk,
VarData->lpName,
0,
Type,
(LPBYTE) VarData->lpRawValue,
(DWORD) (_tcslen(VarData->lpRawValue)* sizeof(TCHAR))+1)) // was _tcsclen. lstrlen?
{
RegCloseKey(hk);
return;
}
}
/* Fill struct for next item */
lvi.mask = LVIF_PARAM;
lvi.iItem = ++iItem;
}
RegCloseKey(hk);
}
/* Environment dialog procedure */
INT_PTR 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:
OnNewVariable(hwndDlg, IDC_USER_VARIABLE_LIST);
return TRUE;
case IDC_USER_VARIABLE_EDIT:
OnEditVariable(hwndDlg, IDC_USER_VARIABLE_LIST);
return TRUE;
case IDC_USER_VARIABLE_DELETE:
OnDeleteVariable(hwndDlg, IDC_USER_VARIABLE_LIST);
return TRUE;
case IDC_SYSTEM_VARIABLE_NEW:
OnNewVariable(hwndDlg, IDC_SYSTEM_VARIABLE_LIST);
return TRUE;
case IDC_SYSTEM_VARIABLE_EDIT:
OnEditVariable(hwndDlg, IDC_SYSTEM_VARIABLE_LIST);
return TRUE;
case IDC_SYSTEM_VARIABLE_DELETE:
OnDeleteVariable(hwndDlg, IDC_SYSTEM_VARIABLE_LIST);
return TRUE;
case IDOK:
SetAllVars(hwndDlg, IDC_USER_VARIABLE_LIST);
SetAllVars(hwndDlg, IDC_SYSTEM_VARIABLE_LIST);
case IDCANCEL:
ReleaseListViewItems(hwndDlg, IDC_USER_VARIABLE_LIST);
ReleaseListViewItems(hwndDlg, IDC_SYSTEM_VARIABLE_LIST);
EndDialog(hwndDlg, 0);
return TRUE;
}
break;
case WM_NOTIFY:
{
NMHDR *phdr;
phdr = (NMHDR*)lParam;
switch(phdr->code)
{
case NM_DBLCLK:
{
if (phdr->idFrom == IDC_USER_VARIABLE_LIST ||
phdr->idFrom == IDC_SYSTEM_VARIABLE_LIST)
{
OnEditVariable(hwndDlg, (INT)phdr->idFrom);
return TRUE;
}
}
}
}
break;
}
return FALSE;
}
/* EOF */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -