[ros-diffs] [janderwald] 22688: * auto select items which are started automatically * read disabled autostart items

janderwald at svn.reactos.org janderwald at svn.reactos.org
Thu Jun 29 15:34:00 CEST 2006


Author: janderwald
Date: Thu Jun 29 17:33:59 2006
New Revision: 22688

URL: http://svn.reactos.org/svn/reactos?rev=22688&view=rev
Log:
* auto select items which are started automatically
* read disabled autostart items

Modified:
    trunk/reactos/base/applications/msconfig/precomp.h
    trunk/reactos/base/applications/msconfig/startuppage.c

Modified: trunk/reactos/base/applications/msconfig/precomp.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/msconfig/precomp.h?rev=22688&r1=22687&r2=22688&view=diff
==============================================================================
--- trunk/reactos/base/applications/msconfig/precomp.h (original)
+++ trunk/reactos/base/applications/msconfig/precomp.h Thu Jun 29 17:33:59 2006
@@ -3,6 +3,7 @@
 #include <commctrl.h>
 #include <winuser.h>
 #include <tchar.h>
+#include <stdio.h>
 
 #include "resource.h"
 #include "msconfig.h"

Modified: trunk/reactos/base/applications/msconfig/startuppage.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/msconfig/startuppage.c?rev=22688&r1=22687&r2=22688&view=diff
==============================================================================
--- trunk/reactos/base/applications/msconfig/startuppage.c (original)
+++ trunk/reactos/base/applications/msconfig/startuppage.c Thu Jun 29 17:33:59 2006
@@ -14,6 +14,7 @@
 HWND hStartupDialog;
 
 void GetAutostartEntriesFromRegistry ( HKEY hRootKey, TCHAR* KeyName );
+void GetDisabledAutostartEntriesFromRegistry ();
 
 INT_PTR CALLBACK
 StartupPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
@@ -59,6 +60,9 @@
 
         GetAutostartEntriesFromRegistry(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"));
         GetAutostartEntriesFromRegistry(HKEY_CURRENT_USER, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"));
+		GetDisabledAutostartEntriesFromRegistry (_T("SOFTWARE\\Microsoft\\Shared Tools\\MSConfig\\startupreg"));
+		GetDisabledAutostartEntriesFromRegistry (_T("SOFTWARE\\Microsoft\\Shared Tools\\MSConfig\\startupfolder"));
+
         //FIXME: What about HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
         //FIXME: Common Startup (startmenu)
 
@@ -66,6 +70,83 @@
     }
 
     return 0;
+}
+
+
+ void
+GetDisabledAutostartEntriesFromRegistry (TCHAR * szBasePath)
+{
+    HKEY hKey, hSubKey;
+    DWORD Index, SubIndex, dwValues, dwSubValues, retVal;
+    DWORD dwValueLength, dwDataLength = MAX_VALUE_NAME; 
+    LV_ITEM item;
+    TCHAR* Data;
+    TCHAR szValueName[MAX_KEY_LENGTH];
+    TCHAR szSubValueName[MAX_KEY_LENGTH];
+    TCHAR szSubPath[MAX_KEY_LENGTH];
+
+    if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, szBasePath, 0, KEY_READ | KEY_ENUMERATE_SUB_KEYS, &hKey) == ERROR_SUCCESS)
+    {
+        if (RegQueryInfoKey(hKey, NULL, NULL, NULL, &dwValues, NULL, NULL, NULL, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
+        {
+            for (Index = 0, retVal = ERROR_SUCCESS; Index < dwValues; Index++) 
+            {
+                dwValueLength = MAX_KEY_LENGTH;
+                dwDataLength = MAX_VALUE_NAME;
+                Data = (TCHAR*) HeapAlloc(GetProcessHeap(), 0, MAX_VALUE_NAME * sizeof(TCHAR));
+                if (Data == NULL)
+                    break;
+
+                retVal = RegEnumKeyEx(hKey, Index, szValueName, &dwValueLength, NULL, NULL, NULL, NULL);
+                _stprintf(szSubPath, _T("%s\\%s"), szBasePath, szValueName);
+                memset(&item, 0, sizeof(LV_ITEM));
+                item.mask = LVIF_TEXT;
+                item.iImage = 0;
+                item.pszText = szValueName;
+                item.iItem = ListView_GetItemCount(hStartupListCtrl);
+                item.lParam = 0;
+                (void)ListView_InsertItem(hStartupListCtrl, &item);                
+                if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, szSubPath, 0, KEY_READ | KEY_ENUMERATE_SUB_KEYS, &hSubKey) == ERROR_SUCCESS)
+                {
+                    if (RegQueryInfoKey(hSubKey, NULL, NULL, NULL, NULL, NULL, NULL, &dwSubValues, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
+                    {
+                        for(SubIndex = 0; SubIndex < dwSubValues; SubIndex++)
+                        {
+                            dwValueLength = MAX_KEY_LENGTH;
+                            dwDataLength = MAX_VALUE_NAME;
+                            if(RegEnumValue(hSubKey, SubIndex, szSubValueName, &dwValueLength, NULL, NULL, (LPBYTE)Data, &dwDataLength) == ERROR_SUCCESS)
+                            {
+                                if (!_tcscmp(szSubValueName, _T("command")))
+                                {
+                                    GetLongPathName(Data, Data, (DWORD) _tcsclen(Data));
+                                    item.pszText = Data;
+                                    item.iSubItem = 1;
+                                    SendMessage(hStartupListCtrl, LVM_SETITEMTEXT, item.iItem, (LPARAM) &item);	
+                                }
+                                else if (!_tcscmp(szSubValueName, _T("key")) || !_tcscmp(szSubValueName, _T("location")))
+                                {
+                                    GetLongPathName(Data, Data, (DWORD) _tcsclen(Data));
+                                    item.pszText = Data;
+                                    item.iSubItem = 2;
+                                    SendMessage(hStartupListCtrl, LVM_SETITEMTEXT, item.iItem, (LPARAM) &item);
+                                }
+                                else if (!_tcscmp(szSubValueName, _T("item")))
+                                {
+                                    GetLongPathName(Data, Data, (DWORD) _tcsclen(Data));
+                                    item.pszText = Data;
+                                    item.iSubItem = 0;
+                                    SendMessage(hStartupListCtrl, LVM_SETITEMTEXT, item.iItem, (LPARAM) &item);
+                                }
+                            }
+                        }
+                    }
+                }
+                RegCloseKey(hSubKey);
+                HeapFree(GetProcessHeap(), 0, Data);
+            }
+        }
+    RegCloseKey(hKey);
+    }
 }
 
 void
@@ -100,6 +181,7 @@
                     item.iItem = ListView_GetItemCount(hStartupListCtrl);
                     item.lParam = 0;
                     (void)ListView_InsertItem(hStartupListCtrl, &item);
+					ListView_SetCheckState(hStartupListCtrl, item.iItem, TRUE);
 
                     if (dwType == REG_SZ)
                     {




More information about the Ros-diffs mailing list