BOOL ShowAvailableAppInfo(INT Index) { PAPPLICATION_INFO Info = (PAPPLICATION_INFO) ListViewGetlParam(Index); WCHAR szText[MAX_STR_LEN]; if (!Info) return FALSE; NewRichEditText(Info->szName, CFE_BOLD); InsertRichEditText(L"\n", 0); #define ADD_TEXT(a, b, c, d) \ if (b[0] != '\0') \ { \ LoadStringW(hInst, a, szText, sizeof(szText) / sizeof(WCHAR)); \ InsertRichEditText(szText, c); \ InsertRichEditText(b, d); \ } \ ADD_TEXT(IDS_AINFO_VERSION, Info->szVersion, CFE_BOLD, 0); ADD_TEXT(IDS_AINFO_LICENCE, Info->szLicence, CFE_BOLD, 0); ADD_TEXT(IDS_AINFO_SIZE, Info->szSize, CFE_BOLD, 0); ADD_TEXT(IDS_AINFO_URLSITE, Info->szUrlSite, CFE_BOLD, CFE_LINK); ADD_TEXT(IDS_AINFO_DESCRIPTION, Info->szDesc, CFE_BOLD, 0); return TRUE; }
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 = (PINSTALLED_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); } }
VOID FreeAvailableAppList(VOID) { INT Count = ListView_GetItemCount(hListView) - 1; PVOID Info; while (Count >= 0) { Info = ListViewGetlParam(Count); if (Info) HeapFree(GetProcessHeap(), 0, Info); Count--; } }
VOID FreeInstalledAppList(VOID) { INT Count = ListView_GetItemCount(hListView) - 1; PINSTALLED_INFO Info; while (Count >= 0) { Info = (PINSTALLED_INFO) ListViewGetlParam(Count); if (Info) { RegCloseKey(Info->hSubKey); HeapFree(GetProcessHeap(), 0, Info); } Count--; } }
BOOL DownloadApplication(INT Index) { if (!IS_AVAILABLE_ENUM(SelectedEnumType)) return FALSE; AppInfo = (PAPPLICATION_INFO) ListViewGetlParam(Index); if (!AppInfo) return FALSE; WriteLogMessage(EVENTLOG_SUCCESS, MSG_SUCCESS_INSTALL, AppInfo->szName); DialogBoxW(hInst, MAKEINTRESOURCEW(IDD_DOWNLOAD_DIALOG), hMainWnd, DownloadDlgProc); return TRUE; }
BOOL ShowAvailableAppInfo(INT Index) { PAPPLICATION_INFO Info = (PAPPLICATION_INFO) ListViewGetlParam(Index); WCHAR szText[MAX_STR_LEN]; if (!Info) return FALSE; NewRichEditText(Info->szName, CFE_BOLD); InsertRichEditText(L"\n", 0); ADD_TEXT(IDS_AINFO_VERSION, Info->szVersion, CFE_BOLD, 0); ADD_TEXT(IDS_AINFO_LICENSE, Info->szLicense, CFE_BOLD, 0); ADD_TEXT(IDS_AINFO_SIZE, Info->szSize, CFE_BOLD, 0); ADD_TEXT(IDS_AINFO_URLSITE, Info->szUrlSite, CFE_BOLD, CFE_LINK); ADD_TEXT(IDS_AINFO_DESCRIPTION, Info->szDesc, CFE_BOLD, 0); return TRUE; }
BOOL ShowInstalledAppInfo(INT Index) { WCHAR szText[MAX_PATH], szInfo[MAX_PATH]; PINSTALLED_INFO Info = (PINSTALLED_INFO) ListViewGetlParam(Index); if (!Info || !Info->hSubKey) return FALSE; GetApplicationString(Info->hSubKey, L"DisplayName", szText); NewRichEditText(szText, CFE_BOLD); InsertRichEditText(L"\n", 0); #define GET_INFO(a, b, c, d) \ if (GetApplicationString(Info->hSubKey, a, szInfo)) \ { \ LoadStringW(hInst, b, szText, sizeof(szText) / sizeof(WCHAR)); \ InsertRichEditText(szText, c); \ InsertRichEditText(szInfo, d); \ } \ GET_INFO(L"DisplayVersion", IDS_INFO_VERSION, CFE_BOLD, 0); GET_INFO(L"Publisher", IDS_INFO_PUBLISHER, CFE_BOLD, 0); GET_INFO(L"RegOwner", IDS_INFO_REGOWNER, CFE_BOLD, 0); GET_INFO(L"ProductID", IDS_INFO_PRODUCTID, CFE_BOLD, 0); GET_INFO(L"HelpLink", IDS_INFO_HELPLINK, CFE_BOLD, CFM_LINK); GET_INFO(L"HelpTelephone", IDS_INFO_HELPPHONE, CFE_BOLD, 0); GET_INFO(L"Readme", IDS_INFO_README, CFE_BOLD, 0); GET_INFO(L"Contact", IDS_INFO_CONTACT, CFE_BOLD, 0); GET_INFO(L"URLUpdateInfo", IDS_INFO_UPDATEINFO, CFE_BOLD, CFM_LINK); GET_INFO(L"URLInfoAbout", IDS_INFO_INFOABOUT, CFE_BOLD, CFM_LINK); GET_INFO(L"Comments", IDS_INFO_COMMENTS, CFE_BOLD, 0); GET_INFO(L"InstallDate", IDS_INFO_INSTALLDATE, CFE_BOLD, 0); GET_INFO(L"InstallLocation", IDS_INFO_INSTLOCATION, CFE_BOLD, 0); GET_INFO(L"InstallSource", IDS_INFO_INSTALLSRC, CFE_BOLD, 0); GET_INFO(L"UninstallString", IDS_INFO_UNINSTALLSTR, CFE_BOLD, 0); GET_INFO(L"InstallSource", IDS_INFO_INSTALLSRC, CFE_BOLD, 0); GET_INFO(L"ModifyPath", IDS_INFO_MODIFYPATH, CFE_BOLD, 0); return TRUE; }
VOID RemoveAppFromRegistry(INT Index) { PINSTALLED_INFO Info; WCHAR szFullName[MAX_PATH] = L"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\"; ATL::CStringW szMsgText, szMsgTitle; INT ItemIndex = SendMessageW(hListView, LVM_GETNEXTITEM, -1, LVNI_FOCUSED); if (!IsInstalledEnum(SelectedEnumType)) return; Info = (PINSTALLED_INFO) ListViewGetlParam(Index); if (!Info || !Info->hSubKey || (ItemIndex == -1)) return; if (!szMsgText.LoadStringW(IDS_APP_REG_REMOVE) || !szMsgTitle.LoadStringW(IDS_INFORMATION)) return; if (MessageBoxW(hMainWnd, szMsgText, szMsgTitle, MB_YESNO | MB_ICONQUESTION) == IDYES) { ATL::CStringW::CopyChars(szFullName, MAX_PATH, Info->szKeyName.GetString(), MAX_PATH - wcslen(szFullName)); if (RegDeleteKeyW(Info->hRootKey, szFullName) == ERROR_SUCCESS) { ListView_DeleteItem(hListView, ItemIndex); return; } if (!szMsgText.LoadStringW(IDS_UNABLE_TO_REMOVE)) return; MessageBoxW(hMainWnd, szMsgText.GetString(), NULL, MB_OK | MB_ICONERROR); } }