Commit 67826491 authored by Alex Henrie's avatar Alex Henrie Committed by Alexandre Julliard

shell32: Implement ShellExec_RunDLL.

parent 5ec4d1be
...@@ -440,9 +440,9 @@ ...@@ -440,9 +440,9 @@
@ stub SheShortenPathW @ stub SheShortenPathW
@ stdcall ShellAboutA(long str str long) @ stdcall ShellAboutA(long str str long)
@ stdcall ShellAboutW(long wstr wstr long) @ stdcall ShellAboutW(long wstr wstr long)
@ stub ShellExec_RunDLL @ stdcall ShellExec_RunDLL(long long str long) ShellExec_RunDLLA
@ stub ShellExec_RunDLLA @ stdcall ShellExec_RunDLLA(long long str long)
@ stub ShellExec_RunDLLW @ stdcall ShellExec_RunDLLW(long long wstr long)
@ stdcall ShellExecuteA(long str str str str long) @ stdcall ShellExecuteA(long str str str str long)
@ stdcall ShellExecuteEx (long) ShellExecuteExA @ stdcall ShellExecuteEx (long) ShellExecuteExA
@ stdcall ShellExecuteExA (long) @ stdcall ShellExecuteExA (long)
......
...@@ -2016,6 +2016,58 @@ HINSTANCE WINAPI WOWShellExecute(HWND hWnd, LPCSTR lpVerb,LPCSTR lpFile, ...@@ -2016,6 +2016,58 @@ HINSTANCE WINAPI WOWShellExecute(HWND hWnd, LPCSTR lpVerb,LPCSTR lpFile,
} }
/************************************************************************* /*************************************************************************
* 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.@] * OpenAs_RunDLLA [SHELL32.@]
*/ */
void WINAPI OpenAs_RunDLLA(HWND hwnd, HINSTANCE hinst, LPCSTR cmdline, int cmdshow) void WINAPI OpenAs_RunDLLA(HWND hwnd, HINSTANCE hinst, LPCSTR cmdline, int cmdshow)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment