patch 9.0.0058: Win32: cannot test low level events

Problem:    Win32: cannot test low level events.
Solution:   Add "sendevent" to test_gui_event(). (Yegappan Lakshmanan,
            closes #10679)
diff --git a/src/gui_w32.c b/src/gui_w32.c
index f53318d..472cebf 100644
--- a/src/gui_w32.c
+++ b/src/gui_w32.c
@@ -8541,3 +8541,42 @@
     SetPixel(s_hdc, x+2, y, gui.currFgColor);
 }
 #endif
+
+#if defined(FEAT_EVAL) || defined(PROTO)
+    int
+test_gui_w32_sendevent(dict_T *args)
+{
+    char_u	*event;
+    INPUT	inputs[1];
+
+    event = dict_get_string(args, "event", TRUE);
+    if (event == NULL)
+	return FALSE;
+
+    ZeroMemory(inputs, sizeof(inputs));
+
+    if (STRICMP(event, "keydown") == 0 || STRICMP(event, "keyup") == 0)
+    {
+	WORD	    vkCode;
+
+	vkCode = dict_get_number_def(args, "keycode", 0);
+	if (vkCode <= 0 || vkCode >= 0xFF)
+	{
+	    semsg(_(e_invalid_argument_nr), (long)vkCode);
+	    return FALSE;
+	}
+
+	inputs[0].type = INPUT_KEYBOARD;
+	inputs[0].ki.wVk = vkCode;
+	if (STRICMP(event, "keyup") == 0)
+	    inputs[0].ki.dwFlags = KEYEVENTF_KEYUP;
+	SendInput(ARRAYSIZE(inputs), inputs, sizeof(INPUT));
+    }
+    else
+	semsg(_(e_invalid_argument_str), event);
+
+    vim_free(event);
+
+    return TRUE;
+}
+#endif