⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 environment.c

📁 一个类似windows
💻 C
📖 第 1 页 / 共 2 页
字号:
}


VOID
OnNewVariable(HWND hwndDlg,
	      int iDlgItem)
{
  HWND hwndListView;
  PVARIABLE_DATA VarData;
  LV_ITEM lvi;
  int iItem;

  hwndListView = GetDlgItem(hwndDlg, iDlgItem);

  VarData = GlobalAlloc(GPTR, sizeof(VARIABLE_DATA));

  if (!DialogBoxParam(hApplet,
                      MAKEINTRESOURCE(IDD_EDIT_VARIABLE),
                      hwndDlg,
                      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,
                         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) (_tcsclen(VarData->lpRawValue)* sizeof(TCHAR))+1))
         {
            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, phdr->idFrom);
                  return TRUE;
                }
              }
          }
      }
      break;
  }

  return FALSE;
}

/* EOF */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -