From cc8b2717ae8dce0fff79d2b601c78d683f32027d Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Mon, 25 Jun 2018 02:46:06 +0900 Subject: [PATCH] [SHELL32] Implement OpenAs_RunDLLA/W (#628) CORE-14751 --- dll/win32/shell32/shlexec.cpp | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/dll/win32/shell32/shlexec.cpp b/dll/win32/shell32/shlexec.cpp index bfbec4b704a..67c10f317ca 100644 --- a/dll/win32/shell32/shlexec.cpp +++ b/dll/win32/shell32/shlexec.cpp @@ -3,6 +3,7 @@ * * Copyright 1998 Marcus Meissner * Copyright 2002 Eric Pouech + * Copyright 2018 Katayama Hirofumi MZ * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -2288,17 +2289,32 @@ EXTERN_C HINSTANCE WINAPI WOWShellExecute(HWND hWnd, LPCSTR lpVerb, LPCSTR lpFil } /************************************************************************* - * OpenAs_RunDLLA [SHELL32.@] + * OpenAs_RunDLLW [SHELL32.@] */ -EXTERN_C void WINAPI OpenAs_RunDLLA(HWND hwnd, HINSTANCE hinst, LPCSTR cmdline, int cmdshow) +EXTERN_C void WINAPI +OpenAs_RunDLLW(HWND hwnd, HINSTANCE hinst, LPCWSTR cmdline, int cmdshow) { - FIXME("%p, %p, %s, %d\n", hwnd, hinst, debugstr_a(cmdline), cmdshow); + OPENASINFO info; + TRACE("%p, %p, %s, %d\n", hwnd, hinst, debugstr_w(cmdline), cmdshow); + + ZeroMemory(&info, sizeof(info)); + info.pcszFile = cmdline; + info.pcszClass = NULL; + info.oaifInFlags = OAIF_ALLOW_REGISTRATION | OAIF_REGISTER_EXT | OAIF_EXEC; + + SHOpenWithDialog(hwnd, &info); } /************************************************************************* - * OpenAs_RunDLLW [SHELL32.@] + * OpenAs_RunDLLA [SHELL32.@] */ -EXTERN_C void WINAPI OpenAs_RunDLLW(HWND hwnd, HINSTANCE hinst, LPCWSTR cmdline, int cmdshow) +EXTERN_C void WINAPI +OpenAs_RunDLLA(HWND hwnd, HINSTANCE hinst, LPCSTR cmdline, int cmdshow) { - FIXME("%p, %p, %s, %d\n", hwnd, hinst, debugstr_w(cmdline), cmdshow); + LPWSTR pszCmdLineW = NULL; + TRACE("%p, %p, %s, %d\n", hwnd, hinst, debugstr_a(cmdline), cmdshow); + + __SHCloneStrAtoW(&pszCmdLineW, cmdline); + OpenAs_RunDLLW(hwnd, hinst, pszCmdLineW, cmdshow); + SHFree(pszCmdLineW); }