shell32: Implement ShellExec_RunDLL.

Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Alex Henrie 2017-09-25 22:52:52 -06:00 committed by Alexandre Julliard
parent 5ec4d1be97
commit 67826491a6
2 changed files with 55 additions and 3 deletions

View file

@ -440,9 +440,9 @@
@ stub SheShortenPathW
@ stdcall ShellAboutA(long str str long)
@ stdcall ShellAboutW(long wstr wstr long)
@ stub ShellExec_RunDLL
@ stub ShellExec_RunDLLA
@ stub ShellExec_RunDLLW
@ stdcall ShellExec_RunDLL(long long str long) ShellExec_RunDLLA
@ stdcall ShellExec_RunDLLA(long long str long)
@ stdcall ShellExec_RunDLLW(long long wstr long)
@ stdcall ShellExecuteA(long str str str str long)
@ stdcall ShellExecuteEx (long) ShellExecuteExA
@ stdcall ShellExecuteExA (long)

View file

@ -2015,6 +2015,58 @@ HINSTANCE WINAPI WOWShellExecute(HWND hWnd, LPCSTR lpVerb,LPCSTR lpFile,
return seiW.hInstApp;
}
/*************************************************************************
* ShellExec_RunDLLW [SHELL32.@]
*/
void WINAPI ShellExec_RunDLLW(HWND hwnd, HINSTANCE instance, WCHAR *cmdline, int cmdshow)
{
BOOL in_single_quotes = FALSE, in_double_quotes = FALSE;
WCHAR *args;
TRACE("%p, %p, %s, %d\n", hwnd, instance, debugstr_w(cmdline), cmdshow);
/* Replace the first whitespace character in the command line string with a
null terminator to separate the program name from the program arguments */
for (args = cmdline; *args; args++)
{
switch (*args)
{
case '\\':
args++; /* skip the next character */
break;
case '\'':
if (!in_double_quotes)
in_single_quotes = !in_single_quotes;
break;
case '"':
if (!in_single_quotes)
in_double_quotes = !in_double_quotes;
break;
case ' ':
case '\t':
if (!in_single_quotes && !in_double_quotes)
{
*args = 0;
args++;
goto execute;
}
}
}
execute:
ShellExecuteW(hwnd, NULL, cmdline, args, NULL, cmdshow);
}
/*************************************************************************
* ShellExec_RunDLLA [SHELL32.@]
*/
void WINAPI ShellExec_RunDLLA(HWND hwnd, HINSTANCE instance, CHAR *cmdline, int cmdshow)
{
WCHAR *cmdlineW;
ShellExec_RunDLLW(hwnd, instance, __SHCloneStrAtoW(&cmdlineW, cmdline), cmdshow);
SHFree(cmdlineW);
}
/*************************************************************************
* OpenAs_RunDLLA [SHELL32.@]
*/