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

startuppage.c
Go to the documentation of this file.
00001 /*
00002  * PROJECT:     ReactOS Applications
00003  * LICENSE:     LGPL - See COPYING in the top level directory
00004  * FILE:        base/applications/startuppage.c
00005  * PURPOSE:     Startup page message handler
00006  * COPYRIGHT:   Copyright 2005-2006 Christoph von Wittich <Christoph@ApiViewer.de>
00007  *
00008  */
00009 
00010 #include <precomp.h>
00011 
00012 HWND hStartupPage;
00013 HWND hStartupListCtrl;
00014 HWND hStartupDialog;
00015 
00016 void GetAutostartEntriesFromRegistry ( HKEY hRootKey, TCHAR* KeyName );
00017 void GetDisabledAutostartEntriesFromRegistry (TCHAR * szBasePath);
00018 
00019 INT_PTR CALLBACK
00020 StartupPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
00021 {
00022     LV_COLUMN   column;
00023     TCHAR       szTemp[256];
00024     DWORD dwStyle;
00025 
00026     UNREFERENCED_PARAMETER(lParam);
00027     UNREFERENCED_PARAMETER(wParam);
00028 
00029     switch (message) {
00030     case WM_INITDIALOG:
00031 
00032         hStartupListCtrl = GetDlgItem(hDlg, IDC_STARTUP_LIST);
00033         hStartupDialog = hDlg;
00034 
00035         dwStyle = (DWORD) SendMessage(hStartupListCtrl, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
00036         dwStyle = dwStyle | LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES;
00037         SendMessage(hStartupListCtrl, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, dwStyle);
00038 
00039         SetWindowPos(hDlg, NULL, 10, 32, 0, 0, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOZORDER);
00040 
00041         // Initialize the application page's controls
00042         column.mask = LVCF_TEXT | LVCF_WIDTH;
00043 
00044         LoadString(hInst, IDS_STARTUP_COLUMN_ELEMENT, szTemp, 256);
00045         column.pszText = szTemp;
00046         column.cx = 150;
00047         (void)ListView_InsertColumn(hStartupListCtrl, 0, &column);
00048 
00049         column.mask = LVCF_TEXT | LVCF_WIDTH;
00050         LoadString(hInst, IDS_STARTUP_COLUMN_CMD, szTemp, 256);
00051         column.pszText = szTemp;
00052         column.cx = 150;
00053         (void)ListView_InsertColumn(hStartupListCtrl, 1, &column);
00054 
00055         column.mask = LVCF_TEXT | LVCF_WIDTH;
00056         LoadString(hInst, IDS_STARTUP_COLUMN_PATH, szTemp, 256);
00057         column.pszText = szTemp;
00058         column.cx = 250;
00059         (void)ListView_InsertColumn(hStartupListCtrl, 2, &column);
00060 
00061         GetAutostartEntriesFromRegistry(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"));
00062         GetAutostartEntriesFromRegistry(HKEY_CURRENT_USER, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"));
00063         GetDisabledAutostartEntriesFromRegistry (_T("SOFTWARE\\Microsoft\\Shared Tools\\MSConfig\\startupreg"));
00064         GetDisabledAutostartEntriesFromRegistry (_T("SOFTWARE\\Microsoft\\Shared Tools\\MSConfig\\startupfolder"));
00065 
00066         //FIXME: What about HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
00067         //FIXME: Common Startup (startmenu)
00068 
00069         return TRUE;
00070     }
00071 
00072     return 0;
00073 }
00074 
00075 
00076  void
00077 GetDisabledAutostartEntriesFromRegistry (TCHAR * szBasePath)
00078 {
00079     HKEY hKey, hSubKey;
00080     DWORD Index, SubIndex, dwValues, dwSubValues;
00081     DWORD dwValueLength, dwDataLength = MAX_VALUE_NAME;
00082     LV_ITEM item;
00083     TCHAR* Data;
00084     TCHAR szValueName[MAX_KEY_LENGTH];
00085     TCHAR szSubValueName[MAX_KEY_LENGTH];
00086     TCHAR szSubPath[MAX_KEY_LENGTH];
00087 
00088     if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, szBasePath, 0, KEY_READ | KEY_ENUMERATE_SUB_KEYS, &hKey) == ERROR_SUCCESS)
00089     {
00090         if (RegQueryInfoKey(hKey, NULL, NULL, NULL, &dwValues, NULL, NULL, NULL, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
00091         {
00092             for (Index = 0; Index < dwValues; Index++)
00093             {
00094                 dwValueLength = MAX_KEY_LENGTH;
00095                 dwDataLength = MAX_VALUE_NAME;
00096                 Data = (TCHAR*) HeapAlloc(GetProcessHeap(), 0, MAX_VALUE_NAME * sizeof(TCHAR));
00097                 if (Data == NULL)
00098                     break;
00099 
00100                 RegEnumKeyEx(hKey, Index, szValueName, &dwValueLength, NULL, NULL, NULL, NULL);
00101                 _stprintf(szSubPath, _T("%s\\%s"), szBasePath, szValueName);
00102                 memset(&item, 0, sizeof(LV_ITEM));
00103                 item.mask = LVIF_TEXT;
00104                 item.iImage = 0;
00105                 item.pszText = szValueName;
00106                 item.iItem = ListView_GetItemCount(hStartupListCtrl);
00107                 item.lParam = 0;
00108                 (void)ListView_InsertItem(hStartupListCtrl, &item);
00109                 if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, szSubPath, 0, KEY_READ | KEY_ENUMERATE_SUB_KEYS, &hSubKey) == ERROR_SUCCESS)
00110                 {
00111                     if (RegQueryInfoKey(hSubKey, NULL, NULL, NULL, NULL, NULL, NULL, &dwSubValues, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
00112                     {
00113                         for(SubIndex = 0; SubIndex < dwSubValues; SubIndex++)
00114                         {
00115                             dwValueLength = MAX_KEY_LENGTH;
00116                             dwDataLength = MAX_VALUE_NAME;
00117                             if(RegEnumValue(hSubKey, SubIndex, szSubValueName, &dwValueLength, NULL, NULL, (LPBYTE)Data, &dwDataLength) == ERROR_SUCCESS)
00118                             {
00119                                 item.iSubItem = -1;
00120                                 if (!_tcscmp(szSubValueName, _T("command")))
00121                                     item.iSubItem = 1;
00122                                 else if (!_tcscmp(szSubValueName, _T("key")) || !_tcscmp(szSubValueName, _T("location")))
00123                                     item.iSubItem = 2;
00124                                 else if (!_tcscmp(szSubValueName, _T("item")))
00125                                     item.iSubItem = 0;
00126                                 if (item.iSubItem != -1)
00127                                 {
00128                                     GetLongPathName(Data, Data, (DWORD) _tcsclen(Data));
00129                                     item.pszText = Data;
00130                                     SendMessage(hStartupListCtrl, LVM_SETITEMTEXT, item.iItem, (LPARAM) &item);
00131                                 }
00132                             }
00133                         }
00134                     }
00135                 }
00136                 RegCloseKey(hSubKey);
00137                 HeapFree(GetProcessHeap(), 0, Data);
00138             }
00139         }
00140     RegCloseKey(hKey);
00141     }
00142 }
00143 
00144 void
00145 GetAutostartEntriesFromRegistry ( HKEY hRootKey, TCHAR* KeyName )
00146 {
00147     HKEY hKey;
00148     DWORD Index, dwValues, retVal, dwType;
00149     DWORD dwValueLength, dwDataLength = MAX_VALUE_NAME;
00150     TCHAR* Data;
00151     TCHAR lpValueName[MAX_KEY_LENGTH];
00152     TCHAR Path[MAX_KEY_LENGTH + 5];
00153     LV_ITEM item;
00154 
00155     if (RegOpenKeyEx(hRootKey, KeyName, 0, KEY_READ, &hKey) == ERROR_SUCCESS)
00156     {
00157         if (RegQueryInfoKey(hKey, NULL, NULL, NULL, NULL, NULL, NULL, &dwValues, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
00158         {
00159             for (Index = 0, retVal = ERROR_SUCCESS; Index < dwValues; Index++)
00160             {
00161                 dwValueLength = MAX_KEY_LENGTH;
00162                 dwDataLength = MAX_VALUE_NAME;
00163                 Data = (TCHAR*) HeapAlloc(GetProcessHeap(), 0, MAX_VALUE_NAME * sizeof(TCHAR));
00164                 if (Data == NULL)
00165                     break;
00166                 retVal = RegEnumValue(hKey, Index, lpValueName, &dwValueLength, NULL, &dwType, (LPBYTE)Data, &dwDataLength);
00167                 if (retVal == ERROR_SUCCESS)
00168                 {
00169                     memset(&item, 0, sizeof(LV_ITEM));
00170                     item.mask = LVIF_TEXT;
00171                     item.iImage = 0;
00172                     item.pszText = lpValueName;
00173                     item.iItem = ListView_GetItemCount(hStartupListCtrl);
00174                     item.lParam = 0;
00175                     (void)ListView_InsertItem(hStartupListCtrl, &item);
00176                     ListView_SetCheckState(hStartupListCtrl, item.iItem, TRUE);
00177 
00178                     if ((dwType == REG_SZ) || (dwType == REG_EXPAND_SZ))
00179                     {
00180                         GetLongPathName(Data, Data, (DWORD) _tcsclen(Data));
00181                         item.pszText = Data;
00182                         item.iSubItem = 1;
00183                         SendMessage(hStartupListCtrl, LVM_SETITEMTEXT, item.iItem, (LPARAM) &item);
00184                     }
00185 
00186                     switch (PtrToLong(hRootKey))
00187                     {
00188                     case (ULONG_PTR)HKEY_LOCAL_MACHINE:
00189                         _tcscpy(Path, _T("HKLM\\\0"));
00190                         break;
00191                     case (ULONG_PTR)HKEY_CURRENT_USER:
00192                         _tcscpy(Path, _T("HKCU\\\0"));
00193                         break;
00194                     default:
00195                         _tcscpy(Path, _T("\0"));
00196                     }
00197 
00198                     _tcscat(Path, KeyName);
00199                     item.pszText = Path;
00200                     item.iSubItem = 2;
00201                     SendMessage(hStartupListCtrl, LVM_SETITEMTEXT, item.iItem, (LPARAM) &item);
00202                     HeapFree(GetProcessHeap(), 0, Data);
00203                 }
00204             }
00205         }
00206         RegCloseKey(hKey);
00207     }
00208 
00209 }

Generated on Sat May 26 2012 04:15:51 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.