mirror of
https://github.com/reactos/reactos.git
synced 2025-02-23 08:55:19 +00:00
- Implement delete of the program information from the registry
- Store settings information in HKEY_LOCAL_MACHINE instead HKEY_CURRENT_USER svn path=/trunk/; revision=43260
This commit is contained in:
parent
68180a507a
commit
aa4379b267
14 changed files with 160 additions and 25 deletions
|
@ -136,17 +136,17 @@ BOOL
|
|||
ShowInstalledAppInfo(INT Index)
|
||||
{
|
||||
WCHAR szText[MAX_PATH], szInfo[MAX_PATH];
|
||||
HKEY hKey = (HKEY) ListViewGetlParam(Index);
|
||||
PINSTALLED_INFO Info = ListViewGetlParam(Index);
|
||||
|
||||
if (!hKey) return FALSE;
|
||||
if (!Info || !Info->hSubKey) return FALSE;
|
||||
|
||||
GetApplicationString(hKey, L"DisplayName", szText);
|
||||
GetApplicationString(Info->hSubKey, L"DisplayName", szText);
|
||||
NewRichEditText(szText, CFE_BOLD);
|
||||
|
||||
InsertRichEditText(L"\n", 0);
|
||||
|
||||
#define GET_INFO(a, b, c, d) \
|
||||
if (GetApplicationString(hKey, a, szInfo)) \
|
||||
if (GetApplicationString(Info->hSubKey, a, szInfo)) \
|
||||
{ \
|
||||
LoadStringW(hInst, b, szText, sizeof(szText) / sizeof(WCHAR)); \
|
||||
InsertRichEditText(szText, c); \
|
||||
|
@ -175,32 +175,70 @@ ShowInstalledAppInfo(INT Index)
|
|||
}
|
||||
|
||||
|
||||
VOID
|
||||
RemoveAppFromRegistry(INT Index)
|
||||
{
|
||||
PINSTALLED_INFO Info;
|
||||
WCHAR szFullName[MAX_PATH] = L"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\";
|
||||
WCHAR szMsgText[MAX_STR_LEN], szMsgTitle[MAX_STR_LEN];
|
||||
INT ItemIndex = SendMessage(hListView, LVM_GETNEXTITEM, -1, LVNI_FOCUSED);
|
||||
|
||||
if (!IS_INSTALLED_ENUM(SelectedEnumType))
|
||||
return;
|
||||
|
||||
Info = ListViewGetlParam(Index);
|
||||
if (!Info || !Info->hSubKey || (ItemIndex == -1)) return;
|
||||
|
||||
if (!LoadStringW(hInst, IDS_APP_REG_REMOVE, szMsgText, sizeof(szMsgText) / sizeof(WCHAR)) ||
|
||||
!LoadStringW(hInst, IDS_INFORMATION, szMsgTitle, sizeof(szMsgTitle) / sizeof(WCHAR)))
|
||||
return;
|
||||
|
||||
if (MessageBoxW(hMainWnd, szMsgText, szMsgTitle, MB_YESNO | MB_ICONQUESTION) == IDYES)
|
||||
{
|
||||
wcsncat(szFullName, Info->szKeyName, MAX_PATH - wcslen(szFullName));
|
||||
|
||||
if (RegDeleteKeyW(Info->hRootKey, szFullName) == ERROR_SUCCESS)
|
||||
{
|
||||
(VOID) ListView_DeleteItem(hListView, ItemIndex);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!LoadStringW(hInst, IDS_UNABLE_TO_REMOVE, szMsgText, sizeof(szMsgText) / sizeof(WCHAR)))
|
||||
return;
|
||||
|
||||
MessageBoxW(hMainWnd, szMsgText, NULL, MB_OK | MB_ICONERROR);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
BOOL
|
||||
EnumInstalledApplications(INT EnumType, BOOL IsUserKey, APPENUMPROC lpEnumProc)
|
||||
{
|
||||
DWORD dwSize = MAX_PATH, dwType, dwValue;
|
||||
BOOL bIsSystemComponent, bIsUpdate;
|
||||
WCHAR pszName[MAX_PATH];
|
||||
WCHAR pszParentKeyName[MAX_PATH];
|
||||
WCHAR pszDisplayName[MAX_PATH];
|
||||
HKEY hKey, hSubKey;
|
||||
INSTALLED_INFO Info;
|
||||
HKEY hKey;
|
||||
LONG ItemIndex = 0;
|
||||
|
||||
if (RegOpenKeyW(IsUserKey ? HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE,
|
||||
Info.hRootKey = IsUserKey ? HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE;
|
||||
|
||||
if (RegOpenKeyW(Info.hRootKey,
|
||||
L"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall",
|
||||
&hKey) != ERROR_SUCCESS)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
while (RegEnumKeyExW(hKey, ItemIndex, pszName, &dwSize, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
|
||||
while (RegEnumKeyExW(hKey, ItemIndex, Info.szKeyName, &dwSize, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
|
||||
{
|
||||
if (RegOpenKeyW(hKey, pszName, &hSubKey) == ERROR_SUCCESS)
|
||||
if (RegOpenKeyW(hKey, Info.szKeyName, &Info.hSubKey) == ERROR_SUCCESS)
|
||||
{
|
||||
dwType = REG_DWORD;
|
||||
dwSize = sizeof(DWORD);
|
||||
|
||||
if (RegQueryValueExW(hSubKey,
|
||||
if (RegQueryValueExW(Info.hSubKey,
|
||||
L"SystemComponent",
|
||||
NULL,
|
||||
&dwType,
|
||||
|
@ -216,7 +254,7 @@ EnumInstalledApplications(INT EnumType, BOOL IsUserKey, APPENUMPROC lpEnumProc)
|
|||
|
||||
dwType = REG_SZ;
|
||||
dwSize = MAX_PATH;
|
||||
bIsUpdate = (RegQueryValueExW(hSubKey,
|
||||
bIsUpdate = (RegQueryValueExW(Info.hSubKey,
|
||||
L"ParentKeyName",
|
||||
NULL,
|
||||
&dwType,
|
||||
|
@ -224,7 +262,7 @@ EnumInstalledApplications(INT EnumType, BOOL IsUserKey, APPENUMPROC lpEnumProc)
|
|||
&dwSize) == ERROR_SUCCESS);
|
||||
|
||||
dwSize = MAX_PATH;
|
||||
if (RegQueryValueExW(hSubKey,
|
||||
if (RegQueryValueExW(Info.hSubKey,
|
||||
L"DisplayName",
|
||||
NULL,
|
||||
&dwType,
|
||||
|
@ -240,7 +278,7 @@ EnumInstalledApplications(INT EnumType, BOOL IsUserKey, APPENUMPROC lpEnumProc)
|
|||
((EnumType == ENUM_APPLICATIONS) && (!bIsUpdate)) || /* Applications only */
|
||||
((EnumType == ENUM_UPDATES) && (bIsUpdate))) /* Updates only */
|
||||
{
|
||||
if (!lpEnumProc(ItemIndex, pszDisplayName, pszName, (LPARAM)hSubKey))
|
||||
if (!lpEnumProc(ItemIndex, pszDisplayName, Info))
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,6 +14,8 @@ BEGIN
|
|||
MENUITEM "&Ìàõàíå",ID_UNINSTALL
|
||||
MENUITEM "&Ïðîìÿíà", ID_MODIFY
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Remove from Registry", ID_REGREMOVE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Î&ïðåñíÿâàíå", ID_REFRESH
|
||||
END
|
||||
POPUP "Ïîìîù"
|
||||
|
@ -40,6 +42,8 @@ BEGIN
|
|||
MENUITEM "&Ìàõàíå", ID_UNINSTALL
|
||||
MENUITEM "&Ïðîìÿíà", ID_MODIFY
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Remove from Registry", ID_REGREMOVE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Î&ïðåñíÿâàíå", ID_REFRESH
|
||||
END
|
||||
END
|
||||
|
@ -183,4 +187,7 @@ BEGIN
|
|||
IDS_CHOOSE_FOLDER_TEXT "Choose a folder which will be used for downloading of programs:"
|
||||
IDS_CHOOSE_FOLDER_ERROR "You have specified a nonexistent folder!"
|
||||
IDS_USER_NOT_ADMIN "You should be administrator for start ""ReactOS Applications Manager""!"
|
||||
IDS_APP_REG_REMOVE "Are you sure you want to delete the data on the installed program from the registry?"
|
||||
IDS_INFORMATION "Information"
|
||||
IDS_UNABLE_TO_REMOVE "Unable to remove data on the program from the registry!"
|
||||
END
|
||||
|
|
|
@ -14,6 +14,8 @@ BEGIN
|
|||
MENUITEM "&Deinstallieren",ID_UNINSTALL
|
||||
MENUITEM "&Ändern", ID_MODIFY
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Remove from Registry", ID_REGREMOVE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Aktualisieren", ID_REFRESH
|
||||
END
|
||||
POPUP "Hilfe"
|
||||
|
@ -40,6 +42,8 @@ BEGIN
|
|||
MENUITEM "&Deinstallieren", ID_UNINSTALL
|
||||
MENUITEM "&Ändern", ID_MODIFY
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Remove from Registry", ID_REGREMOVE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Aktualisieren", ID_REFRESH
|
||||
END
|
||||
END
|
||||
|
@ -183,4 +187,7 @@ BEGIN
|
|||
IDS_CHOOSE_FOLDER_TEXT "Choose a folder which will be used for downloading of programs:"
|
||||
IDS_CHOOSE_FOLDER_ERROR "You have specified a nonexistent folder!"
|
||||
IDS_USER_NOT_ADMIN "You should be administrator for start ""ReactOS Applications Manager""!"
|
||||
IDS_APP_REG_REMOVE "Are you sure you want to delete the data on the installed program from the registry?"
|
||||
IDS_INFORMATION "Information"
|
||||
IDS_UNABLE_TO_REMOVE "Unable to remove data on the program from the registry!"
|
||||
END
|
||||
|
|
|
@ -14,6 +14,8 @@ BEGIN
|
|||
MENUITEM "&Uninstall",ID_UNINSTALL
|
||||
MENUITEM "&Modify", ID_MODIFY
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Remove from Registry", ID_REGREMOVE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Refresh", ID_REFRESH
|
||||
END
|
||||
POPUP "Help"
|
||||
|
@ -40,6 +42,8 @@ BEGIN
|
|||
MENUITEM "&Uninstall", ID_UNINSTALL
|
||||
MENUITEM "&Modify", ID_MODIFY
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Remove from Registry", ID_REGREMOVE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Refresh", ID_REFRESH
|
||||
END
|
||||
END
|
||||
|
@ -183,4 +187,7 @@ BEGIN
|
|||
IDS_CHOOSE_FOLDER_TEXT "Choose a folder which will be used for downloading of programs:"
|
||||
IDS_CHOOSE_FOLDER_ERROR "You have specified a nonexistent folder!"
|
||||
IDS_USER_NOT_ADMIN "You should be administrator for start ""ReactOS Applications Manager""!"
|
||||
IDS_APP_REG_REMOVE "Are you sure you want to delete the data on the installed program from the registry?"
|
||||
IDS_INFORMATION "Information"
|
||||
IDS_UNABLE_TO_REMOVE "Unable to remove data on the program from the registry!"
|
||||
END
|
||||
|
|
|
@ -14,6 +14,8 @@ BEGIN
|
|||
MENUITEM "&Desinstalar",ID_UNINSTALL
|
||||
MENUITEM "&Modificar", ID_MODIFY
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Remove from Registry", ID_REGREMOVE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Refrescar", ID_REFRESH
|
||||
END
|
||||
POPUP "Ayuda"
|
||||
|
@ -40,6 +42,8 @@ BEGIN
|
|||
MENUITEM "&Desinstalar", ID_UNINSTALL
|
||||
MENUITEM "&Modificar", ID_MODIFY
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Remove from Registry", ID_REGREMOVE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Refrescar", ID_REFRESH
|
||||
END
|
||||
END
|
||||
|
@ -183,4 +187,7 @@ BEGIN
|
|||
IDS_CHOOSE_FOLDER_TEXT "Choose a folder which will be used for downloading of programs:"
|
||||
IDS_CHOOSE_FOLDER_ERROR "You have specified a nonexistent folder!"
|
||||
IDS_USER_NOT_ADMIN "You should be administrator for start ""ReactOS Applications Manager""!"
|
||||
IDS_APP_REG_REMOVE "Are you sure you want to delete the data on the installed program from the registry?"
|
||||
IDS_INFORMATION "Information"
|
||||
IDS_UNABLE_TO_REMOVE "Unable to remove data on the program from the registry!"
|
||||
END
|
||||
|
|
|
@ -14,6 +14,8 @@ BEGIN
|
|||
MENUITEM "アンインストール(&U)",ID_UNINSTALL
|
||||
MENUITEM "変更(&M)", ID_MODIFY
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Remove from Registry", ID_REGREMOVE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "更新(&R)", ID_REFRESH
|
||||
END
|
||||
POPUP "ヘルプ"
|
||||
|
@ -40,6 +42,8 @@ BEGIN
|
|||
MENUITEM "アンインストール(&U)", ID_UNINSTALL
|
||||
MENUITEM "変更(&M)", ID_MODIFY
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Remove from Registry", ID_REGREMOVE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "更新(&R)", ID_REFRESH
|
||||
END
|
||||
END
|
||||
|
@ -183,4 +187,7 @@ BEGIN
|
|||
IDS_CHOOSE_FOLDER_TEXT "プログラムのダウンロードに使用するフォルダを選択してください:"
|
||||
IDS_CHOOSE_FOLDER_ERROR "指定されたフォルダは存在しません!"
|
||||
IDS_USER_NOT_ADMIN """ReactOS アプリケーション マネージャー"" を起動するには管理者権限である必要があります!"
|
||||
IDS_APP_REG_REMOVE "Are you sure you want to delete the data on the installed program from the registry?"
|
||||
IDS_INFORMATION "Information"
|
||||
IDS_UNABLE_TO_REMOVE "Unable to remove data on the program from the registry!"
|
||||
END
|
||||
|
|
|
@ -14,6 +14,8 @@ BEGIN
|
|||
MENUITEM "&Avinstallere",ID_UNINSTALL
|
||||
MENUITEM "&Endre", ID_MODIFY
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Remove from Registry", ID_REGREMOVE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Oppdatere", ID_REFRESH
|
||||
END
|
||||
POPUP "Hjelp"
|
||||
|
@ -40,6 +42,8 @@ BEGIN
|
|||
MENUITEM "&Avinstallere", ID_UNINSTALL
|
||||
MENUITEM "&Endre", ID_MODIFY
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Remove from Registry", ID_REGREMOVE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Oppdater", ID_REFRESH
|
||||
END
|
||||
END
|
||||
|
@ -183,4 +187,7 @@ BEGIN
|
|||
IDS_CHOOSE_FOLDER_TEXT "Choose a folder which will be used for downloading of programs:"
|
||||
IDS_CHOOSE_FOLDER_ERROR "You have specified a nonexistent folder!"
|
||||
IDS_USER_NOT_ADMIN "You should be administrator for start ""ReactOS Applications Manager""!"
|
||||
IDS_APP_REG_REMOVE "Are you sure you want to delete the data on the installed program from the registry?"
|
||||
IDS_INFORMATION "Information"
|
||||
IDS_UNABLE_TO_REMOVE "Unable to remove data on the program from the registry!"
|
||||
END
|
||||
|
|
|
@ -16,6 +16,8 @@ BEGIN
|
|||
MENUITEM "&Odinstaluj",ID_UNINSTALL
|
||||
MENUITEM "&Modyfikuj", ID_MODIFY
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Remove from Registry", ID_REGREMOVE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "O&dœwie¿", ID_REFRESH
|
||||
END
|
||||
POPUP "Pomoc"
|
||||
|
@ -42,6 +44,8 @@ BEGIN
|
|||
MENUITEM "&odinstaluj", ID_UNINSTALL
|
||||
MENUITEM "&Modyfikuj", ID_MODIFY
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Remove from Registry", ID_REGREMOVE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Odœwie¿", ID_REFRESH
|
||||
END
|
||||
END
|
||||
|
@ -185,4 +189,7 @@ BEGIN
|
|||
IDS_CHOOSE_FOLDER_TEXT "Choose a folder which will be used for downloading of programs:"
|
||||
IDS_CHOOSE_FOLDER_ERROR "You have specified a nonexistent folder!"
|
||||
IDS_USER_NOT_ADMIN "You should be administrator for start ""ReactOS Applications Manager""!"
|
||||
IDS_APP_REG_REMOVE "Are you sure you want to delete the data on the installed program from the registry?"
|
||||
IDS_INFORMATION "Information"
|
||||
IDS_UNABLE_TO_REMOVE "Unable to remove data on the program from the registry!"
|
||||
END
|
||||
|
|
|
@ -10,10 +10,12 @@ BEGIN
|
|||
END
|
||||
POPUP "&Программы"
|
||||
BEGIN
|
||||
MENUITEM "&Óñòàíîâèòü", ID_INSTALL
|
||||
MENUITEM "У&становить", ID_INSTALL
|
||||
MENUITEM "&Удалить", ID_UNINSTALL
|
||||
MENUITEM "&Изменить", ID_MODIFY
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "У&далить из реестра", ID_REGREMOVE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Обновить", ID_REFRESH
|
||||
END
|
||||
POPUP "Справка"
|
||||
|
@ -40,6 +42,8 @@ BEGIN
|
|||
MENUITEM "&Удалить", ID_UNINSTALL
|
||||
MENUITEM "&Изменить", ID_MODIFY
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "У&далить из реестра", ID_REGREMOVE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Обновить", ID_REFRESH
|
||||
END
|
||||
END
|
||||
|
@ -183,4 +187,7 @@ BEGIN
|
|||
IDS_CHOOSE_FOLDER_TEXT "Выберите папку, которая будет использоваться для загрузки программ:"
|
||||
IDS_CHOOSE_FOLDER_ERROR "Вы указали несуществующую папку!"
|
||||
IDS_USER_NOT_ADMIN "Вы должны быть администратором для запуска ""Менеджера приложений ReactOS""!"
|
||||
IDS_APP_REG_REMOVE "Вы действительно хотите удалить данные об установленной программе из реестра?"
|
||||
IDS_INFORMATION "Информация"
|
||||
IDS_UNABLE_TO_REMOVE "Не удалось удалить данные о программе из реестра!"
|
||||
END
|
||||
|
|
|
@ -19,6 +19,8 @@ BEGIN
|
|||
MENUITEM "O&dinštalova<76>", ID_UNINSTALL
|
||||
MENUITEM "&Zmeni<6E>", ID_MODIFY
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Remove from Registry", ID_REGREMOVE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Obnovi<76>", ID_REFRESH
|
||||
END
|
||||
POPUP "Pomocník"
|
||||
|
@ -45,6 +47,8 @@ BEGIN
|
|||
MENUITEM "O&dinštalova<76>", ID_UNINSTALL
|
||||
MENUITEM "&Zmeni<6E>", ID_MODIFY
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Remove from Registry", ID_REGREMOVE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Obnovi<76>", ID_REFRESH
|
||||
END
|
||||
END
|
||||
|
@ -188,4 +192,7 @@ BEGIN
|
|||
IDS_CHOOSE_FOLDER_TEXT "Vyberte prieèinok, ktorý sa použije pre s<>ahovanie programov:"
|
||||
IDS_CHOOSE_FOLDER_ERROR "Zvolili ste si neexistujúci prieèinok!"
|
||||
IDS_USER_NOT_ADMIN "Mali by ste by<62> administrátor pre spustenie ""Manažéra aplikácií systému ReactOS""!"
|
||||
IDS_APP_REG_REMOVE "Are you sure you want to delete the data on the installed program from the registry?"
|
||||
IDS_INFORMATION "Information"
|
||||
IDS_UNABLE_TO_REMOVE "Unable to remove data on the program from the registry!"
|
||||
END
|
||||
|
|
|
@ -22,6 +22,8 @@ BEGIN
|
|||
MENUITEM "&Âèäàëèòè",ID_UNINSTALL
|
||||
MENUITEM "&Çì³íèòè", ID_MODIFY
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Remove from Registry", ID_REGREMOVE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Îíîâèòè", ID_REFRESH
|
||||
END
|
||||
POPUP "Äîâ³äêà"
|
||||
|
@ -48,6 +50,8 @@ BEGIN
|
|||
MENUITEM "&Âèäàëèòè", ID_UNINSTALL
|
||||
MENUITEM "&Çì³íèòè", ID_MODIFY
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Remove from Registry", ID_REGREMOVE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Îíîâèòè", ID_REFRESH
|
||||
END
|
||||
END
|
||||
|
@ -191,4 +195,7 @@ BEGIN
|
|||
IDS_CHOOSE_FOLDER_TEXT "Choose a folder which will be used for downloading of programs:"
|
||||
IDS_CHOOSE_FOLDER_ERROR "You have specified a nonexistent folder!"
|
||||
IDS_USER_NOT_ADMIN "You should be administrator for start ""ReactOS Applications Manager""!"
|
||||
IDS_APP_REG_REMOVE "Are you sure you want to delete the data on the installed program from the registry?"
|
||||
IDS_INFORMATION "Information"
|
||||
IDS_UNABLE_TO_REMOVE "Unable to remove data on the program from the registry!"
|
||||
END
|
||||
|
|
|
@ -69,6 +69,14 @@ typedef struct
|
|||
|
||||
} APPLICATION_INFO, *PAPPLICATION_INFO;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
HKEY hRootKey;
|
||||
HKEY hSubKey;
|
||||
WCHAR szKeyName[MAX_PATH];
|
||||
|
||||
} INSTALLED_INFO, *PINSTALLED_INFO;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
BOOL bSaveWndPos;
|
||||
|
@ -95,12 +103,13 @@ BOOL UpdateAppsDB(VOID);
|
|||
BOOL InstallApplication(INT Index);
|
||||
|
||||
/* installed.c */
|
||||
typedef BOOL (CALLBACK *APPENUMPROC)(INT ItemIndex, LPWSTR lpName, LPWSTR lpKeyName, LPARAM lParam);
|
||||
typedef BOOL (CALLBACK *APPENUMPROC)(INT ItemIndex, LPWSTR lpName, INSTALLED_INFO Info);
|
||||
BOOL EnumInstalledApplications(INT EnumType, BOOL IsUserKey, APPENUMPROC lpEnumProc);
|
||||
BOOL GetApplicationString(HKEY hKey, LPWSTR lpKeyName, LPWSTR lpString);
|
||||
BOOL ShowInstalledAppInfo(INT Index);
|
||||
BOOL UninstallApplication(INT Index, BOOL bModify);
|
||||
BOOL IsInstalledApplication(LPWSTR lpRegName, BOOL IsUserKey);
|
||||
VOID RemoveAppFromRegistry(INT Index);
|
||||
|
||||
/* winmain.c */
|
||||
extern HWND hMainWnd;
|
||||
|
|
|
@ -69,6 +69,7 @@
|
|||
#define ID_COPY_LINK 557
|
||||
#define ID_SETTINGS 558
|
||||
#define ID_REFRESH 559
|
||||
#define ID_REGREMOVE 560
|
||||
|
||||
/* Strings */
|
||||
#define IDS_APPTITLE 100
|
||||
|
@ -87,6 +88,9 @@
|
|||
#define IDS_CHOOSE_FOLDER_TEXT 113
|
||||
#define IDS_CHOOSE_FOLDER_ERROR 114
|
||||
#define IDS_USER_NOT_ADMIN 115
|
||||
#define IDS_APP_REG_REMOVE 116
|
||||
#define IDS_INFORMATION 117
|
||||
#define IDS_UNABLE_TO_REMOVE 118
|
||||
|
||||
/* Tooltips */
|
||||
#define IDS_TOOLTIP_INSTALL 200
|
||||
|
|
|
@ -15,6 +15,7 @@ HIMAGELIST hImageTreeView = NULL;
|
|||
INT SelectedEnumType = ENUM_ALL_COMPONENTS;
|
||||
SETTINGS_INFO SettingsInfo;
|
||||
|
||||
|
||||
VOID
|
||||
FillDafaultSettings(PSETTINGS_INFO pSettingsInfo)
|
||||
{
|
||||
|
@ -37,7 +38,7 @@ LoadSettings(VOID)
|
|||
HKEY hKey;
|
||||
DWORD dwSize;
|
||||
|
||||
if (RegOpenKeyExW(HKEY_CURRENT_USER, L"Software\\ReactOS\\rapps", 0, KEY_READ, &hKey) == ERROR_SUCCESS)
|
||||
if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"Software\\ReactOS\\rapps", 0, KEY_READ, &hKey) == ERROR_SUCCESS)
|
||||
{
|
||||
dwSize = sizeof(SETTINGS_INFO);
|
||||
if (RegQueryValueExW(hKey, L"Settings", NULL, NULL, (LPBYTE)&SettingsInfo, &dwSize) == ERROR_SUCCESS)
|
||||
|
@ -70,7 +71,7 @@ SaveSettings(HWND hwnd)
|
|||
SettingsInfo.Maximized = (IsZoomed(hwnd) || (wp.flags & WPF_RESTORETOMAXIMIZED));
|
||||
}
|
||||
|
||||
if (RegCreateKeyExW(HKEY_CURRENT_USER, L"Software\\ReactOS\\rapps", 0, NULL,
|
||||
if (RegCreateKeyExW(HKEY_LOCAL_MACHINE, L"Software\\ReactOS\\rapps", 0, NULL,
|
||||
REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL) == ERROR_SUCCESS)
|
||||
{
|
||||
RegSetValueEx(hKey, L"Settings", 0, REG_BINARY, (LPBYTE)&SettingsInfo, sizeof(SETTINGS_INFO));
|
||||
|
@ -82,31 +83,40 @@ VOID
|
|||
FreeInstalledAppList(VOID)
|
||||
{
|
||||
INT Count = ListView_GetItemCount(hListView) - 1;
|
||||
HKEY hKey;
|
||||
PINSTALLED_INFO Info;
|
||||
|
||||
while (Count >= 0)
|
||||
{
|
||||
hKey = ListViewGetlParam(Count);
|
||||
if (hKey)
|
||||
RegCloseKey(hKey);
|
||||
Info = ListViewGetlParam(Count);
|
||||
if (Info)
|
||||
{
|
||||
RegCloseKey(Info->hSubKey);
|
||||
HeapFree(GetProcessHeap(), 0, Info);
|
||||
}
|
||||
Count--;
|
||||
}
|
||||
}
|
||||
|
||||
BOOL
|
||||
CALLBACK
|
||||
EnumInstalledAppProc(INT ItemIndex, LPWSTR lpName, LPWSTR lpKeyName, LPARAM lParam)
|
||||
EnumInstalledAppProc(INT ItemIndex, LPWSTR lpName, INSTALLED_INFO Info)
|
||||
{
|
||||
PINSTALLED_INFO ItemInfo;
|
||||
WCHAR szText[MAX_PATH];
|
||||
INT Index;
|
||||
|
||||
Index = ListViewAddItem(ItemIndex, 0, lpName, lParam);
|
||||
ItemInfo = HeapAlloc(GetProcessHeap(), 0, sizeof(INSTALLED_INFO));
|
||||
if (!ItemInfo) return FALSE;
|
||||
|
||||
*ItemInfo = Info;
|
||||
|
||||
Index = ListViewAddItem(ItemIndex, 0, lpName, (LPARAM)ItemInfo);
|
||||
|
||||
/* Get version info */
|
||||
GetApplicationString((HKEY)lParam, L"DisplayVersion", szText);
|
||||
GetApplicationString((HKEY)ItemInfo->hSubKey, L"DisplayVersion", szText);
|
||||
ListView_SetItemText(hListView, Index, 1, szText);
|
||||
/* Get comments */
|
||||
GetApplicationString((HKEY)lParam, L"Comments", szText);
|
||||
GetApplicationString((HKEY)ItemInfo->hSubKey, L"Comments", szText);
|
||||
ListView_SetItemText(hListView, Index, 2, szText);
|
||||
|
||||
return TRUE;
|
||||
|
@ -399,6 +409,10 @@ MainWndOnCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
|
|||
UpdateApplicationsList(-1);
|
||||
break;
|
||||
|
||||
case ID_REGREMOVE:
|
||||
RemoveAppFromRegistry(-1);
|
||||
break;
|
||||
|
||||
case ID_REFRESH:
|
||||
UpdateApplicationsList(-1);
|
||||
break;
|
||||
|
|
Loading…
Reference in a new issue