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