Implemented BroadcastSystemMessageW.

diff --git a/windows/message.c b/windows/message.c
index 1b2d780..1a003b1 100644
--- a/windows/message.c
+++ b/windows/message.c
@@ -723,13 +723,15 @@
     {
     case 1:
         message = (msg->message == WM_KEYDOWN) ? WM_CHAR : WM_SYSCHAR;
-        TRACE_(key)("1 -> PostMessage(%s)\n", SPY_GetMsgName(message, msg->hwnd));
+        TRACE_(key)("1 -> PostMessageW(%p,%s,%04x,%08lx)\n",
+            msg->hwnd, SPY_GetMsgName(message, msg->hwnd), wp[0], msg->lParam);
         PostMessageW( msg->hwnd, message, wp[0], msg->lParam );
         break;
 
     case -1:
         message = (msg->message == WM_KEYDOWN) ? WM_DEADCHAR : WM_SYSDEADCHAR;
-        TRACE_(key)("-1 -> PostMessage(%s)\n", SPY_GetMsgName(message, msg->hwnd));
+        TRACE_(key)("-1 -> PostMessageW(%p,%s,%04x,%08lx)\n",
+            msg->hwnd, SPY_GetMsgName(message, msg->hwnd), wp[0], msg->lParam);
         PostMessageW( msg->hwnd, message, wp[0], msg->lParam );
         return TRUE;
     }
@@ -947,3 +949,26 @@
         return -1;
     }
 }
+
+/***********************************************************************
+ *		BroadcastSystemMessageW (USER32.@)
+ */
+LONG WINAPI BroadcastSystemMessageW(
+	DWORD dwFlags,LPDWORD recipients,UINT uMessage,WPARAM wParam,
+	LPARAM lParam )
+{
+    if ((*recipients & BSM_APPLICATIONS)||
+        (*recipients == BSM_ALLCOMPONENTS))
+    {
+        FIXME("(%08lx,%08lx,%08x,%08x,%08lx): semi-stub!\n",
+              dwFlags,*recipients,uMessage,wParam,lParam);
+        PostMessageW(HWND_BROADCAST,uMessage,wParam,lParam);
+        return 1;
+    }
+    else
+    {
+        FIXME("(%08lx,%08lx,%08x,%08x,%08lx): stub!\n",
+              dwFlags,*recipients,uMessage,wParam,lParam);
+        return -1;
+    }
+}