ReactOS 0.4.16-dev-1541-g7e1d9ef
startuppage.c
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Applications
3 * LICENSE: LGPL - See COPYING in the top level directory
4 * FILE: base/applications/msconfig/startuppage.c
5 * PURPOSE: Startup page message handler
6 * COPYRIGHT: Copyright 2005-2006 Christoph von Wittich <Christoph@ApiViewer.de>
7 *
8 */
9
10#include "precomp.h"
11
15
18
21{
23 TCHAR szTemp[256];
24 DWORD dwStyle;
25
28
29 switch (message) {
30 case WM_INITDIALOG:
31
33 hStartupDialog = hDlg;
34
36 dwStyle = dwStyle | LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES;
38
40
41 // Initialize the application page's controls
43
45 column.pszText = szTemp;
46 column.cx = 150;
48
51 column.pszText = szTemp;
52 column.cx = 150;
54
57 column.pszText = szTemp;
58 column.cx = 250;
60
61 GetAutostartEntriesFromRegistry(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"));
62 GetAutostartEntriesFromRegistry(HKEY_CURRENT_USER, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"));
63 GetDisabledAutostartEntriesFromRegistry (_T("SOFTWARE\\Microsoft\\Shared Tools\\MSConfig\\startupreg"));
64 GetDisabledAutostartEntriesFromRegistry (_T("SOFTWARE\\Microsoft\\Shared Tools\\MSConfig\\startupfolder"));
65
66 //FIXME: What about HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
67 //FIXME: Common Startup (startmenu)
68 DisableAllExcept(hDlg, IDC_STARTUP_LIST); // FIXME: Implement saving
69 return TRUE;
70
71 case WM_NOTIFY:
73 {
74 NMLISTVIEW *pnmlv = (NMLISTVIEW*)lParam;
75 UINT toggled = (pnmlv->uOldState ^ pnmlv->uNewState) & LVIS_STATEIMAGEMASK;
76 if (pnmlv->hdr.code == LVN_ITEMCHANGING && (pnmlv->uChanged & LVIF_STATE) && toggled)
77 {
78 // Only allow checkbox changes during WM_INITDIALOG
80 {
81 MessageBeep(-1);
83 return TRUE;
84 }
85 }
86 }
87 break;
88 }
89
90 return 0;
91}
92
93
94 void
96{
97 HKEY hKey, hSubKey;
98 DWORD Index, SubIndex, dwValues, dwSubValues;
99 DWORD dwValueLength, dwDataLength = MAX_VALUE_NAME;
101 TCHAR* Data;
102 TCHAR szValueName[MAX_KEY_LENGTH];
103 TCHAR szSubValueName[MAX_KEY_LENGTH];
104 TCHAR szSubPath[MAX_KEY_LENGTH];
105
107 {
109 {
110 for (Index = 0; Index < dwValues; Index++)
111 {
112 dwValueLength = MAX_KEY_LENGTH;
113 dwDataLength = MAX_VALUE_NAME;
115 if (Data == NULL)
116 break;
117
118 if(RegEnumKeyEx(hKey, Index, szValueName, &dwValueLength, NULL, NULL, NULL, NULL) != ERROR_SUCCESS)
119 {
121 continue;
122 }
123 _stprintf(szSubPath, _T("%s\\%s"), szBasePath, szValueName);
124 memset(&item, 0, sizeof(LV_ITEM));
125 item.mask = LVIF_TEXT;
126 item.iImage = 0;
127 item.pszText = szValueName;
129 item.lParam = 0;
132 {
133 if (RegQueryInfoKey(hSubKey, NULL, NULL, NULL, NULL, NULL, NULL, &dwSubValues, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
134 {
135 for(SubIndex = 0; SubIndex < dwSubValues; SubIndex++)
136 {
137 dwValueLength = MAX_KEY_LENGTH;
138 dwDataLength = MAX_VALUE_NAME;
139 if(RegEnumValue(hSubKey, SubIndex, szSubValueName, &dwValueLength, NULL, NULL, (LPBYTE)Data, &dwDataLength) == ERROR_SUCCESS)
140 {
141 item.iSubItem = -1;
142 if (!_tcscmp(szSubValueName, _T("command")))
143 item.iSubItem = 1;
144 else if (!_tcscmp(szSubValueName, _T("key")) || !_tcscmp(szSubValueName, _T("location")))
145 item.iSubItem = 2;
146 else if (!_tcscmp(szSubValueName, _T("item")))
147 item.iSubItem = 0;
148 if (item.iSubItem != -1)
149 {
150 GetLongPathName(Data, Data, (DWORD) _tcsclen(Data));
151 item.pszText = Data;
153 }
154 }
155 }
156 }
157 }
158 RegCloseKey(hSubKey);
160 }
161 }
163 }
164}
165
166void
168{
169 HKEY hKey;
170 DWORD Index, dwValues, retVal, dwType;
171 DWORD dwValueLength, dwDataLength = MAX_VALUE_NAME;
172 TCHAR* Data;
173 TCHAR lpValueName[MAX_KEY_LENGTH];
176
177 if (RegOpenKeyEx(hRootKey, KeyName, 0, KEY_READ, &hKey) == ERROR_SUCCESS)
178 {
180 {
181 for (Index = 0, retVal = ERROR_SUCCESS; Index < dwValues; Index++)
182 {
183 dwValueLength = MAX_KEY_LENGTH;
184 dwDataLength = MAX_VALUE_NAME;
186 if (Data == NULL)
187 break;
188 retVal = RegEnumValue(hKey, Index, lpValueName, &dwValueLength, NULL, &dwType, (LPBYTE)Data, &dwDataLength);
189 if (retVal == ERROR_SUCCESS)
190 {
191 memset(&item, 0, sizeof(LV_ITEM));
192 item.mask = LVIF_TEXT;
193 item.iImage = 0;
194 item.pszText = lpValueName;
196 item.lParam = 0;
199
200 if ((dwType == REG_SZ) || (dwType == REG_EXPAND_SZ))
201 {
202 GetLongPathName(Data, Data, (DWORD) _tcsclen(Data));
203 item.pszText = Data;
204 item.iSubItem = 1;
206 }
207
208 switch ((ULONG_PTR)hRootKey)
209 {
211 _tcscpy(Path, _T("HKLM\\\0"));
212 break;
214 _tcscpy(Path, _T("HKCU\\\0"));
215 break;
216 default:
217 _tcscpy(Path, _T("\0"));
218 }
219
221 item.pszText = Path;
222 item.iSubItem = 2;
224 }
226 }
227 }
229 }
230
231}
PRTL_UNICODE_STRING_BUFFER Path
#define MAX_VALUE_NAME
Definition: control.c:28
#define IDC_BTN_STARTUP_ACTIVATE
Definition: resource.h:22
#define IDS_STARTUP_COLUMN_PATH
Definition: resource.h:87
#define IDS_STARTUP_COLUMN_CMD
Definition: resource.h:86
#define IDS_STARTUP_COLUMN_ELEMENT
Definition: resource.h:85
#define IDC_STARTUP_LIST
Definition: resource.h:19
#define RegCloseKey(hKey)
Definition: registry.h:49
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
#define CALLBACK
Definition: compat.h:35
HINSTANCE hInst
Definition: dxdiag.c:13
#define MAX_KEY_LENGTH
unsigned long DWORD
Definition: ntddk_ex.h:95
FxAutoRegKey hKey
#define _tcscmp
Definition: tchar.h:1424
#define _tcscat
Definition: tchar.h:622
#define _tcscpy
Definition: tchar.h:623
#define _tcsclen
Definition: tchar.h:1447
#define REG_SZ
Definition: layer.c:22
if(dx< 0)
Definition: linetemp.h:194
#define _stprintf
Definition: utility.h:124
VOID DisableAllExcept(HWND hTabDlg, UINT idExcept)
Definition: msconfig.c:84
HWND hStartupListCtrl
Definition: startuppage.c:13
HWND hStartupPage
Definition: startuppage.c:12
INT_PTR CALLBACK StartupPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
Definition: startuppage.c:20
void GetDisabledAutostartEntriesFromRegistry(TCHAR *szBasePath)
Definition: startuppage.c:95
HWND hStartupDialog
Definition: startuppage.c:14
void GetAutostartEntriesFromRegistry(HKEY hRootKey, TCHAR *KeyName)
Definition: startuppage.c:167
unsigned int UINT
Definition: ndis.h:50
#define KEY_READ
Definition: nt_native.h:1023
#define KEY_ENUMERATE_SUB_KEYS
Definition: nt_native.h:1019
#define DWORD
Definition: nt_native.h:44
#define REG_EXPAND_SZ
Definition: nt_native.h:1494
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:329
#define LVM_SETITEMTEXT
Definition: commctrl.h:2694
#define ListView_InsertItem(hwnd, pitem)
Definition: commctrl.h:2413
#define ListView_InsertColumn(hwnd, iCol, pcol)
Definition: commctrl.h:2641
#define ListView_SetCheckState(hwndLV, i, fCheck)
Definition: commctrl.h:2679
#define LVIF_STATE
Definition: commctrl.h:2317
#define LVCF_WIDTH
Definition: commctrl.h:2592
#define LVN_ITEMCHANGING
Definition: commctrl.h:3135
#define LVS_EX_CHECKBOXES
Definition: commctrl.h:2736
#define LVS_EX_FULLROWSELECT
Definition: commctrl.h:2739
#define ListView_GetItemCount(hwnd)
Definition: commctrl.h:2312
#define LV_ITEM
Definition: commctrl.h:2342
#define LVIF_TEXT
Definition: commctrl.h:2314
#define LVM_GETEXTENDEDLISTVIEWSTYLE
Definition: commctrl.h:2732
#define LVCF_TEXT
Definition: commctrl.h:2593
#define LVIS_STATEIMAGEMASK
Definition: commctrl.h:2331
#define LVM_SETEXTENDEDLISTVIEWSTYLE
Definition: commctrl.h:2729
#define LV_COLUMN
Definition: commctrl.h:2552
#define WM_NOTIFY
Definition: richedit.h:61
#define memset(x, y, z)
Definition: compat.h:39
Definition: tftpd.h:60
UINT code
Definition: winuser.h:3261
UINT uNewState
Definition: commctrl.h:3041
UINT uOldState
Definition: commctrl.h:3042
#define SetWindowLongPtr
Definition: treelist.c:70
int32_t INT_PTR
Definition: typedefs.h:64
unsigned char * LPBYTE
Definition: typedefs.h:53
uint32_t ULONG_PTR
Definition: typedefs.h:65
#define _T(x)
Definition: vfdio.h:22
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ WDFDEVICE _In_ PCUNICODE_STRING KeyName
Definition: wdfdevice.h:2699
LONG_PTR LPARAM
Definition: windef.h:208
UINT_PTR WPARAM
Definition: windef.h:207
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define HKEY_CURRENT_USER
Definition: winreg.h:11
#define RegOpenKeyEx
Definition: winreg.h:520
#define RegEnumValue
Definition: winreg.h:511
#define RegEnumKeyEx
Definition: winreg.h:510
#define RegQueryInfoKey
Definition: winreg.h:521
#define SWP_NOACTIVATE
Definition: winuser.h:1253
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define SWP_NOSIZE
Definition: winuser.h:1256
#define WM_INITDIALOG
Definition: winuser.h:1767
BOOL WINAPI MessageBeep(_In_ UINT uType)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
#define SendMessage
Definition: winuser.h:5954
BOOL WINAPI IsWindowEnabled(_In_ HWND)
#define LoadString
Definition: winuser.h:5930
#define DWLP_MSGRESULT
Definition: winuser.h:881
#define SWP_NOOWNERZORDER
Definition: winuser.h:1260
#define SWP_NOZORDER
Definition: winuser.h:1258
char TCHAR
Definition: xmlstorage.h:189