Fix double-clicking control panel items

svn path=/trunk/; revision=17752
This commit is contained in:
Gé van Geldorp 2005-09-08 21:08:53 +00:00
parent 67720419df
commit 8da043e4f2
2 changed files with 8 additions and 5 deletions

View file

@ -970,6 +970,7 @@ static HRESULT WINAPI IShellExecuteHookW_fnExecute(IShellExecuteHookW* iface, LP
SHELLEXECUTEINFOW sei_tmp; SHELLEXECUTEINFOW sei_tmp;
PIDLCPanelStruct* pcpanel; PIDLCPanelStruct* pcpanel;
WCHAR path[MAX_PATH]; WCHAR path[MAX_PATH];
WCHAR params[MAX_PATH];
BOOL ret; BOOL ret;
int l; int l;
@ -990,12 +991,13 @@ static HRESULT WINAPI IShellExecuteHookW_fnExecute(IShellExecuteHookW* iface, LP
/* pass applet name to Control_RunDLL to distinguish between applets in one .cpl file */ /* pass applet name to Control_RunDLL to distinguish between applets in one .cpl file */
path[l++] = '"'; path[l++] = '"';
path[l++] = ' '; path[l] = '\0';
MultiByteToWideChar(CP_ACP, 0, pcpanel->szName+pcpanel->offsDispName, -1, path+l, MAX_PATH); MultiByteToWideChar(CP_ACP, 0, pcpanel->szName+pcpanel->offsDispName, -1, params, MAX_PATH);
memcpy(&sei_tmp, psei, sizeof(sei_tmp)); memcpy(&sei_tmp, psei, sizeof(sei_tmp));
sei_tmp.lpFile = path; sei_tmp.lpFile = path;
sei_tmp.lpParameters = params;
sei_tmp.fMask &= ~SEE_MASK_INVOKEIDLIST; sei_tmp.fMask &= ~SEE_MASK_INVOKEIDLIST;
sei_tmp.lpVerb = wCplopen; sei_tmp.lpVerb = wCplopen;

View file

@ -1263,9 +1263,10 @@ BOOL WINAPI ShellExecuteExW32 (LPSHELLEXECUTEINFOW sei, SHELL_ExecuteW32 execfun
lpFile = wfileName; lpFile = wfileName;
strcpyW(wcmd, wszApplicationName);
if (sei_tmp.lpParameters[0]) { if (sei_tmp.lpParameters[0]) {
strcatW(wszApplicationName, wSpace); strcatW(wcmd, wSpace);
strcatW(wszApplicationName, wszParameters); strcatW(wcmd, wszParameters);
} }
/* We set the default to open, and that should generally work. /* We set the default to open, and that should generally work.
@ -1273,7 +1274,7 @@ BOOL WINAPI ShellExecuteExW32 (LPSHELLEXECUTEINFOW sei, SHELL_ExecuteW32 execfun
if (!sei_tmp.lpVerb) if (!sei_tmp.lpVerb)
sei_tmp.lpVerb = wszOpen; sei_tmp.lpVerb = wszOpen;
retval = execfunc(wszApplicationName, NULL, FALSE, &sei_tmp, sei); retval = execfunc(wcmd, NULL, FALSE, &sei_tmp, sei);
if (retval > 32) if (retval > 32)
return TRUE; return TRUE;