Module: wine Branch: master Commit: fd230c5d15b63883211ae1f7e7bea62b99664107 URL: http://source.winehq.org/git/wine.git/?a=commit;h=fd230c5d15b63883211ae1f7e7...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Dec 7 18:28:04 2011 +0100
appwiz.cpl: Run winebrowser directly instead of using ShellExecute.
---
dlls/appwiz.cpl/addons.c | 41 ++++++++++++++++++++++++++++++++++++++--- 1 files changed, 38 insertions(+), 3 deletions(-)
diff --git a/dlls/appwiz.cpl/addons.c b/dlls/appwiz.cpl/addons.c index 4987ea3..9a410b8 100644 --- a/dlls/appwiz.cpl/addons.c +++ b/dlls/appwiz.cpl/addons.c @@ -434,10 +434,45 @@ static DWORD WINAPI download_proc(PVOID arg) return 0; }
-static INT_PTR CALLBACK installer_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +static void run_winebrowser(const WCHAR *url) { - static const WCHAR openW[] = {'o','p','e','n',0}; + PROCESS_INFORMATION pi; + STARTUPINFOW si; + WCHAR app[MAX_PATH]; + LONG len, url_len; + WCHAR *args; + BOOL ret; + + static const WCHAR winebrowserW[] = {'\','w','i','n','e','b','r','o','w','s','e','r','.','e','x','e',0}; + + url_len = strlenW(url); + + len = GetSystemDirectoryW(app, MAX_PATH-sizeof(winebrowserW)/sizeof(WCHAR)); + memcpy(app+len, winebrowserW, sizeof(winebrowserW)); + len += sizeof(winebrowserW)/sizeof(WCHAR) -1; + + args = heap_alloc((len+1+url_len)*sizeof(WCHAR)); + if(!args) + return; + + memcpy(args, app, len*sizeof(WCHAR)); + args[len++] = ' '; + memcpy(args+len, url, (url_len+1) * sizeof(WCHAR));
+ TRACE("starting %s\n", debugstr_w(args)); + + memset(&si, 0, sizeof(si)); + si.cb = sizeof(si); + ret = CreateProcessW(app, args, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); + heap_free(args); + if (ret) { + CloseHandle(pi.hThread); + CloseHandle(pi.hProcess); + } +} + +static INT_PTR CALLBACK installer_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ switch(msg) { case WM_INITDIALOG: ShowWindow(GetDlgItem(hwnd, ID_DWL_PROGRESS), SW_HIDE); @@ -450,7 +485,7 @@ static INT_PTR CALLBACK installer_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARA case NM_CLICK: case NM_RETURN: if (wParam == ID_DWL_STATUS) - ShellExecuteW( NULL, openW, ((NMLINK *)lParam)->item.szUrl, NULL, NULL, SW_SHOW ); + run_winebrowser(((NMLINK*)lParam)->item.szUrl); break; } break;