wine/dlls/shell32 shelllink.c
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Nov 3 03:55:22 CST 2005
ChangeSet ID: 21073
CVSROOT: /opt/cvs-commit
Module name: wine
Changes by: julliard at winehq.org 2005/11/03 03:55:22
Modified files:
dlls/shell32 : shelllink.c
Log message:
Mike McCormack <mike at codeweavers.com>
Pass the correct verb.
Add a space between extra parameters.
Wait for ShellExecute to complete.
Patch: http://cvs.winehq.org/patch.py?id=21073
Old revision New revision Changes Path
1.109 1.110 +15 -1 wine/dlls/shell32/shelllink.c
Index: wine/dlls/shell32/shelllink.c
diff -u -p wine/dlls/shell32/shelllink.c:1.109 wine/dlls/shell32/shelllink.c:1.110
--- wine/dlls/shell32/shelllink.c:1.109 3 Nov 2005 9:55:22 -0000
+++ wine/dlls/shell32/shelllink.c 3 Nov 2005 9:55:22 -0000
@@ -2466,6 +2466,7 @@ static HRESULT WINAPI
ShellLink_InvokeCommand( IContextMenu* iface, LPCMINVOKECOMMANDINFO lpici )
{
IShellLinkImpl *This = impl_from_IContextMenu(iface);
+ static const WCHAR szOpen[] = { 'O','p','e','n',0 };
SHELLEXECUTEINFOW sei;
HWND hwnd = NULL; /* FIXME: get using interface set from IObjectWithSite */
LPWSTR args = NULL;
@@ -2500,7 +2501,7 @@ ShellLink_InvokeCommand( IContextMenu* i
( lpici->fMask & CMIC_MASK_UNICODE ) )
{
LPCMINVOKECOMMANDINFOEX iciex = (LPCMINVOKECOMMANDINFOEX) lpici;
- DWORD len = 0;
+ DWORD len = 2;
if ( This->sArgs )
len += lstrlenW( This->sArgs );
@@ -2512,19 +2513,32 @@ ShellLink_InvokeCommand( IContextMenu* i
if ( This->sArgs )
lstrcatW( args, This->sArgs );
if ( iciex->lpParametersW )
+ {
+ static const WCHAR space[] = { ' ', 0 };
+ lstrcatW( args, space );
lstrcatW( args, iciex->lpParametersW );
+ }
}
memset( &sei, 0, sizeof sei );
sei.cbSize = sizeof sei;
+ sei.fMask = SEE_MASK_UNICODE | SEE_MASK_NOCLOSEPROCESS;
sei.lpFile = path;
sei.nShow = This->iShowCmd;
sei.lpIDList = This->pPidl;
sei.lpDirectory = This->sWorkDir;
sei.lpParameters = args;
+ sei.lpVerb = szOpen;
if( ShellExecuteExW( &sei ) )
+ {
+ if ( sei.hProcess )
+ {
+ WaitForSingleObject( sei.hProcess, 10000 );
+ CloseHandle( sei.hProcess );
+ }
r = S_OK;
+ }
else
r = E_FAIL;
More information about the wine-cvs
mailing list