André Hentschel : appwiz: Add function for installer button.
Alexandre Julliard
julliard at winehq.org
Wed Jun 24 09:22:58 CDT 2009
Module: wine
Branch: master
Commit: ee9baf28d2391a7607468d52d6abed1abeb4dcb8
URL: http://source.winehq.org/git/wine.git/?a=commit;h=ee9baf28d2391a7607468d52d6abed1abeb4dcb8
Author: André Hentschel <nerv at dawncrow.de>
Date: Sun Jun 21 17:05:41 2009 +0200
appwiz: Add function for installer button.
---
dlls/appwiz.cpl/De.rc | 1 +
dlls/appwiz.cpl/En.rc | 1 +
dlls/appwiz.cpl/Makefile.in | 2 +-
dlls/appwiz.cpl/appwiz.c | 50 +++++++++++++++++++++++++++++++++++++++++++
dlls/appwiz.cpl/res.h | 1 +
5 files changed, 54 insertions(+), 1 deletions(-)
diff --git a/dlls/appwiz.cpl/De.rc b/dlls/appwiz.cpl/De.rc
index b85d43e..47263f3 100644
--- a/dlls/appwiz.cpl/De.rc
+++ b/dlls/appwiz.cpl/De.rc
@@ -35,6 +35,7 @@ STRINGTABLE
IDS_COLUMN_NAME, "Name"
IDS_COLUMN_PUBLISHER, "Herausgeber"
IDS_COLUMN_VERSION, "Version"
+ IDS_INSTALL_FILTER, "Setup-Programme\0*instal*.exe;*setup*.exe;*.msi\0Programme (*.exe)\0*.exe\0Alle Dateien (*.*)\0*.*\0\0"
}
IDD_MAIN DIALOG 0, 0, 320, 220
diff --git a/dlls/appwiz.cpl/En.rc b/dlls/appwiz.cpl/En.rc
index d0b4de3..3463b2e 100644
--- a/dlls/appwiz.cpl/En.rc
+++ b/dlls/appwiz.cpl/En.rc
@@ -33,6 +33,7 @@ STRINGTABLE
IDS_COLUMN_NAME, "Name"
IDS_COLUMN_PUBLISHER, "Publisher"
IDS_COLUMN_VERSION, "Version"
+ IDS_INSTALL_FILTER, "Installation Programs\0*instal*.exe;*setup*.exe;*.msi\0Programs (*.exe)\0*.exe\0All Files (*.*)\0*.*\0\0"
}
IDD_MAIN DIALOG 0, 0, 320, 220
diff --git a/dlls/appwiz.cpl/Makefile.in b/dlls/appwiz.cpl/Makefile.in
index 141715d..8fc65f1 100644
--- a/dlls/appwiz.cpl/Makefile.in
+++ b/dlls/appwiz.cpl/Makefile.in
@@ -3,7 +3,7 @@ TOPOBJDIR = ../..
SRCDIR = @srcdir@
VPATH = @srcdir@
MODULE = appwiz.cpl
-IMPORTS = kernel32 comctl32 advapi32 shell32 user32
+IMPORTS = kernel32 comctl32 advapi32 shell32 user32 comdlg32
C_SRCS = \
appwiz.c
diff --git a/dlls/appwiz.cpl/appwiz.c b/dlls/appwiz.cpl/appwiz.c
index 892c635..daf3e82 100644
--- a/dlls/appwiz.cpl/appwiz.c
+++ b/dlls/appwiz.cpl/appwiz.c
@@ -41,6 +41,7 @@
#include <winreg.h>
#include <shellapi.h>
#include <commctrl.h>
+#include <commdlg.h>
#include <cpl.h>
#include "res.h"
@@ -71,6 +72,8 @@ typedef struct APPINFO {
static struct APPINFO *AppInfo = NULL;
static HINSTANCE hInst;
+static const WCHAR openW[] = {'o','p','e','n',0};
+
/* names of registry keys */
static const WCHAR BackSlashW[] = { '\\', 0 };
static const WCHAR DisplayNameW[] = {'D','i','s','p','l','a','y','N','a','m','e',0};
@@ -372,6 +375,49 @@ static void UpdateButtons(HWND hWnd)
}
/******************************************************************************
+ * Name : InstallProgram
+ * Description: Search for potential Installer and execute it.
+ * Parameters : hWnd - Handle of the dialog box
+ */
+static void InstallProgram(HWND hWnd)
+{
+ OPENFILENAMEW ofn;
+ WCHAR titleW[MAX_STRING_LEN];
+ WCHAR FilterBufferW[MAX_STRING_LEN];
+ WCHAR FileNameBufferW[MAX_PATH];
+
+ LoadStringW(hInst, IDS_CPL_TITLE, titleW, sizeof(titleW)/sizeof(WCHAR));
+ LoadStringW(hInst, IDS_INSTALL_FILTER, FilterBufferW, sizeof(FilterBufferW)/sizeof(WCHAR));
+
+ memset(&ofn, 0, sizeof(OPENFILENAMEW));
+ ofn.lStructSize = sizeof(OPENFILENAMEW);
+ ofn.hwndOwner = hWnd;
+ ofn.hInstance = hInst;
+ ofn.lpstrFilter = FilterBufferW;
+ ofn.nFilterIndex = 0;
+ ofn.lpstrFile = FileNameBufferW;
+ ofn.nMaxFile = MAX_PATH;
+ ofn.lpstrFileTitle = NULL;
+ ofn.nMaxFileTitle = 0;
+ ofn.lpstrTitle = titleW;
+ ofn.Flags = OFN_HIDEREADONLY | OFN_ENABLESIZING;
+ FileNameBufferW[0] = 0;
+
+ if (GetOpenFileNameW(&ofn))
+ {
+ SHELLEXECUTEINFOW sei;
+ memset(&sei, 0, sizeof(sei));
+ sei.cbSize = sizeof(sei);
+ sei.lpVerb = openW;
+ sei.nShow = SW_SHOWDEFAULT;
+ sei.fMask = SEE_MASK_NO_CONSOLE;
+ sei.lpFile = ofn.lpstrFile;
+
+ ShellExecuteExW(&sei);
+ }
+}
+
+/******************************************************************************
* Name : UninstallProgram
* Description: Executes the specified program's installer.
* Parameters : id - the internal ID of the installer to remove
@@ -737,6 +783,10 @@ static BOOL CALLBACK MainDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lPar
case WM_COMMAND:
switch (LOWORD(wParam))
{
+ case IDC_INSTALL:
+ InstallProgram(hWnd);
+ break;
+
case IDC_ADDREMOVE:
selitem = SendDlgItemMessageW(hWnd, IDL_PROGRAMS,
LVM_GETNEXTITEM, -1, LVNI_FOCUSED|LVNI_SELECTED);
diff --git a/dlls/appwiz.cpl/res.h b/dlls/appwiz.cpl/res.h
index 34129c4..5efcee2 100644
--- a/dlls/appwiz.cpl/res.h
+++ b/dlls/appwiz.cpl/res.h
@@ -53,3 +53,4 @@
#define IDS_COLUMN_NAME 6
#define IDS_COLUMN_PUBLISHER 7
#define IDS_COLUMN_VERSION 8
+#define IDS_INSTALL_FILTER 9
More information about the wine-cvs
mailing list