From 81a3ff97e2012bdafc3ece796289f2e11e2754f3 Mon Sep 17 00:00:00 2001 From: Yegappan Lakshmanan Date: Sat, 23 Jul 2022 05:04:16 +0100 Subject: 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) --- src/gui_w32.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) (limited to 'src/gui_w32.c') diff --git a/src/gui_w32.c b/src/gui_w32.c index f53318d677..472cebf733 100644 --- a/src/gui_w32.c +++ b/src/gui_w32.c @@ -8541,3 +8541,42 @@ netbeans_draw_multisign_indicator(int row) 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 -- cgit v1.2.3