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