Fix execution of Control Panel items.
This commit is contained in:
parent
8ec81f16fc
commit
5b7da80911
|
@ -970,6 +970,7 @@ static HRESULT WINAPI IShellExecuteHookW_fnExecute(IShellExecuteHookW* iface, LP
|
|||
SHELLEXECUTEINFOW sei_tmp;
|
||||
PIDLCPanelStruct* pcpanel;
|
||||
WCHAR path[MAX_PATH];
|
||||
WCHAR params[MAX_PATH];
|
||||
BOOL ret;
|
||||
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 */
|
||||
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));
|
||||
sei_tmp.lpFile = path;
|
||||
sei_tmp.lpParameters = params;
|
||||
sei_tmp.fMask &= ~SEE_MASK_INVOKEIDLIST;
|
||||
sei_tmp.lpVerb = wCplopen;
|
||||
|
||||
|
|
|
@ -1263,9 +1263,10 @@ BOOL WINAPI ShellExecuteExW32 (LPSHELLEXECUTEINFOW sei, SHELL_ExecuteW32 execfun
|
|||
|
||||
lpFile = wfileName;
|
||||
|
||||
strcpyW(wcmd, wszApplicationName);
|
||||
if (sei_tmp.lpParameters[0]) {
|
||||
strcatW(wszApplicationName, wSpace);
|
||||
strcatW(wszApplicationName, wszParameters);
|
||||
strcatW(wcmd, wSpace);
|
||||
strcatW(wcmd, wszParameters);
|
||||
}
|
||||
|
||||
/* 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)
|
||||
sei_tmp.lpVerb = wszOpen;
|
||||
|
||||
retval = execfunc(wszApplicationName, NULL, FALSE, &sei_tmp, sei);
|
||||
retval = execfunc(wcmd, NULL, FALSE, &sei_tmp, sei);
|
||||
if (retval > 32)
|
||||
return TRUE;
|
||||
|
||||
|
|
|
@ -704,9 +704,7 @@ static void test_lnks()
|
|||
okChildInt("argcA", 5);
|
||||
okChildString("argvA3", "Open");
|
||||
sprintf(filename, "%s\\test file.shlexec", tmpdir);
|
||||
todo_wine {
|
||||
okChildPath("argvA4", filename);
|
||||
}
|
||||
|
||||
sprintf(filename, "%s\\test_shortcut_exe.lnk", tmpdir);
|
||||
rc=shell_execute_ex(SEE_MASK_NOZONECHECKS, NULL, filename, NULL, NULL);
|
||||
|
|
Loading…
Reference in New Issue