Owen Rudge : appwiz.cpl: Gather extra information for Support Info dialog.
Alexandre Julliard
julliard at winehq.org
Tue Jul 29 07:16:41 CDT 2008
Module: wine
Branch: master
Commit: ac3337ee91562779180cff976e22c47148f94cf7
URL: http://source.winehq.org/git/wine.git/?a=commit;h=ac3337ee91562779180cff976e22c47148f94cf7
Author: Owen Rudge <owen at owenrudge.net>
Date: Mon Jul 28 15:16:35 2008 +0100
appwiz.cpl: Gather extra information for Support Info dialog.
---
dlls/appwiz.cpl/En.rc | 1 +
dlls/appwiz.cpl/appwiz.c | 84 ++++++++++++++++++++++++++++++++++++++++++++++
dlls/appwiz.cpl/res.h | 1 +
3 files changed, 86 insertions(+), 0 deletions(-)
diff --git a/dlls/appwiz.cpl/En.rc b/dlls/appwiz.cpl/En.rc
index 155f46c..b75715b 100644
--- a/dlls/appwiz.cpl/En.rc
+++ b/dlls/appwiz.cpl/En.rc
@@ -28,6 +28,7 @@ STRINGTABLE
IDS_TAB1_TITLE, "Applications"
IDS_UNINSTALL_FAILED, "Unable to execute the uninstaller, '%s'. Do you want to remove the uninstall entry for this program from the registry?"
+ IDS_NOT_SPECIFIED, "Not specified"
IDS_COLUMN_NAME, "Name"
IDS_COLUMN_PUBLISHER, "Publisher"
diff --git a/dlls/appwiz.cpl/appwiz.c b/dlls/appwiz.cpl/appwiz.c
index 7312a27..44bf3b2 100644
--- a/dlls/appwiz.cpl/appwiz.c
+++ b/dlls/appwiz.cpl/appwiz.c
@@ -78,6 +78,14 @@ static const WCHAR DisplayIconW[] = {'D','i','s','p','l','a','y','I','c','o','n'
static const WCHAR DisplayVersionW[] = {'D','i','s','p','l','a','y','V','e','r',
's','i','o','n',0};
static const WCHAR PublisherW[] = {'P','u','b','l','i','s','h','e','r',0};
+static const WCHAR ContactW[] = {'C','o','n','t','a','c','t',0};
+static const WCHAR HelpLinkW[] = {'H','e','l','p','L','i','n','k',0};
+static const WCHAR HelpTelephoneW[] = {'H','e','l','p','T','e','l','e','p','h',
+ 'o','n','e',0};
+static const WCHAR ReadmeW[] = {'R','e','a','d','m','e',0};
+static const WCHAR URLUpdateInfoW[] = {'U','R','L','U','p','d','a','t','e','I',
+ 'n','f','o',0};
+static const WCHAR CommentsW[] = {'C','o','m','m','e','n','t','s',0};
static const WCHAR UninstallCommandlineW[] = {'U','n','i','n','s','t','a','l','l',
'S','t','r','i','n','g',0};
@@ -418,6 +426,46 @@ static void UninstallProgram(int id)
}
}
+/**********************************************************************************
+ * Name : SetInfoDialogText
+ * Description: Sets the text of a label in a window, based upon a registry entry
+ * or string passed to the function.
+ * Parameters : hKey - registry entry to read from, NULL if not reading
+ * from registry
+ * lpKeyName - key to read from, or string to check if hKey is NULL
+ * lpAltMessage - alternative message if entry not found
+ * hWnd - handle of dialog box
+ * iDlgItem - ID of label in dialog box
+ */
+static void SetInfoDialogText(HKEY hKey, LPWSTR lpKeyName, LPWSTR lpAltMessage,
+ HWND hWnd, int iDlgItem)
+{
+ WCHAR buf[MAX_STRING_LEN];
+ DWORD buflen;
+ HWND hWndDlgItem;
+
+ hWndDlgItem = GetDlgItem(hWnd, iDlgItem);
+
+ /* if hKey is null, lpKeyName contains the string we want to check */
+ if (hKey == NULL)
+ {
+ if ((lpKeyName) && (lstrlenW(lpKeyName) > 0))
+ SetWindowTextW(hWndDlgItem, lpKeyName);
+ else
+ SetWindowTextW(hWndDlgItem, lpAltMessage);
+ }
+ else
+ {
+ buflen = MAX_STRING_LEN;
+
+ if ((RegQueryValueExW(hKey, lpKeyName, 0, 0, (LPBYTE) buf, &buflen) ==
+ ERROR_SUCCESS) && (lstrlenW(buf) > 0))
+ SetWindowTextW(hWndDlgItem, buf);
+ else
+ SetWindowTextW(hWndDlgItem, lpAltMessage);
+ }
+}
+
/******************************************************************************
* Name : SupportInfoDlgProc
* Description: Callback procedure for support info dialog
@@ -430,8 +478,11 @@ static void UninstallProgram(int id)
static BOOL CALLBACK SupportInfoDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
APPINFO *iter;
+ HKEY hkey;
WCHAR oldtitle[MAX_STRING_LEN];
WCHAR buf[MAX_STRING_LEN];
+ WCHAR key[MAX_STRING_LEN];
+ WCHAR notfound[MAX_STRING_LEN];
switch(msg)
{
@@ -440,6 +491,37 @@ static BOOL CALLBACK SupportInfoDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPAR
{
if (iter->id == (int) lParam)
{
+ lstrcpyW(key, PathUninstallW);
+ lstrcatW(key, BackSlashW);
+ lstrcatW(key, iter->regkey);
+
+ /* check the application's registry entries */
+ RegOpenKeyExW(iter->regroot, key, 0, KEY_READ, &hkey);
+
+ /* Load our "not specified" string */
+ LoadStringW(hInst, IDS_NOT_SPECIFIED, notfound,
+ sizeof(notfound) / sizeof(notfound[0]));
+
+ /* Update the data for items already read into the structure */
+ SetInfoDialogText(NULL, iter->publisher, notfound, hWnd,
+ IDC_INFO_PUBLISHER);
+ SetInfoDialogText(NULL, iter->version, notfound, hWnd,
+ IDC_INFO_VERSION);
+
+ /* And now update the data for those items in the registry */
+ SetInfoDialogText(hkey, (LPWSTR) ContactW, notfound, hWnd,
+ IDC_INFO_CONTACT);
+ SetInfoDialogText(hkey, (LPWSTR) HelpLinkW, notfound, hWnd,
+ IDC_INFO_SUPPORT);
+ SetInfoDialogText(hkey, (LPWSTR) HelpTelephoneW, notfound, hWnd,
+ IDC_INFO_PHONE);
+ SetInfoDialogText(hkey, (LPWSTR) ReadmeW, notfound, hWnd,
+ IDC_INFO_README);
+ SetInfoDialogText(hkey, (LPWSTR) URLUpdateInfoW, notfound, hWnd,
+ IDC_INFO_UPDATES);
+ SetInfoDialogText(hkey, (LPWSTR) CommentsW, notfound, hWnd,
+ IDC_INFO_COMMENTS);
+
/* Update the main label with the app name */
if (GetWindowTextW(GetDlgItem(hWnd, IDC_INFO_LABEL), oldtitle,
MAX_STRING_LEN) != 0)
@@ -448,6 +530,8 @@ static BOOL CALLBACK SupportInfoDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPAR
SetWindowTextW(GetDlgItem(hWnd, IDC_INFO_LABEL), buf);
}
+ RegCloseKey(hkey);
+
break;
}
}
diff --git a/dlls/appwiz.cpl/res.h b/dlls/appwiz.cpl/res.h
index ea32be8..34129c4 100644
--- a/dlls/appwiz.cpl/res.h
+++ b/dlls/appwiz.cpl/res.h
@@ -49,6 +49,7 @@
#define IDS_CPL_DESC 2
#define IDS_TAB1_TITLE 3
#define IDS_UNINSTALL_FAILED 4
+#define IDS_NOT_SPECIFIED 5
#define IDS_COLUMN_NAME 6
#define IDS_COLUMN_PUBLISHER 7
#define IDS_COLUMN_VERSION 8
More information about the wine-cvs
mailing list