ShellExecute patch

Andreas Mohr andi at rhlx01.fht-esslingen.de
Thu Feb 21 17:12:47 CST 2002


Hi all,

slightly changed resubmission of ShellExecute patch.

ShellExecute() is supposed to call WinExec() instead of WinExec16()
(proper long filename support)

-- 
Andreas Mohr                        Stauferstr. 6, D-71272 Renningen, Germany
-------------- next part --------------
Determining best CVS host...
Using CVSROOT :pserver:cvs at rhlx01.fht-esslingen.de:/home/wine
Index: dlls/shell32/shell.c
===================================================================
RCS file: /home/wine/wine/dlls/shell32/shell.c,v
retrieving revision 1.36
diff -u -r1.36 shell.c
--- dlls/shell32/shell.c	14 Feb 2002 19:20:30 -0000	1.36
+++ dlls/shell32/shell.c	21 Feb 2002 21:15:28 -0000
@@ -335,12 +335,13 @@
 /*************************************************************************
  *				ShellExecute		[SHELL.20]
  */
-HINSTANCE16 WINAPI ShellExecute16( HWND16 hWnd, LPCSTR lpOperation,
-                                   LPCSTR lpFile, LPCSTR lpParameters,
-                                   LPCSTR lpDirectory, INT16 iShowCmd )
+HINSTANCE SHELL_Execute( HWND hWnd, LPCSTR lpOperation,
+                         LPCSTR lpFile, LPCSTR lpParameters,
+                         LPCSTR lpDirectory, INT iShowCmd, BOOL win32 )
 {   HINSTANCE16 retval=31;
     char old_dir[1024];
     char cmd[1024] = "";
+    HINSTANCE WINAPI (*pWinExec)(LPCSTR lpCmdLine, UINT nCmdShow);
 
     TRACE("(%04x,'%s','%s','%s','%s',%x)\n",
 		hWnd, lpOperation ? lpOperation:"<null>", lpFile ? lpFile:"<null>",
@@ -348,6 +349,9 @@
 		lpDirectory ? lpDirectory : "<null>", iShowCmd);
 
     if (lpFile==NULL) return 0; /* should not happen */
+
+    pWinExec = (win32) ? (void *)WinExec : (void *)WinExec16;
+
     if (lpOperation==NULL) /* default is open */
       lpOperation="open";
 
@@ -363,7 +367,7 @@
         strcat(cmd,lpParameters );
     }
 
-    retval = WinExec16( cmd, iShowCmd );
+    retval = pWinExec( cmd, iShowCmd);
 
     /* Unable to execute lpFile directly
        Check if we can match an application to lpFile */
@@ -379,7 +383,7 @@
             strcat(cmd," ");
             strcat(cmd,lpParameters);
         }
-        retval = WinExec16( cmd, iShowCmd );
+        retval = pWinExec( cmd, iShowCmd );
       }
       else if(PathIsURLA((LPSTR)lpFile))    /* File not found, check for URL */
       {
@@ -444,7 +448,7 @@
 		}
 	    }
  
-	    retval = WinExec16( cmd, iShowCmd );
+	    retval = pWinExec( cmd, iShowCmd );
 	}
       }
     /* Check if file specified is in the form www.??????.*** */
@@ -459,6 +463,16 @@
     if (lpDirectory)
       SetCurrentDirectoryA( old_dir );
     return retval;
+}
+
+/*************************************************************************
+ *				ShellExecute		[SHELL.20]
+ */
+HINSTANCE16 WINAPI ShellExecute16( HWND16 hWnd, LPCSTR lpOperation,
+                                   LPCSTR lpFile, LPCSTR lpParameters,
+                                   LPCSTR lpDirectory, INT16 iShowCmd )
+{
+    return SHELL_Execute(hWnd, lpOperation, lpFile, lpParameters, lpDirectory, iShowCmd, FALSE);
 }
 
 /*************************************************************************
Index: dlls/shell32/shell32_main.c
===================================================================
RCS file: /home/wine/wine/dlls/shell32/shell32_main.c,v
retrieving revision 1.91
diff -u -r1.91 shell32_main.c
--- dlls/shell32/shell32_main.c	2 Feb 2002 18:42:15 -0000	1.91
+++ dlls/shell32/shell32_main.c	21 Feb 2002 21:15:28 -0000
@@ -194,7 +194,7 @@
                               SHFILEINFOA *psfi, UINT sizeofpsfi,
                               UINT flags )
 {
-	char szLoaction[MAX_PATH];
+	char szLocation[MAX_PATH];
 	int iIndex;
 	DWORD ret = TRUE, dwAttributes = 0;
 	IShellFolder * psfParent = NULL;
@@ -357,11 +357,11 @@
 
 	  if (SUCCEEDED(hr))
 	  {
-	    hr = IExtractIconA_GetIconLocation(pei, (flags & SHGFI_OPENICON)? GIL_OPENICON : 0,szLoaction, MAX_PATH, &iIndex, &uFlags);
+	    hr = IExtractIconA_GetIconLocation(pei, (flags & SHGFI_OPENICON)? GIL_OPENICON : 0,szLocation, MAX_PATH, &iIndex, &uFlags);
 	    /* FIXME what to do with the index? */
 
 	    if(uFlags != GIL_NOTFILENAME)
-	      strcpy (psfi->szDisplayName, szLoaction);
+	      strcpy (psfi->szDisplayName, szLocation);
 	    else
 	      ret = FALSE;
 	      
@@ -703,8 +703,8 @@
                                     LPCSTR lpFile, LPCSTR lpParameters,
                                     LPCSTR lpDirectory, INT iShowCmd )
 {   TRACE("\n");
-    return ShellExecute16( hWnd, lpOperation, lpFile, lpParameters,
-                           lpDirectory, iShowCmd );
+    return SHELL_Execute( hWnd, lpOperation, lpFile, lpParameters,
+                           lpDirectory, iShowCmd, TRUE );
 }
 
 /*************************************************************************
Index: dlls/shell32/shell32_main.h
===================================================================
RCS file: /home/wine/wine/dlls/shell32/shell32_main.h,v
retrieving revision 1.44
diff -u -r1.44 shell32_main.h
--- dlls/shell32/shell32_main.h	2 Feb 2002 18:42:15 -0000	1.44
+++ dlls/shell32/shell32_main.h	21 Feb 2002 21:15:28 -0000
@@ -163,6 +163,7 @@
 BOOL SHELL_DeleteFileA(LPCSTR pszFile, BOOL bShowUI);
 BOOL SHELL_WarnItemDelete(int nKindOfDialog, LPCSTR szDir);
 
+HINSTANCE SHELL_Execute( HWND hWnd, LPCSTR lpOperation, LPCSTR lpFile, LPCSTR lpParameters, LPCSTR lpDirectory, INT iShowCmd, BOOL win32 );
 extern HINSTANCE SHELL_FindExecutable(LPCSTR,LPCSTR ,LPSTR);
 
 /* 16-bit functions */


More information about the wine-patches mailing list