diff src/gui_w32.c @ 29432:339fe2968690 v9.0.0058

patch 9.0.0058: Win32: cannot test low level events Commit: https://github.com/vim/vim/commit/81a3ff97e2012bdafc3ece796289f2e11e2754f3 Author: Yegappan Lakshmanan <yegappan@yahoo.com> Date: Sat Jul 23 05:04:16 2022 +0100 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)
author Bram Moolenaar <Bram@vim.org>
date Sat, 23 Jul 2022 06:15:07 +0200
parents f103da6ba95f
children 8d9400c64654
line wrap: on
line diff
--- a/src/gui_w32.c
+++ b/src/gui_w32.c
@@ -8541,3 +8541,42 @@ netbeans_draw_multisign_indicator(int ro
     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