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