Vincent Povirk : shell32: Display error messages in ShellExecuteEx.
Alexandre Julliard
julliard at winehq.org
Fri Dec 19 11:19:35 CST 2008
Module: wine
Branch: master
Commit: 5c24f70c8bcee41e7a4dd3c0142d170b2042f59c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=5c24f70c8bcee41e7a4dd3c0142d170b2042f59c
Author: Vincent Povirk <vincent at codeweavers.com>
Date: Mon Dec 15 10:10:07 2008 -0600
shell32: Display error messages in ShellExecuteEx.
---
dlls/shell32/shlexec.c | 17 ++++++++++++++++-
1 files changed, 16 insertions(+), 1 deletions(-)
diff --git a/dlls/shell32/shlexec.c b/dlls/shell32/shlexec.c
index 4dc3f12..8a65636 100644
--- a/dlls/shell32/shlexec.c
+++ b/dlls/shell32/shlexec.c
@@ -1447,6 +1447,16 @@ static UINT_PTR SHELL_execute_url( LPCWSTR lpFile, LPCWSTR wFile, LPCWSTR wcmd,
return retval;
}
+static void do_error_dialog( UINT_PTR retval, HWND hwnd )
+{
+ WCHAR msg[2048];
+ int error_code=GetLastError();
+
+ FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM, NULL, error_code, 0, msg, sizeof(msg)/sizeof(WCHAR), NULL);
+
+ MessageBoxW(hwnd, msg, NULL, MB_ICONERROR);
+}
+
/*************************************************************************
* SHELL_execute [Internal]
*/
@@ -1458,7 +1468,7 @@ BOOL SHELL_execute( LPSHELLEXECUTEINFOW sei, SHELL_ExecuteW32 execfunc )
static const WCHAR wHttp[] = {'h','t','t','p',':','/','/',0};
static const DWORD unsupportedFlags =
SEE_MASK_INVOKEIDLIST | SEE_MASK_ICON | SEE_MASK_HOTKEY |
- SEE_MASK_CONNECTNETDRV | SEE_MASK_FLAG_DDEWAIT | SEE_MASK_FLAG_NO_UI |
+ SEE_MASK_CONNECTNETDRV | SEE_MASK_FLAG_DDEWAIT |
SEE_MASK_UNICODE | SEE_MASK_ASYNCOK | SEE_MASK_HMONITOR;
WCHAR parametersBuffer[1024], dirBuffer[MAX_PATH], wcmdBuffer[1024];
@@ -1592,6 +1602,8 @@ BOOL SHELL_execute( LPSHELLEXECUTEINFOW sei, SHELL_ExecuteW32 execfunc )
{
retval = SHELL_execute_class( wszApplicationName, &sei_tmp, sei,
execfunc );
+ if (retval <= 32 && !(sei_tmp.fMask & SEE_MASK_FLAG_NO_UI))
+ do_error_dialog(retval, sei_tmp.hwnd);
HeapFree(GetProcessHeap(), 0, wszApplicationName);
if (wszParameters != parametersBuffer)
HeapFree(GetProcessHeap(), 0, wszParameters);
@@ -1815,6 +1827,9 @@ BOOL SHELL_execute( LPSHELLEXECUTEINFOW sei, SHELL_ExecuteW32 execfunc )
HeapFree(GetProcessHeap(), 0, wcmd);
sei->hInstApp = (HINSTANCE)(retval > 32 ? 33 : retval);
+
+ if (retval <= 32 && !(sei_tmp.fMask & SEE_MASK_FLAG_NO_UI))
+ do_error_dialog(retval, sei_tmp.hwnd);
return retval > 32;
}
More information about the wine-cvs
mailing list